常见组件的docker部署方法(又名:快速搭建项目环境)
前言
本文主要讲解项目开发和部署过程中如何通过docker快速部署常见组件,快速搭建起可用的环境。
所有命令均基于Linux操作,对Linux和docker熟练的读者可以快速索引复制命令不用死背这些命令,不熟悉的读者也可以跟随步骤一步一步操作完成自己的环境搭建。(不过更方便的方式是直接指挥AI帮助部署)
考虑到数据和配置的可控、可用、可迁移等特性以及方便快捷操作,会采用大量目录映射的方式挂载本地目录。
考虑到新手读者,本文会采用最小步骤来进行操作且不会进行命令讲解,避免造成更多困扰。
标准操作流程永远是这 6 步:
- 建目录:在宿主机创建存放配置的文件夹。
- 跑临时:启动一个什么都不挂载的“临时容器”,让它用官方默认配置正常跑起来。
- 等初始化:等待几十秒,让容器内部把配置生成好。
- 拷出来:用 docker cp 命令,把容器里的文件复制到宿主机的目录里。
- 删临时:停止并删除这个临时容器。
- 改配置:用文本编辑器修改拷出来的文件,修改权限,然后正式挂载启动。
常见组件创建
MYSQL
第 1 步:宿主机建目录
- 创建数据存放目录
mkdir -p /opt/mysql/data,/opt/mysql/data可以替换成任意自定义目录 - 创建配置存放目录
mkdir -p /opt/mysql/conf,/opt/mysql/conf可以替换成任意自定义目录 - 创建配置子目录
mkdir -p /opt/mysql/conf/conf.d,用于存放额外的配置片段
第 2 步: 启动一个临时 MySQL 容器
我们将其命名为temp_mysql,设个简单密码让它启动
docker run -d --name temp_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
注意:如果本地没有对应的镜像,会先拉取镜像,然后再启动MySQL容器,因此耗时比较长。
第 4 步:把容器内的配置文件拷贝到宿主机
MySQL 的主配置文件在/etc/mysql/my.cnf,使用如下命令进行复制:
docker cp temp_mysql:/etc/mysql/my.cnf /opt/mysql/conf/my.cnf
其中/opt/mysql/conf应替换为前文中你自己创建的配置存放目录
第 5 步:停止并删除临时容器,释放资源
直接执行如下命令:
docker stop temp_mysql
docker rm temp_mysql
第 6 步:修改配置并挂载启动
修改配置文件
用 vim 编辑配置文件(如果你不懂 vim,可以用 echo 追加)
例如:开启 binlog 日志(复制下面整段执行)
cat >> /opt/mysql/conf/conf.d/docker.cnf << EOF
[mysqld]
default-time-zone='+8:00'
max_connections=1000
EOF
# 设置权限(MySQL 容器内用户 ID 是 999)
chown -R 999:999 /opt/mysql/data
chown -R 999:999 /opt/mysql/conf
正式部署
可直接运行命令:
docker run -d \
--name mysql8 \
--restart=always \
-p 3306:3306 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /opt/mysql/conf/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=YourStrongPassword123 \
mysql:8.0
注意:/opt/mysql/conf、/opt/mysql/conf/conf.d与/opt/mysql/data应替换成之前的自定义目录,YourStrongPassword123应替换为你自己的连接密码。
需要DockerCompose的读者:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: YourStrongPassword123
ports:
- "3306:3306"
volumes:
- /opt/mysql/data:/var/lib/mysql
- /opt/mysql/conf/my.cnf:/etc/mysql/my.cnf
- /opt/mysql/conf/conf.d:/etc/mysql/conf.d
POSTGRESQL
第 1 步:宿主机建目录
- 创建数据存放目录
mkdir -p /opt/postgres/data,/opt/postgres/data可以替换成任意自定义目录 - 创建配置存放目录
mkdir -p /opt/postgres/conf,/opt/postgres/conf可以替换成任意自定义目录
第 2 步: 启动一个临时 PostgreSQL 容器
我们将其命名为temp_pg,设个简单密码让它启动
docker run -d --name temp_pg -e POSTGRES_PASSWORD=123456 postgres:15
注意:如果本地没有对应的镜像,会先拉取镜像,然后再启动容器,因此耗时比较长。PostgreSQL 的配置文件在初始化完成后才会完整生成,启动后请等待约 10 秒再执行后续步骤。
第 4 步:把容器内的配置文件拷贝到宿主机
PostgreSQL 的主配置文件默认生成在数据目录/var/lib/postgresql/data里(postgresql.conf与pg_hba.conf),使用如下命令进行复制:
docker cp temp_pg:/var/lib/postgresql/data/postgresql.conf /opt/postgres/conf/postgresql.conf
docker cp temp_pg:/var/lib/postgresql/data/pg_hba.conf /opt/postgres/conf/pg_hba.conf
其中/opt/postgres/conf应替换为前文中你自己创建的配置存放目录
第 5 步:停止并删除临时容器,释放资源
直接执行如下命令:
docker stop temp_pg
docker rm temp_pg
第 6 步:修改配置并挂载启动
修改配置文件
用 sed 命令直接替换(如果你不懂 vim 也可以完成)。例如:修改 pg_hba.conf 允许密码登录、修改 postgresql.conf 监听所有 IP(复制下面整段执行)
sed -i 's/trust/md5/g' /opt/postgres/conf/pg_hba.conf
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /opt/postgres/conf/postgresql.conf
# 设置权限(PG 容器内用户 ID 是 999)
chown -R 999:999 /opt/postgres/data
chown -R 999:999 /opt/postgres/conf
正式部署
可直接运行命令:
docker run -d \
--name postgres15 \
--restart=always \
-p 5432:5432 \
-v /opt/postgres/data:/var/lib/postgresql/data \
-v /opt/postgres/conf/postgresql.conf:/var/lib/postgresql/data/postgresql.conf \
-v /opt/postgres/conf/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf \
-e POSTGRES_USER=pgadmin \
-e POSTGRES_PASSWORD=AdminPass123 \
-e POSTGRES_DB=appdb \
postgres:15
注意:/opt/postgres/conf与/opt/postgres/data应替换成之前的自定义目录,AdminPass123应替换为你自己的连接密码。
需要DockerCompose的读者:
version: '3.8'
services:
postgres:
image: postgres:15
container_name: postgres15
restart: always
environment:
POSTGRES_USER: pgadmin
POSTGRES_PASSWORD: AdminPass123
POSTGRES_DB: appdb
ports:
- "5432:5432"
volumes:
- /opt/postgres/data:/var/lib/postgresql/data
- /opt/postgres/conf/postgresql.conf:/var/lib/postgresql/data/postgresql.conf
- /opt/postgres/conf/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
MONGODB
第 1 步:宿主机建目录
- 创建数据存放目录
mkdir -p /opt/mongo/data,/opt/mongo/data可以替换成任意自定义目录 - 创建配置存放目录
mkdir -p /opt/mongo/conf,/opt/mongo/conf可以替换成任意自定义目录 - 创建日志存放目录
mkdir -p /opt/mongo/logs,/opt/mongo/logs可以替换成任意自定义目录
第 2 步: 启动一个临时 MongoDB 容器
我们将其命名为temp_mongo,直接让它启动
docker run -d --name temp_mongo mongo:6
注意:如果本地没有对应的镜像,会先拉取镜像,然后再启动容器,因此耗时比较长。启动后请等待约 10 秒让初始化完成,再执行后续步骤。
第 4 步:把容器内的配置文件拷贝到宿主机
MongoDB 的主配置文件在/etc/mongod.conf,使用如下命令进行复制:
docker cp temp_mongo:/etc/mongod.conf /opt/mongo/conf/mongod.conf
其中/opt/mongo/conf应替换为前文中你自己创建的配置存放目录
第 5 步:停止并删除临时容器,释放资源
直接执行如下命令:
docker stop temp_mongo
docker rm temp_mongo
第 6 步:修改配置并挂载启动
修改配置文件
用 sed 命令直接替换开启远程连接,并设置权限(Mongo 容器内部 mongodb 用户 ID 是 999),复制下面整段执行:
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/g' /opt/mongo/conf/mongod.conf
chown -R 999:999 /opt/mongo/data
chown -R 999:999 /opt/mongo/conf
chown -R 999:999 /opt/mongo/logs
正式部署
可直接运行命令:
docker run -d \
--name mongo6 \
--restart=always \
-p 27017:27017 \
-v /opt/mongo/data:/data/db \
-v /opt/mongo/conf/mongod.conf:/etc/mongod.conf \
-v /opt/mongo/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=RootPass123 \
mongo:6 mongod --config /etc/mongod.conf
注意:/opt/mongo/conf、/opt/mongo/data与/opt/mongo/logs应替换成之前的自定义目录,RootPass123应替换为你自己的连接密码。
需要DockerCompose的读者:
version: '3.8'
services:
mongodb:
image: mongo:6
container_name: mongo6
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: RootPass123
ports:
- "27017:27017"
volumes:
- /opt/mongo/data:/data/db
- /opt/mongo/conf/mongod.conf:/etc/mongod.conf
- /opt/mongo/logs:/var/log/mongodb
command: mongod --config /etc/mongod.conf
RABBITMQ
第 1 步:宿主机建目录
- 创建数据存放目录
mkdir -p /opt/rabbitmq/data,/opt/rabbitmq/data可以替换成任意自定义目录 - 创建配置存放目录
mkdir -p /opt/rabbitmq/conf,/opt/rabbitmq/conf可以替换成任意自定义目录 - 创建日志存放目录
mkdir -p /opt/rabbitmq/logs,/opt/rabbitmq/logs可以替换成任意自定义目录
第 2 步: 启动一个临时 RabbitMQ 容器
我们将其命名为temp_rabbit,使用带 management 管理插件的镜像启动
docker run -d --name temp_rabbit rabbitmq:3-management
注意:如果本地没有对应的镜像,会先拉取镜像,然后再启动容器,因此耗时比较长。RabbitMQ 启动较慢,请等待约 15 秒再执行后续步骤。
第 4 步:把容器内的配置文件拷贝到宿主机
RabbitMQ 的主配置文件在/etc/rabbitmq/rabbitmq.conf,集群 cookie 文件在/var/lib/rabbitmq/.erlang.cookie,使用如下命令进行复制:
docker cp temp_rabbit:/etc/rabbitmq/rabbitmq.conf /opt/rabbitmq/conf/rabbitmq.conf
docker cp temp_rabbit:/var/lib/rabbitmq/.erlang.cookie /opt/rabbitmq/conf/.erlang.cookie
其中/opt/rabbitmq/conf应替换为前文中你自己创建的配置存放目录
第 5 步:停止并删除临时容器,释放资源
直接执行如下命令:
docker stop temp_rabbit
docker rm temp_rabbit
第 6 步:修改配置并挂载启动
修改配置文件
RabbitMQ 对 cookie 文件权限极其严格,必须收紧权限并设置目录属主(复制下面整段执行):
chmod 600 /opt/rabbitmq/conf/.erlang.cookie
chown -R 999:999 /opt/rabbitmq/data
chown -R 999:999 /opt/rabbitmq/logs
正式部署
可直接运行命令:
docker run -d \
--name rabbitmq \
--restart=always \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=AdminPass123 \
-v /opt/rabbitmq/data:/var/lib/rabbitmq \
-v /opt/rabbitmq/conf/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /opt/rabbitmq/conf/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-v /opt/rabbitmq/logs:/var/log/rabbitmq \
rabbitmq:3-management
注意:/opt/rabbitmq/conf、/opt/rabbitmq/data与/opt/rabbitmq/logs应替换成之前的自定义目录,AdminPass123应替换为你自己的连接密码。
需要DockerCompose的读者:
version: '3.8'
services:
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
restart: always
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: AdminPass123
ports:
- "5672:5672"
- "15672:15672"
volumes:
- /opt/rabbitmq/data:/var/lib/rabbitmq
- /opt/rabbitmq/conf/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
- /opt/rabbitmq/conf/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie
- /opt/rabbitmq/logs:/var/log/rabbitmq
NGINX
第 1 步:宿主机建目录
- 创建网页存放目录
mkdir -p /opt/nginx/html,/opt/nginx/html可以替换成任意自定义目录 - 创建配置存放目录
mkdir -p /opt/nginx/conf,/opt/nginx/conf可以替换成任意自定义目录 - 创建日志存放目录
mkdir -p /opt/nginx/logs,/opt/nginx/logs可以替换成任意自定义目录 - 生成一个测试页面
echo "<h1>Hello Docker</h1>" > /opt/nginx/html/index.html
第 2 步: 启动一个临时 Nginx 容器
我们将其命名为temp_nginx,直接让它启动
docker run -d --name temp_nginx nginx:latest
注意:如果本地没有对应的镜像,会先拉取镜像,然后再启动容器,因此耗时比较长。启动后请等待约 5 秒再执行后续步骤。
第 4 步:把容器内的配置文件拷贝到宿主机
Nginx 的主配置文件在/etc/nginx/nginx.conf,站点子配置目录在/etc/nginx/conf.d,使用如下命令进行复制:
docker cp temp_nginx:/etc/nginx/nginx.conf /opt/nginx/conf/nginx.conf
docker cp temp_nginx:/etc/nginx/conf.d /opt/nginx/conf/conf.d
其中/opt/nginx/conf应替换为前文中你自己创建的配置存放目录
第 5 步:停止并删除临时容器,释放资源
直接执行如下命令:
docker stop temp_nginx
docker rm temp_nginx
第 6 步:修改配置并挂载启动
修改配置文件
Nginx 通常不需要改默认配置,直接挂载即可,只需调整配置目录属主(Nginx 容器用户通常是 101):
chown -R 101:101 /opt/nginx/conf
正式部署
可直接运行命令:
docker run -d \
--name nginx-web \
--restart=always \
-p 80:80 \
-p 443:443 \
-v /opt/nginx/html:/usr/share/nginx/html \
-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/logs:/var/log/nginx \
nginx:latest
注意:/opt/nginx/conf、/opt/nginx/html与/opt/nginx/logs应替换成之前的自定义目录。
需要DockerCompose的读者:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx-web
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /opt/nginx/html:/usr/share/nginx/html
- /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /opt/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/nginx/logs:/var/log/nginx
REDIS
说明:Redis 官方镜像默认不带 redis.conf 配置文件,容器是直接运行 redis-server 命令不带配置文件启动的,因此无法像其他组件那样从临时容器拷贝配置。本组件改为从零创建一份标准配置。
第 1 步:宿主机建目录并创建配置
- 创建数据存放目录
mkdir -p /opt/redis/data,/opt/redis/data可以替换成任意自定义目录 - 创建配置存放目录
mkdir -p /opt/redis/conf,/opt/redis/conf可以替换成任意自定义目录 - 直接生成一个标准的 Redis 配置文件(复制下面所有内容执行):
cat > /opt/redis/conf/redis.conf << EOF
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
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 /data
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
requirepass YourRedisPassword123
EOF
注意:redis.conf 中的YourRedisPassword123应替换为你自己的连接密码。
第 6 步:修改配置并挂载启动
设置权限
Redis 容器内用户 ID 是 999,设置挂载目录属主(否则 redis 用户无法写入数据目录,持久化会失败):
chown -R 999:999 /opt/redis/data
chown -R 999:999 /opt/redis/conf
正式部署
可直接运行命令:
docker run -d \
--name redis7 \
--restart=always \
-p 6379:6379 \
-v /opt/redis/data:/data \
-v /opt/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
redis:7.0 redis-server /usr/local/etc/redis/redis.conf
注意:/opt/redis/conf与/opt/redis/data应替换成之前的自定义目录。
需要DockerCompose的读者:
version: '3.8'
services:
redis:
image: redis:7.0
container_name: redis7
restart: always
ports:
- "6379:6379"
volumes:
- /opt/redis/data:/data
- /opt/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
更多推荐

所有评论(0)