仅做记录之用,详细的操作方法可以查看/
Redis的启动方式:
最简单的启动方式,最好还是带个端口映射
sudo docker run --name some-redis -d redis redis-server --appendonly yes
自定义配置文件的启动方式
sudo docker run -v /home/java/dev_env/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name redis-latest -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf
自定义配置文件的启动方式,配置文件里的数据持久化路径是 dir ./ 在容器中就是保存在/data中,也可以映射处理
sudo docker run -v /home/java/dev_env/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/java/dev_env/redis/data:/data --name redis-latest -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf
注意:自定义配置文件里,daemonize no 要配置成no,默认也是no,不让在后台启动,Redis容器才不会自动关闭
容器版redis是没有配置文件的,redis初始配置文件可以下载个redis包中就有
MongoDB的启动方式
指定mongo的配置文件
sudo docker run --name mongo-4.0.5 -p 27017:27017 -v /home/java/dev_env/mongodb/data:/data/db -d \-v /home/java/dev_env/mongodb/mongo:/etc/mongo \-e MONGO_INITDB_ROOT_USERNAME=admin \-e MONGO_INITDB_ROOT_PASSWORD=admin \mongo:4.0.5 --config /etc/mongo/mongod.conf
MongoDB参考配置文件mongod.conf:
systemLog:# verbosity: 0 #日志等级,0-5,默认0# quiet: false #限制日志输出,# traceAllExceptions: true #详细错误日志# syslogFacility: user #记录到操作系统的日志级别,指定的值必须是操作系统支持的,并且要以--syslog启动path: /var/log/mongodb/mongodb.log #日志路径。logAppend: false #启动时,日志追加在已有日志文件内还是备份旧日志后,创建新文件记录日志, 默认falselogRotate: rename #rename/reopen。rename,重命名旧日志文件,创建新文件记录;reopen,重新打开旧日志记录,需logAppend为truedestination: file #日志输出方式。file/syslog,如果是file,需指定path,默认是输出到标准输出流中timeStampFormat: iso8601-local #日志日期格式。ctime/iso8601-utc/iso8601-local, 默认iso8601-local# component: #各组件的日志级别# accessControl:# verbosity: <int># command:# verbosity: <int>processManagement:fork: false #以守护进程运行 默认falsepidFilePath: /var/log/mongodb/master.pid #PID 文件位置net:port: 27017 #监听端口,默认27017#bindIp: 127.0.0.1 #绑定监听的ip,deb和rpm包里有默认的配置文件(/etc/mongod.conf)里面默认配置为127.0.0.1,若不限制IP,务必确保认证安全,多个Ip用逗号分隔maxIncomingConnections: 65536 #最大连接数,可接受的连接数还受限于操作系统配置的最大连接数wireObjectCheck: true #校验客户端的请求,防止错误的或无效BSON插入,多层文档嵌套的对象会有轻微性能影响,默认trueipv6: false #是否启用ipv6,3.0以上版本始终开启unixDomainSocket: #unix socket监听,仅适用于基于unix的系统enabled: false #默认truepathPrefix: /tmp #路径前缀,默认/tempfilePermissions: 0700 #文件权限 默认0700#http: #警告 确保生产环境禁用HTTP status接口、REST API以及JSON API以防止数据暴露和漏洞攻击# enabled: false #是否启用HTTP接口、启用会增加网络暴露。3.2版本后停止使用HTTP interface# JSONPEnabled: false #JSONP的HTTP接口# RESTInterfaceEnabled: false #REST API接口# ssl: #估计用不到,所以没有自己看# sslOnNormalPorts: <boolean> # deprecated since 2.6# mode: <string># PEMKeyFile: <string># PEMKeyPassword: <string># clusterFile: <string># clusterPassword: <string># CAFile: <string># CRLFile: <string># allowConnectionsWithoutCertificates: <boolean># allowInvalidCertificates: <boolean># allowInvalidHostnames: <boolean># disabledProtocols: <string># FIPSMode: <boolean>#security:#authorization: enabled # enabled/disabled #开启客户端认证#javascriptEnabled: true #启用或禁用服务器端JavaScript执行# keyFile: <string> #密钥路径# clusterAuthMode: <string> #集群认证方式# enableEncryption: <boolean># encryptionCipherMode: <string># encryptionKeyFile: <string># kmip:# keyIdentifier: <string># rotateMasterKey: <boolean># serverName: <string># port: <string># clientCertificateFile: <string># clientCertificatePassword: <string># serverCAFile: <string># sasl:# hostName: <string># serviceName: <string># saslauthdSocketPath: <string># setParameter: #设置参数# <parameter1>: <value1># <parameter2>: <value2>storage:dbPath: /data/db #数据库,默认/data/db,如果使用软件包管理安装的查看/etc/mongod.confindexBuildRetry: true #重启时,重建不完整的索引# repairPath: <string> #--repair操作时的临时工作目录,默认为dbPath下的一个_tmp_repairDatabase_<num>的目录journal: enabled: true #启动journal,64位系统默认开启,32位默认关闭# commitIntervalMs: <num> #journal操作的最大时间间隔,默认100或30directoryPerDB: false #使用单独的目录来存储每个数据库的数据,默认false,如果需要更改,要备份数据,删除掉dbPath下的文件,重建后导入数据# syncPeriodSecs: 60 #使用fsync来将数据写入磁盘的延迟时间量,建议使用默认值engine: wiredTiger #存储引擎,mmapv1/wiredTiger/inMemory 默认wiredTiger# mmapv1:# preallocDataFiles: <boolean># nsSize: <int># quota:# enforced: <boolean># maxFilesPerDB: <int># smallFiles: <boolean># journal:# debugFlags: <int># commitIntervalMs: <num># wiredTiger:# engineConfig:# cacheSizeGB: <number> #缓存大小# journalCompressor: <string> #数据压缩格式 none/snappy/zlib# directoryForIndexes: <boolean> #将索引和集合存储在单独的子目录下,默认false# collectionConfig:# blockCompressor: <string> #集合数据压缩格式 # indexConfig:# prefixCompression: <boolean> #启用索引的前缀压缩# inMemory:# engineConfig:# inMemorySizeGB: <number>operationProfiling: #性能分析slowOpThresholdMs: 100 #认定为查询速度缓慢的时间阈值,超过该时间的查询即为缓慢查询,会被记录到日志中, 默认100mode: off #operationProfiling模式 off/slowOp/all 默认off# replication: #复制集相关# oplogSizeMB: <int># replSetName: <string># secondaryIndexPrefetch: <string># enableMajorityReadConcern: <boolean># sharding: #集群分片相关# clusterRole: <string># archiveMovedChunks: <boolean># auditLog:# destination: <string># format: <string># path: <string># filter: <string># snmp:# subagent: <boolean> #当设置为true,SNMP作为代理运行# master: <boolean> #当设置为true,SNMP作为主服务器运行# basisTech:# rootDirectory: <string>
启动mysql
启动mysql容器并root的密码
sudo docker run --name mysql-8.0.13 -p 3306:3306 -v /home/java/dev_env/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.13 --character-set-server=utf8 --collation-server=utf8_unicode_ci
导入数据(sql文件)到docker里面的mysql
sudo docker exec -i mysql-8.0.13 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /home/java/dev_env/mysql/localhost_dump/**.sql
小记录插曲:有一次在阿里云上使用上面的方式启动mysql:8.0容器,当使用DBeaver连接时,报错:Access denied for user ‘XXX’@’XXX’ (using password: YES)
起初以为是密码不对,或不满足mysql的密码规则,而且查看阿里云上的帮助也是这样说的,就尝试进入mysql容器修改root密码,发现没用,而且能连接进MySQL,说明root密码也是正确的。
原因:一般来说,MySQL8.0直接用ROOT用户的账号密码去远程连接是不行,即使密码正确。MYSQL 8.0内新增加mysql_native_password函数,通过更改这个函数密码来进行远程连接。
解决:
1.进入 MySQL容器
sudo docker exec -it mysql容器id /bin/bash
2.在容器内执行:mysql -u root -p密码,进入mysql
3.更改ROOT用户的native_password密码
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY'MyPass@123';Query OK, 0 rows affected (0.15 sec)
mysql> select host,user,plugin,authentication_string from mysql.user;+-----------+------------------+-----------------------+------------------------------------------------------------------------+| host| user | plugin| authentication_string|+-----------+------------------+-----------------------+------------------------------------------------------------------------+| % | admin| mysql_native_password | *64497856A3076BBA4E1D491A02250AD86F8B18AF|| % | root | mysql_native_password | *3E08E9382F129B0918BBE4BE77226D6F07F6C5D2|| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED || localhost | mysql.session | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED || localhost | mysql.sys | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED || localhost | root | mysql_native_password | *3E08E9382F129B0918BBE4BE77226D6F07F6C5D2|+-----------+------------------+-----------------------+------------------------------------------------------------------------+6 rows in set (0.00 sec)
host,表示哪些地址可以使用对应的账号连接本数据库,%代表所有地址,plugin要改成mysql_native_password 才行,上面的alter user 密码 就会自动更改成mysql_native_password
这样就可以远程使用工具来连接mysql了
启动nginx
比较全的Nginx启动方式,需要操作的文件夹映射到宿主机,方便操作
sudo docker run --name nginx-latest -v /home/java/dev_env/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /home/java/dev_env/nginx/html:/usr/share/nginx/html:ro -v /home/java/dev_env/nginx/logs:/var/log/nginx -p 80:80 -d nginx
上面写的都是比较全面的启动方法,需要其他启动方式请查看官方:/