1000 字
5 分钟
Docker 快速上手:镜像、容器、数据卷与网络

Docker 的文档铺天盖地,但初学者真正需要建立的只是一张对象关系图:镜像(Image)是模板,容器(Container)是模板的运行实例,数据卷(Volume)让数据活下来,网络(Network)让容器互相找到对方。 本文围绕这四个对象展开。

镜像与容器:类与实例的关系#

镜像是一个只读的、分层的文件系统快照,里面打包了应用及其全部依赖。容器是从镜像启动的进程,拥有自己的文件系统视图(在镜像之上加一层可写层)、进程空间、网络空间。

一个镜像可以启动多个互不干扰的容器,就像一个类可以 new 出多个实例:

Terminal window
docker run -d --name web1 -p 8081:80 nginx
docker run -d --name web2 -p 8082:80 nginx

两条命令用同一个 nginx 镜像起了两个独立容器,分别映射到宿主机 8081、8082。

docker run 的关键参数:

参数作用
-d后台运行(detached)
--name给容器命名,否则随机生成
-p 宿主端口:容器端口端口映射
-e KEY=VALUE注入环境变量
-v 卷名或路径:容器内路径挂载数据
--restart unless-stopped崩溃或重启后自动拉起

容器生命周期操作#

Terminal window
docker ps # 运行中的容器
docker ps -a # 包括已停止的
docker stop web1 # 优雅停止(先发 SIGTERM)
docker start web1 # 重新启动
docker restart web1 # 重启
docker rm web1 # 删除已停止的容器
docker rm -f web1 # 强制删除运行中的(慎用)

排错三件套,记牢:

Terminal window
docker logs -f web1 # 看容器标准输出(应用日志都该打到这里)
docker exec -it web1 sh # 进容器里看看
docker inspect web1 # 查看容器全部配置(IP、挂载、环境变量)

数据持久化:三种挂载#

容器删了,可写层里的数据就没了。需要持久化的数据必须挂载出来:

1. 命名卷(Volume,推荐)——由 Docker 管理存储位置:

Terminal window
docker volume create pgdata
docker run -d --name db -v pgdata:/var/lib/postgresql/data postgres:16

2. 绑定挂载(Bind Mount)——直接映射宿主机路径,开发时常用:

Terminal window
docker run -d --name app -v /opt/myapp/config:/app/config myapp

3. tmpfs——只存在于内存,容器停即消失,适合敏感临时数据。

选择原则:生产数据用命名卷(可备份、可迁移);需要宿主机直接读写的配置用绑定挂载。

容器网络:三种常用模式#

bridge(默认):Docker 建一个虚拟网桥 docker0,每个容器分配独立 IP。同网桥上的容器可以互相通信,配合 --link 已废弃的旧做法不同,现在用自定义网络实现服务发现:

Terminal window
docker network create appnet
docker run -d --name db --network appnet postgres:16
docker run -d --name app --network appnet myapp
# app 容器里可以直接用主机名 "db" 访问数据库

自定义网络内置 DNS,容器名即主机名——这是多容器应用的标准做法。

host:容器直接用宿主机网络栈,没有隔离也没有端口映射,性能最好。适合对网络性能敏感的组件,但端口冲突要自己管。

none:完全断网,只留回环口,用于批量计算任务。

镜像管理的日常#

Terminal window
docker images # 本地镜像列表
docker pull redis:7 # 拉取指定 tag
docker build -t myapp:1.0 . # 用当前目录 Dockerfile 构建
docker tag myapp:1.0 reg.example.com/myapp:1.0 # 打私仓标签
docker push reg.example.com/myapp:1.0
docker system prune # 清理停止的容器、悬空镜像、未用网络

磁盘空间告警时,docker system df 先看占用分布,再决定 prune 范围(加 -a 连未使用的镜像一起删,下手前确认)。

延伸阅读#

Docker 快速上手:镜像、容器、数据卷与网络
https://meow.us.kg/posts/docker-images-containers-volumes/
作者
もゆちゃん
发布于
2026-10-14
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取