仅做记录之用,详细的操作方法可以查看https://hub.docker.com/
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 #启动时,日志追加在已有日志文件内还是备份旧日志后,创建新文件记录日志, 默认false
logRotate: rename #rename/reopen。rename,重命名旧日志文件,创建新文件记录;reopen,重新打开旧日志记录,需logAppend为true
destination: 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 #以守护进程运行 默认false
pidFilePath: /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插入,多层文档嵌套的对象会有轻微性能影响,默认true
ipv6: false #是否启用ipv6,3.0以上版本始终开启
unixDomainSocket: #unix socket监听,仅适用于基于unix的系统
enabled: false #默认true
pathPrefix: /tmp #路径前缀,默认/temp
filePermissions: 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.conf
indexBuildRetry: true #重启时,重建不完整的索引
# repairPath: <string> #--repair操作时的临时工作目录,默认为dbPath下的一个_tmp_repairDatabase_<num>的目录
journal:
enabled: true #启动journal,64位系统默认开启,32位默认关闭
# commitIntervalMs: <num> #journal操作的最大时间间隔,默认100或30
directoryPerDB: 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 #认定为查询速度缓慢的时间阈值,超过该时间的查询即为缓慢查询,会被记录到日志中, 默认100
mode: 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
上面写的都是比较全面的启动方法,需要其他启动方式请查看官方:https://hub.docker.com/