Docker 常用操作指南:镜像管理与容器生命周期
引言
Docker 作为现代容器化技术的代表,通过镜像(Image)和容器(Container)实现了应用的标准化部署。本文将详细梳理 Docker 镜像与容器的核心操作,涵盖从镜像拉取、容器创建到镜像打包、清理的全流程,助你快速掌握 Docker 日常运维技巧。
一、镜像操作:从拉取到离线加载
1. 拉取镜像(Pull Image)
# 拉取官方最新镜像(默认latest标签)
docker pull ubuntu
# 拉取指定版本镜像
docker pull nginx:1.23.3
# 拉取私有仓库镜像(需登录)
docker login registry.example.com
docker pull registry.example.com/myapp:v1.0
📌 注意:若镜像不存在,Docker 会自动从 Docker Hub 查找(可通过 --registry-mirror
配置国内加速)。
2. 打包镜像(Build Image)
通过 Dockerfile
定义镜像构建规则:
# Dockerfile 示例
FROM ubuntu:22.04
WORKDIR /app
COPY . .
RUN apt-get update && apt-get install -y python3
CMD ["python3", "app.py"]
构建命令:
# -t 标记镜像名:标签,. 表示上下文路径
docker build -t my-python-app:v1.0 .
3. 导出与加载离线镜像
# 导出镜像(保存为tar文件)
docker save -o myapp.tar my-python-app:v1.0
# 加载离线镜像(无网络环境)
docker load -i myapp.tar
二、容器操作:创建、映射与销毁
1. 创建并运行容器(Run Container)
# 基础命令:镜像名 + 执行命令
docker run -d --name my-nginx nginx:latest
# 端口映射(-p 宿主机端口:容器端口)
docker run -d -p 8080:80 --name my-nginx nginx
# 目录映射(-v 宿主机路径:容器路径[:权限])
docker run -d \
-p 8080:80 \
-v /data/nginx/html:/usr/share/nginx/html \
--name my-nginx \
nginx
💡 最佳实践:使用 -v
映射配置文件或数据目录,实现容器数据持久化。
2. 容器生命周期管理
# 查看所有容器(-a 显示停止的容器)
docker ps -a
# 启动/停止/重启容器
docker start my-nginx
docker stop my-nginx
docker restart my-nginx
# 删除容器(需先停止,-f 强制删除)
docker rm my-nginx
docker rm -f $(docker ps -aq) # 删除所有容器
三、镜像与容器清理:释放资源
1. 删除镜像
# 删除本地镜像(-f 强制删除)
docker rmi my-python-app:v1.0
# 删除所有未使用的镜像( dangling 镜像)
docker image prune -a
2. 空间管理
# 查看 Docker 磁盘使用情况
docker system df
# 清理所有停止的容器、未使用的镜像、缓存等
docker system prune -a --volumes
四、高级技巧与注意事项
1. 端口映射常见问题
- 端口冲突:使用
docker ps
检查已占用端口,或指定其他端口(如-p 8081:80
)。 - 多端口映射:
-p 8080:80 -p 3306:3306
(支持 TCP/UDP 协议)。
2. 目录映射权限问题
- 宿主机目录需存在,建议使用绝对路径。
- 添加
:ro
实现只读映射:-v /config:/app/config:ro
。
3. 镜像命名规范
遵循 [仓库名]/[项目名]:[标签]
(如 registry.example.com/webapp:v2.0
),标签建议使用语义化版本(SemVer)。
五、完整操作示例
场景:部署 Python Web 应用
- 编写
Dockerfile
:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
- 构建镜像:
docker build -t my-webapp:v1.0 .
- 运行容器(映射端口 + 目录):
docker run -d \
-p 5000:5000 \
-v /data/webapp:/app/data \
--name my-webapp \
my-webapp:v1.0
- 导出镜像(离线部署):
docker save -o my-webapp.tar my-webapp:v1.0
- 清理资源:
docker stop my-webapp && docker rm my-webapp
docker rmi my-webapp:v1.0
总结
本文覆盖了 Docker 镜像与容器的核心操作:
- 镜像:拉取(
pull
)、构建(build
)、导出/导入(save/load
)、删除(rmi
)。 - 容器:创建(
run
)、启停(start/stop
)、映射(-p/-v
)、删除(rm
)。 - 高级:离线部署、空间清理、最佳实践。
通过熟练掌握这些命令,你可以高效管理容器化应用的全生命周期。建议结合 docker-compose
实现多容器编排,进一步提升部署效率。
实践建议:在测试环境中反复练习,观察容器日志(docker logs
)和状态(docker inspect
),深入理解每个参数的作用。Docker 的核心哲学是「一次构建,到处运行」,掌握基础操作后,即可探索 Swarm、Kubernetes 等容器编排技术。
🔗 延伸阅读:
- Docker 官方文档
- 《Docker 从入门到实践》(开源书籍)
📢 下期预告:Docker Compose 实战——定义多容器应用的优雅方式。
附录:常用命令速查表
操作类型 | 命令示例 | 说明 |
---|---|---|
拉取镜像 | docker pull ubuntu:latest |
拉取最新版 Ubuntu 镜像 |
运行容器 | docker run -d -p 80:80 --name nginx nginx |
后台运行 Nginx 并映射端口 |
目录映射 | docker run -v /host/data:/container/data app |
挂载数据卷 |
构建镜像 | docker build -t myapp:v1 . |
基于当前目录的 Dockerfile 构建 |
导出镜像 | docker save -o image.tar myapp:v1 |
保存镜像为 tar 文件 |
删除容器 | docker rm -f container_id |
强制删除容器 |
删除镜像 | docker rmi -f image_id |
强制删除镜像 |
通过本文的指南,你已具备 Docker 日常操作的核心能力。现在,尝试将你的应用容器化吧! 🚀