Docker命令
常用命令
| 命令 |
作用 |
| docker run nginx |
运行一个容器 |
| docker stop nginx |
停止一个容器 |
| docker rm nginx |
删除一个容器 |
| docker images |
列出所有镜像 |
| docker rmi nginx |
删除一个镜像 |
| docker pull nginx |
拉取一个镜像 |
| docker ps -a |
列出所有容器 |
其他命令
| 命令 |
作用 |
| docker container prune |
清除空镜像 |
| docker system prune |
清除无用的镜像和容器 |
| docker rm -f $(docker ps -a -q) |
删除所有容器 |
| docker stats |
查看容器状态 |
| docker top [容器名] |
查看容器运行进程信息 |
Docker 服务端与客户端
docker采用C/S 模式
Docker 服务端是运行在主机上的一个程序,用于管理Docker容器。Docker服务端可以通过命令行或者图形界面进行管理。
Docker daemon 是一个后台进程,是Docker的服务端,负责管理Docker容器。
通常我们使用的 docker 命令都是通过 docker client 来调用的,docker client 通过 socket 连接到 docker daemon,然后执行命令。
数据卷与网络
docker 数据卷 是一种用于容器之间数据共享的方式,它可以在容器之间共享数据,也可以在容器之间共享配置文件。
docker 网络 是一种用于容器之间通信的方式,它可以实现容器之间的通信,也可以实现容器与宿主机之间的通信。
数据卷与网络都是 docker 的扩展功能,它们可以用来提高容器的运行效率和安全性。
数据卷
| 命令 |
作用 |
| docker volume create myvolume |
创建一个数据卷 |
| docker volume ls |
列出所有数据卷 |
| docker volume rm myvolume |
删除一个数据卷 |
| docker volume inspect myvolume |
查看一个数据卷的详细信息 |
数据卷挂载
[root@jjt ~]# mkdir /opt/nginx
[root@jjt ~]# docker volume create \
> --driver local \
> --opt type=none \
> --opt device=/opt/nginx \
> --opt o=bind \
> jjt_volume # 这是数据卷名称,必须放在最后
jjt_volume
[root@jjt ~]# docker volume inspect jjt_volume
[
{
"CreatedAt": "2025-10-27T16:19:21+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/jjt_volume/_data",
"Name": "jjt_volume",
"Options": {
"device": "/opt/nginx",
"o": "bind",
"type": "none"
},
"Scope": "local"
}
]
[root@jjt ~]# docker run -d --name jjt_nginx -v jjt_volume:/opt nginx
e576b8995d0598f56ba4c29a6f89fa5e94037d492c9436bb10fc7126f7d045b6
[root@jjt ~]# docker ps |grep jjt
e576b8995d05 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp jjt_nginx
b3570dd12a69 nginx "/docker-entrypoint.…" 5 days ago Up 20 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp jjt_port
[root@jjt ~]#
[root@jjt ~]# docker run -d --name jjt_nginx2 -v /opt/nginx:/opt nginx
60d15af6b0477503b8fb994944fd962108bb20183da10d4d0c4edd5e90501eef
[root@jjt ~]# docker volume ls
DRIVER VOLUME NAME
local jjt_volume ##数据卷没有增加
[root@jjt ~]# docker ps |grep jjt
60d15af6b047 nginx "/docker-entrypoint.…" 50 seconds ago Up 50 seconds 80/tcp jjt_nginx2
e576b8995d05 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp jjt_nginx
b3570dd12a69 nginx "/docker-entrypoint.…" 5 days ago Up 20 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp jjt_port
[root@jjt ~]#
| 对比维度 |
数据卷挂载(先创建数据卷再挂载) |
绑定挂载(直接关联宿主机目录) |
| 本质机制 |
基于 Docker 数据卷(如 jjt_volume) |
直接关联宿主机目录(如 /opt/nginx) |
| 是否生成数据卷 |
是(docker volume ls 可见) |
否(无新增数据卷) |
| 管理方式 |
通过 docker volume 命令统一管理 |
手动管理宿主机目录(权限、删除等) |
| 跨容器共享 |
支持,挂载同一数据卷即可 |
需重复指定宿主机路径,易出错 |
| 权限适配 |
Docker 自动处理,权限更稳定 |
需手动调整宿主机目录权限 |
| 适用场景 |
生产环境、持久化存储、多容器共享 |
开发调试、临时测试、实时同步 |
备份、恢复与迁移
# 1. 备份指定数据卷到本地/root/backup目录,生成backup.tar
docker run --rm --volumes-from [数据卷容器名] -v [本地备份目录]:/backup nginx tar cvf /backup/[备份文件名].tar [数据卷内路径1] [数据卷内路径2]
[root@jjt docker_demo]# docker run --rm --volumes-from data-volume -v /root/backup:/backup nginx tar cvf /backup/backup.tar /var/volume1 /var/volume2
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
/var/volume1/
/var/volume1/a.txt
/var/volume2/
/var/volume2/a.txt
[root@jjt docker_demo]# ls /root/backup/
backup.tar
[root@jjt docker_demo]#
# 2. 从本地备份包还原数据到目标数据卷
docker run --rm --volumes-from [数据卷容器名] -v [本地备份目录]:/backup nginx tar xvf /backup/[备份文件名].tar -C /
[root@jjt docker_demo]# docker ps |grep data
111f0598aeb4 nginx "/docker-entrypoint.…" 16 hours ago Up 16 hours 80/tcp data-volume
[root@jjt docker_demo]# docker exec -it data-volume bash
root@111f0598aeb4:/# ls /var/
backups/ cache/ lib/ local/ lock/ log/ mail/ opt/ run/ spool/ tmp/ volume1/ volume2/
root@111f0598aeb4:/# ls /var/volume1 /var/volume2
/var/volume1:
a.txt
/var/volume2:
a.txt
root@111f0598aeb4:/# rm -rf /var/volume1/a.txt /var/volume2/a.txt
root@111f0598aeb4:/# ls /var/volume1 /var/volume2
/var/volume1:
/var/volume2:
root@111f0598aeb4:/# exit
exit
[root@jjt docker_demo]# ls /root/backup
backup.tar #备份文件
# 还原数据到目标数据卷
[root@jjt docker_demo]# docker run --rm --volumes-from data-volume -v /root/backup:/backup nginx tar xvf /backup/backup.tar -C /
var/volume1/
var/volume1/a.txt
var/volume2/
var/volume2/a.txt
[root@jjt docker_demo]# docker exec -it data-volume bash
root@111f0598aeb4:/# ls /var/volume1 /var/volume2
/var/volume1:
a.txt
/var/volume2:
a.txt
root@111f0598aeb4:/#
# 3. 将本地备份包迁移到新容器的数据卷
docker run --rm --volumes-from [新容器名] -v [本地备份目录]:/backup nginx tar xvf /backup/[备份文件名].tar -C /
[root@jjt docker_demo]# docker run -it -v /var/volume1 -v /var/volume2 --name new-container nginx bash
root@88c98d17dce1:/# ls /var/volume1 /var/volume2
/var/volume1:
/var/volume2:
root@88c98d17dce1:/#
exit
[root@jjt docker_demo]# docker run -it --rm --volumes-from new-container -v /root/backup/:/backup nginx tar xvf /backup/backup.tar -C /
var/volume1/
var/volume1/a.txt
var/volume2/
var/volume2/a.txt
[root@jjt docker_demo]# docker exec -it new-container bash
Error response from daemon: container 88c98d17dce1d41c355a0ecd615b80e82835d57328f60cba616894c92493e938 is not running
[root@jjt docker_demo]# docker start new-container
new-container
[root@jjt docker_demo]# docker exec -it new-container bash
root@88c98d17dce1:/# ls /var/volume1 /var/volume2
/var/volume1:
a.txt
/var/volume2:
a.txt
root@88c98d17dce1:/#
网络
| 命令 |
作用 |
| docker network create |
创建一个网络 |
| docker network ls |
列出所有网络 |
| docker network rm |
删除一个网络 |
| docker network inspect |
查看一个网络的详细信息 |
| docker network connect/disconnect |
连接/断开容器网络 |
网络模式
- none 网络:禁用网络,容器无网络接口
- host 网络:共享宿主机网络栈,用宿主机 IP 和端口
- bridge 网络:默认模式,通过虚拟网桥隔离,容器有独立 IP
- container 网络:共享指定容器的网络栈,IP 相同
- Overlay 网络:跨主机通信,用于集群环境
- Macvlan 网络:分配独立 MAC,直接接入物理网络
| 网络模式 |
优点 |
缺点 |
适用场景 |
| none网络 |
极致安全,无网络攻击风险 |
无法与外部 / 宿主机通信 |
纯本地数据处理(如日志分析、文件转换) |
| host网络 |
性能最优,无网络转发开销 |
端口冲突风险高,网络隔离性差 |
对网络性能要求高的服务(如高并发 API) |
| bridge网络 |
默认模式,配置简单,容器隔离性好 |
网络转发有轻微开销,跨主机需额外配置 |
单主机内多容器通信(如 Web 服务 + 数据库) |
| container网络 |
容器间网络共享紧密,低延迟 |
依赖目标容器,无独立网络身份 |
需共享网络栈的关联服务(如 Sidecar 容器) |
| Overlay网络 |
跨主机容器无缝通信,支持集群扩展 |
配置复杂,需集群管理(如 Swarm) |
分布式集群(如跨主机微服务、容器化集群应用) |
| Macvlan网络 |
容器像物理设备,网络身份独立 |
需物理网卡支持,易占用网络资源 |
需独立 MAC/IP 的场景(如传统设备迁移、网络监控) |