Skip to main content

Docker实例手册

Docker 拉取并运行 MySQL8 完整命令​

1.拉取镜像​

#拉取mysql8最新版本
docker pull mysql:8

2.运行容器(生产常用参数版本)​

docker run -d \
--name mysql8 \
--restart always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD="chains6344" \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=chains \
-e MYSQL_PASSWORD="chains6344" \
-v /data/mysql8/data:/var/lib/mysql \
-v /data/mysql8/conf:/etc/mysql/conf.d \
-v /data/mysql8/log:/var/log/mysql \
mysql:8 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

参数解释​

参数说明
-d后台守护模式运行容器
--name mysql8容器名称为mysql8
--restart always开机/ Docker重启自动启动容器
-p 3306:3306端口映射,宿主机3306映射容器3306
MYSQL_ROOT_PASSWORDroot账号密码,必须设置
MYSQL_DATABASE=mydb容器启动自动创建mydb数据库
MYSQL_USER/MYSQL_PASSWORD新建普通用户和密码,自动授权上面的库
-v /data/mysql8/data:/var/lib/mysql数据持久化,数据库文件挂载宿主机,容器删除数据不丢失
-v /data/mysql8/conf:/etc/mysql/conf.d自定义配置文件挂载,放my.cnf
-v /data/mysql8/log:/var/log/mysql日志挂载
mysql:8镜像名称标签
--character-set-server=utf8mb4数据库默认字符集,支持emoji表情
--collation-server=utf8mb4_unicode_ci排序规则

⚠️注意:宿主机目录/data/mysql8/*如不存在,docker会自动创建; 密码复杂度按自己业务修改,不要直接用示例密码上线。

3.查看容器状态​

docker ps

4.进入容器mysql客户端连接​

docker exec -it mysql8 mysql -uroot -p
#输入设置的root密码 Root@123456

5.外部客户端连接信息​

  • host:宿主机IP
  • port:3306
  • user:root / myuser
  • password:对应设置密码

6.简单排错​

  1. 挂载目录权限异常,mysql启动失败:
chmod -R 777 /data/mysql8

2.查看日志:

docker logs mysql8

极简测试版本(不持久化,仅本地测试用)​

docker run -d --name mysql8-test -p3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8

该版本没有挂载卷,容器删除数据全部丢失,只适合开发测试。

补充:自定义my.cnf示例(放到/data/mysql8/conf/my.cnf)​

[mysqld]
max_connections=2000
default-time_zone = '+8:00'

修改配置后重启容器生效:docker restart mysql8

PostgreSQL Docker 启动命令(生产常用,持久化数据、外挂配置、ulimit调优)

使用官方 postgres:16 镜像,也可替换为 15/14

1.拉取镜像​

docker pull postgres:16

2.完整运行命令(生产版)​

docker run -d \
--name postgres \
--restart always \
-p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD="post6344" \
-e POSTGRES_DB=fastapi_admin \
-e TZ=Asia/Shanghai \
-v /data/postgres:/var/lib/postgresql \
postgres:latest

参数说明​

参数说明
--ulimit nofile=65535:65535调高文件句柄,防止高并发报错,和你Java容器配套
POSTGRES_USER超级用户名,不要用postgres也可以自定义
POSTGRES_PASSWORD密码,必须设置
POSTGRES_DB启动自动创建数据库
TZ=Asia/Shanghai时区东八区
-v /data/postgres16/data:/var/lib/postgresql/data数据持久化目录,容器删除数据不丢失
-v /data/postgres16/conf:/etc/postgresql/conf.d外挂自定义配置目录
-c config_file=指定加载外部postgresql.conf配置文件

⚠️注意:宿主机/data/postgres16/data目录权限问题:postgres容器内部uid=999,宿主机目录权限不对会启动失败。

chown -R 999:999 /data/postgres16

3.自定义配置示例 /data/postgres/conf/postgresql.conf​

max_connections=500
shared_buffers=1GB
work_mem=64MB
timezone='Asia/Shanghai'

修改配置后重启容器生效:docker restart postgres16

4.进入容器psql客户端​

docker exec -it postgres16 psql -U admin -d default_db

5.外部连接信息​

  • host:宿主机IP
  • port:5432
  • user:admin
  • password:Pg@123456
  • database:default_db

6.极简测试版本(无持久化,仅测试)​

docker run -d --name pg-test -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres:16

常见排错​

  1. 容器启动失败,日志报权限:chown -R 999:999 /data/postgres16
docker logs postgres16
  1. 挂载自定义配置不生效:确认启动命令末尾 -c config_file=/etc/postgresql/conf.d/postgresql.conf 参数存在。
  2. 连接数不够:修改postgresql.conf max_connections。

docker‑compose 版本​

version: '3'
services:
postgres16:
image: postgres:16
container_name: postgres16
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: "Pg@123456"
POSTGRES_DB: default_db
TZ: Asia/Shanghai
ulimits:
nofile:
soft: 65535
hard: 65535
volumes:
- /data/postgres16/data:/var/lib/postgresql/data
- /data/postgres16/conf:/etc/postgresql/conf.d
command:
- "-c"
- "config_file=/etc/postgresql/conf.d/postgresql.conf"

如果你需要,我可以顺带写一份pg_dump备份、恢复的docker执行命令。