docker笔记

记录了一些docker常用命令

一、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

六、快速自查清单

  • Docker 服务是否运行? → systemctl status docker
  • 镜像是否存在? → docker images | grep mysql
  • 容器是否在运行? → docker ps
  • 数据是否做了持久化? → 检查有没有 -v 参数
  • 端口是否正确映射? → docker port mysql8
Licensed under CC BY-NC-SA 4.0
最后更新于 2026年2月14日星期六
使用 Hugo 构建
主题 StackJimmy 设计