Docker 使用总结及完整示例介绍
以下是一份详细的 Docker 使用总结及完整示例介绍,涵盖基础概念、常用命令和实际应用场景:
一、Docker 核心概念
-
镜像 (Image)
- 只读模板,用于创建容器。
- 例如:
ubuntu:22.04
,nginx:alpine
-
容器 (Container)
- 镜像的运行实例,拥有独立的环境和文件系统。
-
仓库 (Registry)
- 存储镜像的平台,如 Docker Hub (
docker.io
)。
- 存储镜像的平台,如 Docker Hub (
-
数据卷 (Volume)
- 持久化容器数据的机制。
-
网络 (Network)
- 容器间通信的桥梁,支持多种驱动(如
bridge
,host
)。
- 容器间通信的桥梁,支持多种驱动(如
二、Docker 常用命令
1. 镜像管理
# 拉取镜像
docker pull ubuntu:22.04# 查看本地镜像
docker images# 删除镜像
docker rmi ubuntu:22.04# 构建镜像(需 Dockerfile)
docker build -t myapp:1.0 .
2. 容器操作
# 运行容器(前台模式)
docker run -it --name my_container ubuntu:22.04 /bin/bash# 运行容器(后台模式)
docker run -d -p 8080:80 --name nginx_container nginx:alpine# 查看运行中的容器
docker ps# 查看所有容器(包括已停止的)
docker ps -a# 停止/启动容器
docker stop nginx_container
docker start nginx_container# 进入运行中的容器
docker exec -it nginx_container /bin/sh# 删除容器
docker rm nginx_container# 查看容器日志
docker logs nginx_container
3. 数据卷管理
# 创建数据卷
docker volume create my_volume# 挂载数据卷到容器
docker run -d -v my_volume:/data --name vol_container ubuntu# 查看数据卷信息
docker volume inspect my_volume
4. 网络管理
# 创建自定义网络
docker network create my_network# 将容器连接到网络
docker run -d --network my_network --name app1 myapp:1.0
三、完整示例:构建并运行一个 Python Web 应用
1. 项目结构
myapp/
├── app.py
├── requirements.txt
└── Dockerfile
2. 编写代码
app.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello from Docker!"if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
requirements.txt
flask==3.0.0
3. 编写 Dockerfile
# 使用官方 Python 基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt# 复制应用代码
COPY . .# 暴露端口
EXPOSE 5000# 启动命令
CMD ["python", "app.py"]
4. 构建镜像
docker build -t my-flask-app:1.0 .
5. 运行容器
docker run -d -p 5000:5000 --name flask-container my-flask-app:1.0
6. 验证
访问 http://localhost:5000
,显示 “Hello from Docker!”。
四、Docker Compose 多容器编排
1. 编写 docker-compose.yml
version: '3.8'services:web:build: .ports:- "5000:5000"volumes:- .:/appdepends_on:- redisredis:image: "redis:alpine"
2. 启动服务
docker-compose up -d
3. 停止服务
docker-compose down
五、最佳实践
-
精简镜像
- 使用
alpine
或slim
版本的基础镜像。 - 通过多阶段构建减少镜像大小。
- 使用
-
避免以 root 运行
- 在 Dockerfile 中添加非特权用户:
RUN useradd -m appuser && chown -R appuser /app USER appuser
- 在 Dockerfile 中添加非特权用户:
-
定期清理
docker system prune -a # 删除无用镜像、容器和缓存
-
使用
.dockerignore
避免将无关文件(如node_modules
)复制到镜像。
六、常见问题
-
容器无法启动
- 检查日志:
docker logs <container_name>
- 调试启动命令:
docker run -it --entrypoint /bin/sh my-image
- 检查日志:
-
端口冲突
- 修改主机端口映射:
-p 8080:80
→-p 8081:80
- 修改主机端口映射:
-
数据持久化失败
- 确认数据卷正确挂载:
docker inspect <container_name>
- 确认数据卷正确挂载:
通过以上内容,您可以快速掌握 Docker 的核心操作并应用于实际开发场景。