注意:如果容器启动失败,通过下面命令查看错误信息
docker logs --tail 20 容器名
挂载文件时出现 Permission denied,移步此处
本文会随着自己的学习进度持续更新。。。
docker部署容器篇
1. 挂载数据卷的两种方式
1.1 绝对路径方式
宿主机 挂载 数据卷到容器中,如果宿主机的源文件夹是空的,这样即使容器内的目标文件夹中有数据,目标文件夹下的数据也会被清空。所以通过这种方式挂载的文件需要先把容器内的文件 通过 docker cp 拷贝到宿主机,然后再挂载。
// 1. 先启动一个 简易nginx容器
docker run -d --name nginx1 nginx
// 2. 拷贝 nginx容器中的配置文件信息,到宿主机(先创建好宿主机上的目录)
// docker cp 容器名:容器内文件的路径 宿主机对应的目标目录
docker cp nginx1:/etc/nginx/conf.d /data/nginx
docker cp nginx1:/usr/share/nginx/html /data/nginx
docker run -d \
--restart=always \
--name nginx \
-p 80:80 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
nginx
1.2 相对路径方式
宿主机 挂载 数据卷到容器中,即使宿主机内没有对应的数据,它会把容器内目标文件夹下的文件都拷贝出来,然后再做映射关系。
注意:使用这种方式,只能设置一个文件名(docker会自动在宿主机 创建出映射的文件夹)。
错误示例:-v nginx/conf:/etc/nginx/conf.d -v nginx/html:/usr/share/nginx/html
docker run -d --name nginx \
-p 80:80 \
-v nginx_conf:/etc/nginx/conf.d \
-v nginx_html:/usr/share/nginx/html \
-e TZ="Asia/Shanghai" nginx
2. 部署nginx
2.1 绝对路径方式
// 1. 先启动一个 简易nginx容器
docker run -d --name nginx1 nginx
// 2. 拷贝 nginx容器中的配置文件信息,到宿主机(先创建好宿主机上的目录)
// docker cp 容器名:容器内文件的路径 宿主机对应的目标目录
docker cp nginx1:/etc/nginx/conf.d /data/nginx
docker cp nginx1:/usr/share/nginx/html /data/nginx
// 3. 删除 刚刚运行的简易nginx容器
// -f 强制删除容器
docker rm -f nginx1
或
docker stop nginx1 // 先停
docker rm nginx1 // 后删
// 4. 将宿主文件挂载到 nginx容器
// -d 后台运行 -restart=always 启动docker时自启动容器
// --name 为容器起名 -p 映射端口 -v 挂载文件
// -e TZ="Asia/Shanghai" 设置容器内的时区,如果不设置会出现偏差8个小时
docker run -d \
--restart=always \
--name nginx \
-p 80:80 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-e TZ="Asia/Shanghai" nginx
2.2 相对路径
docker run -d --name nginx \
-p 80:80 \
-v nginx_conf:/etc/nginx/conf.d \
-v nginx_html:/usr/share/nginx/html \
-e TZ="Asia/Shanghai" nginx
3. 部署Mysql
3.1 绝对路径
// 1. 运行一个 简易mysql容器
docker run -d --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 mysql
// 2. 拷贝容器内的文件到宿主机
docker cp mysql1:/etc/mysql/conf.d /data/mysql/conf
// 3. 修改/data/mysql/conf/conf.d/mysql.conf文件配置字符集
// 添加如下内容:
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server = utf8mb4
[client]
default-character-set = utf8mb4
// 4. 挂载 并运行mysql容器
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart=always \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true \
mysql:8.0
3.2 相对路径
用于初始化数据库的sql 挂载到容器内的 /docker-entrypoint-initdb.d 这个目录下
如:-v init.sql:/docker-entrypoint-initdb.d/init.sql
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart=always \
-v mysql_data:/var/lib/mysql \
-v mysql_conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true \
mysql:8.0
4. 部署 Redis
4.1 绝对路径
准备 redis 的文件夹
/data/redis/conf
/data/redis/data
准备redis 配置文件,放到 /data/redis/conf/redis.conf
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
requirepass 123456
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
运行命令:
docker run -d -p 6379:6379 --name redis -v /data/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data redis:7.0 redis-server /etc/redis/redis.conf
4.2 相对路径
在 docker的volume 文件夹下创建一个 redis_conf/_data/default.conf 文件,把上面的配置文件拷贝到这个文件夹下,然后再做映射。
docker run -d -p 6379:6379 --name redis \
-v redis_conf:/etc/redis/conf.d \
-v redis_data:/data redis:7.0 \
redis-server /etc/redis/conf.d/default.conf
5. 部署 nacos
5.1 单机版
docker run -d -e MODE=standalone \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-e NACOS_AUTH_IDENTITY_KEY=serverIdentity \
-e NACOS_AUTH_IDENTITY_VALUE=security \
-v nacos_logs:/home/nacos/logs \
-v nacos_conf:/home/nacos/conf \
--name nacos-2.2.1 -p 8848:8848 -p 9848:9848 nacos/nacos-server:v2.2.1
nacos中使用到的 gprc 端口号需要在原始的基础上+1000
MODE=standalone 单机版
--restart=always 开机启动
-p 8848:8848 映射端口
-d 后台运行
6. 部署 rabbitMQ
5672: 与rabbitmq建立连接,发送消息的端口
15672: 访问rabbitmq 图形界面的端口
25672: rabbit集群通信的端口
图形界面的默认登录账号密码:username=guest password=guest
docker run -d --name rabbitmq3.7 \
-v rabbitmq_conf:/etc/rabbitmq \
-e TZ="Asia/Shanghai" \
-p 5672:5672 -p 15672:15672 -p 25672:25672 \
-e RABBITMQ_DEFAULT_USER=wuyu -e RABBITMQ_DEFAULT_PASS=123456
rabbitmq:3.7-management
7. 部署Seata
docker run -d --name seata \
-p 8091:8091 -p 7091:7091 \
-e SEATA_IP=192.168.193.200 -e SEATA_PORT=8091 \
-v seata_resources:/seata-server/resources \
seataio/seata-server:1.7.0
8. 部署Minio
docker run \
--name minio \
-p 9000:9000 \
-p 9090:9090 \
-d \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio123" \
-v minio_data:/data \
-v minio_config:/root/.minio \
minio/minio server /data --console-address ":9090" --address ":9000"