Docker回顾

Jan 于 2025-10-28 发布 浏览量

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网络 性能最优,无网络转发开销 端口冲突风险高,网络隔离性差 对网络性能要求高的服务(如高并发 API)
bridge网络 默认模式,配置简单,容器隔离性好 网络转发有轻微开销,跨主机需额外配置 单主机内多容器通信(如 Web 服务 + 数据库)
container网络 容器间网络共享紧密,低延迟 依赖目标容器,无独立网络身份 需共享网络栈的关联服务(如 Sidecar 容器)
Overlay网络 跨主机容器无缝通信,支持集群扩展 配置复杂,需集群管理(如 Swarm) 分布式集群(如跨主机微服务、容器化集群应用)
Macvlan网络 容器像物理设备,网络身份独立 需物理网卡支持,易占用网络资源 需独立 MAC/IP 的场景(如传统设备迁移、网络监控)