一、Docker 服务管理( systemctl 方式 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 启动 Docker 服务
systemctl start docker
# 停止 Docker 服务
systemctl stop docker
# 重启 Docker 服务
systemctl restart docker
# 查看 Docker 服务状态(最常用!)
systemctl status docker
# 设置开机自启动(强烈建议)
systemctl enable docker
# 查看 Docker 版本信息
docker --version
docker version
|
二、镜像(Image)常用操作
| 功能 |
命令 |
说明 |
| 查看本地所有镜像 |
docker images |
包含 TAG、IMAGE ID、大小等 |
| 只看镜像 ID |
docker images -q |
常用于批量删除 |
| 搜索官方/社区镜像 |
docker search nginx |
可加 --filter stars=100 筛选 |
| 下载镜像 |
docker pull nginx:1.25 |
默认 latest,也可指定版本 |
| 删除单个镜像 |
docker rmi nginx:1.25 |
或用 IMAGE ID |
| 删除所有无用镜像 |
docker rmi $(docker images -q) |
危险操作!先确认 |
| 删除 dangling 镜像 |
docker image prune |
最安全的方式清理无标签镜像 |
三、容器(Container)核心命令
3.1 查看容器
1
2
3
|
docker ps # 只看运行中的容器(最常用)
docker ps -a # 查看所有容器(包括已停止的)
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
|
3.2 创建并启动容器(docker run)
常用组合参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 交互式前台运行(开发/调试最常用)
docker run -it --name my-ubuntu ubuntu:22.04 bash
# 后台运行(生产环境常用)
docker run -d --name nginx-prod -p 80:80 nginx:1.25
# 带命名 + 端口映射 + 数据卷
docker run -d \
--name mysql8 \
-p 3307:3306 \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Abc12345 \
mysql:8.0
|
关键参数速查表
| 参数 |
含义 |
典型用法 |
-i |
交互模式(保持 STDIN 打开) |
通常与 -t 一起使用 |
-t |
分配伪终端 |
-it 最常见组合 |
-d |
后台运行 |
守护式容器 |
-p |
端口映射 宿主机:容器 |
-p 8080:80 |
--name |
指定容器名字 |
便于后续操作 |
-v |
挂载数据卷 |
详见下文数据卷章节 |
-e |
设置环境变量 |
MySQL、Redis 密码等 |
--rm |
容器停止后自动删除 |
临时测试用 |
3.3 进入/退出容器
1
2
3
4
5
6
|
# 推荐方式(容器保持运行)
docker exec -it mysql8 bash
docker exec -it mysql8 /bin/sh # alpine 镜像常用
# 旧方式(不推荐,会随退出而停止容器)
docker attach mysql8
|
3.4 启停删容器
1
2
3
4
5
6
7
8
9
10
|
docker start mysql8
docker stop mysql8 # 优雅停止(发送 SIGTERM)
docker restart mysql8
docker kill mysql8 # 强制杀死(SIGKILL)
docker rm mysql8 # 删除已停止容器
docker rm -f mysql8 # 强制删除运行中容器
# 批量清理停止的容器
docker container prune
|
四、数据卷(Volume)—— 容器数据持久化的核心
容器删除后,内部文件默认全部丢失。数据卷是解决这个问题的标准方案。
4.1 数据卷的几种实现方式对比
| 方式 |
命令示例 |
优点 |
缺点 / 注意事项 |
| 绑定挂载(Bind Mount) |
-v /host/data:/container/data |
直观、宿主机路径完全控制 |
路径必须存在,不够便携 |
| 命名卷(Named Volume) |
-v mysql-data:/var/lib/mysql |
Docker 自动管理,易备份迁移 |
宿主机路径隐藏(/var/lib/docker) |
| 数据卷容器(–volumes-from) |
--volumes-from mysql-data-holder |
早期方案,多个容器共享同一卷 |
已被命名卷基本取代,不推荐新项目 |
4.2 推荐写法(2025 年主流)
1
2
3
4
5
6
7
8
9
10
|
# 方式1:命名卷(最推荐)
docker run -d --name mysql-prod \
-v mysql-prod-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Abc12345 \
-p 3306:3306 mysql:8.4
# 方式2:绑定挂载(需要精细控制路径时)
docker run -d --name mysql-dev \
-v /data/mysql-dev:/var/lib/mysql \
-p 3307:3306 mysql:8.0
|
4.3 查看和管理卷
1
2
3
|
docker volume ls
docker volume inspect mysql-prod-data
docker volume prune # 清理无用卷(小心!)
|
五、MySQL 在 Docker 中的标准部署示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 1. 创建目录结构(推荐)
mkdir -p ~/docker/mysql/{data,conf,logs,backup}
# 2. 启动容器(2025 推荐写法)
docker run -d \
--name mysql8 \
--restart unless-stopped \
-p 3307:3306 \
-v ~/docker/mysql/data:/var/lib/mysql \
-v ~/docker/mysql/conf:/etc/mysql/conf.d \
-v ~/docker/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD=Abc12345 \
-e TZ=Asia/Shanghai \
mysql:8.4
# 3. 进入容器查看
docker exec -it mysql8 mysql -uroot -pAbc12345
# 4. 常用客户端连接方式
mysql -h 127.0.0.1 -P 3307 -uroot -pAbc12345
|
六、快速自查清单