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
sudo systemctl enable docker
sudo systemctl start docker
sudo docker run hello-world
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp 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
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
project/
├── docker/
│ ├── dev/
│ │ └── Dockerfile
│ └── prod/
│ └── Dockerfile
├── docker-compose.yml
├── docker-compose.override.yml
└── src/
└── ...
# 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"]
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:
# 构建并启动容器
docker-compose up -d --build
# 查看日志
docker-compose logs -f app
# 进入容器
docker-compose exec app bash
# 停止容器
docker-compose down
# 清理无用资源
docker system prune -f
.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"
]
}
在VS Code的launch.json
中添加:
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}/src",
"remoteRoot": "/app/src"
}
]
}
示例生产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"]
权限问题:
sudo chown -R $USER:$USER /path/to/project
清理Docker资源:
docker system prune -a -f --volumes
查看容器日志:
docker logs -f container_name
检查容器网络:
docker inspect container_name | grep IPAddress
性能问题:
overlay2
存储驱动cached
或delegated
卷选项通过以上配置,您可以在Linux系统上建立一个高效、可复制的Docker容器化开发环境。