Docker 使用总结及完整示例介绍

发布于:2025-05-12 ⋅ 阅读:(12) ⋅ 点赞:(0)

以下是一份详细的 Docker 使用总结及完整示例介绍,涵盖基础概念、常用命令和实际应用场景:


一、Docker 核心概念

  1. 镜像 (Image)

    • 只读模板,用于创建容器。
    • 例如:ubuntu:22.04, nginx:alpine
  2. 容器 (Container)

    • 镜像的运行实例,拥有独立的环境和文件系统。
  3. 仓库 (Registry)

    • 存储镜像的平台,如 Docker Hub (docker.io)。
  4. 数据卷 (Volume)

    • 持久化容器数据的机制。
  5. 网络 (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:
      - .:/app
    depends_on:
      - redis

  redis:
    image: "redis:alpine"
2. 启动服务
docker-compose up -d
3. 停止服务
docker-compose down

五、最佳实践

  1. 精简镜像

    • 使用 alpineslim 版本的基础镜像。
    • 通过多阶段构建减少镜像大小。
  2. 避免以 root 运行

    • 在 Dockerfile 中添加非特权用户:
      RUN useradd -m appuser && chown -R appuser /app
      USER appuser
      
  3. 定期清理

    docker system prune -a  # 删除无用镜像、容器和缓存
    
  4. 使用 .dockerignore
    避免将无关文件(如 node_modules)复制到镜像。


六、常见问题

  1. 容器无法启动

    • 检查日志:docker logs <container_name>
    • 调试启动命令:docker run -it --entrypoint /bin/sh my-image
  2. 端口冲突

    • 修改主机端口映射:-p 8080:80-p 8081:80
  3. 数据持久化失败

    • 确认数据卷正确挂载:docker inspect <container_name>

通过以上内容,您可以快速掌握 Docker 的核心操作并应用于实际开发场景。


网站公告

今日签到

点亮在社区的每一天
去签到