插件窝 干货文章 通过Docker在Linux系统上进行容器化开发的配置方法

通过Docker在Linux系统上进行容器化开发的配置方法

Docker sudo Compose python 284    来源:    2025-04-16

Docker在Linux上的容器化开发配置指南

1. 系统准备与Docker安装

1.1 系统要求

  • 64位Linux系统(Ubuntu/Debian/CentOS/RHEL等)
  • 内核版本3.10或更高
  • 建议4GB以上内存

1.2 安装Docker

Ubuntu/Debian系统:

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

CentOS/RHEL系统:

# 卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 安装依赖
sudo yum install -y yum-utils

# 添加Docker仓库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

1.3 启动Docker服务

sudo systemctl enable docker
sudo systemctl start docker

1.4 验证安装

sudo docker run hello-world

2. 开发环境配置

2.1 免sudo使用Docker

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker  # 或者注销重新登录

2.2 配置Docker镜像加速

编辑或创建/etc/docker/daemon.json:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

重启Docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

2.3 安装Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3. 开发工作流配置

3.1 项目目录结构

project/
├── docker/
│   ├── dev/
│   │   └── Dockerfile
│   └── prod/
│       └── Dockerfile
├── docker-compose.yml
├── docker-compose.override.yml
└── src/
    └── ...

3.2 开发用Dockerfile示例

# docker/dev/Dockerfile
FROM python:3.9-slim

WORKDIR /app

# 安装开发依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    git \
    && rm -rf /var/lib/apt/lists/*

# 复制requirements文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt && \
    pip install debugpy

# 复制源代码(开发时通过volume挂载,此处仅为生产准备)
COPY . .

# 开发模式入口点
CMD ["python", "-m", "debugpy", "--listen", "0.0.0.0:5678", "--wait-for-client", "-m", "your_app"]

3.3 docker-compose.yml示例

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: docker/dev/Dockerfile
    ports:
      - "8000:8000"
      - "5678:5678"  # 调试端口
    volumes:
      - ./src:/app/src
      - ./data:/app/data
    environment:
      - FLASK_ENV=development
      - DEBUG=1
    depends_on:
      - db
      - redis

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:6

volumes:
  postgres_data:

3.4 开发工作流命令

# 构建并启动容器
docker-compose up -d --build

# 查看日志
docker-compose logs -f app

# 进入容器
docker-compose exec app bash

# 停止容器
docker-compose down

# 清理无用资源
docker system prune -f

4. 开发工具集成

4.1 VS Code配置

  1. 安装"Docker"和"Remote - Containers"扩展
  2. 创建.devcontainer/devcontainer.json:
{
  "name": "Python Development",
  "dockerComposeFile": "../docker-compose.yml",
  "service": "app",
  "workspaceFolder": "/app",
  "settings": {
    "python.pythonPath": "/usr/local/bin/python",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true
  },
  "extensions": [
    "ms-python.python"
  ]
}

4.2 远程调试配置

在VS Code的launch.json中添加:

{
  "name": "Python: Remote Attach",
  "type": "python",
  "request": "attach",
  "connect": {
    "host": "localhost",
    "port": 5678
  },
  "pathMappings": [
    {
      "localRoot": "${workspaceFolder}/src",
      "remoteRoot": "/app/src"
    }
  ]
}

5. 生产环境注意事项

  1. 使用多阶段构建减少镜像大小
  2. 不要使用root用户运行容器进程
  3. 设置资源限制(CPU/内存)
  4. 使用健康检查
  5. 配置日志轮转

示例生产Dockerfile:

# docker/prod/Dockerfile
# 构建阶段
FROM python:3.9-slim as builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# 运行阶段
FROM python:3.9-slim

WORKDIR /app
# 从构建阶段复制已安装的Python包
COPY --from=builder /root/.local /root/.local
COPY . .

# 确保脚本可执行
RUN chmod +x entrypoint.sh

# 使用非root用户
RUN useradd -m myuser && chown -R myuser /app
USER myuser

# 确保PATH包含用户本地bin目录
ENV PATH=/root/.local/bin:$PATH

# 生产环境入口点
CMD ["./entrypoint.sh"]

6. 常用问题排查

  1. 权限问题:

    sudo chown -R $USER:$USER /path/to/project
    
  2. 清理Docker资源:

    docker system prune -a -f --volumes
    
  3. 查看容器日志:

    docker logs -f container_name
    
  4. 检查容器网络:

    docker inspect container_name | grep IPAddress
    
  5. 性能问题:

    • Linux上使用overlay2存储驱动
    • 对于大量小文件操作,考虑使用cacheddelegated卷选项

通过以上配置,您可以在Linux系统上建立一个高效、可复制的Docker容器化开发环境。