Docker 基础概念
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。
国内环境配置
镜像加速
- 配置国内镜像源加速 Docker Hub 访问:
{ "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn" ] }
- 文件位置:
- Linux:
/etc/docker/daemon.json
- Windows:
%programdata%\docker\config\daemon.json
- Linux:
- 配置国内镜像源加速 Docker Hub 访问:
常用国内镜像仓库
- 阿里云容器镜像服务
- 腾讯云镜像仓库
- 华为云容器镜像服务
核心概念
镜像(Image)
- Docker 镜像是一个只读的模板
- 包含了运行应用程序所需的所有文件和配置
- 可以通过 Dockerfile 构建
容器(Container)
- 镜像的运行实例
- 可以被启动、停止、删除
- 每个容器都是相互隔离的
Dockerfile
- 用于构建镜像的脚本文件
- 包含了构建镜像所需的所有命令
- 示例:
FROM ubuntu:20.04 RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
常用命令
# 构建镜像
docker build -t myapp:1.0 .
# 运行容器
docker run -d -p 80:80 myapp:1.0
# 查看运行中的容器
docker ps
# 停止容器
docker stop <container_id>
Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml
文件,可以配置应用程序的服务、网络和卷。
docker-compose.yml 示例
version: '3'
services:
web:
build: .
ports:
- "8000:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
国内最佳实践
网络优化
- 使用
--network host
模式提升网络性能 - 在跨云服务商部署时注意网络延迟
- 配置合适的 DNS 服务器
- 使用
镜像管理
- 搭建私有镜像仓库,推荐使用 Harbor
- 使用国内云服务商提供的镜像仓库
- 定期清理未使用的镜像,避免占用存储空间
依赖管理
- 将常用的基础镜像推送到私有仓库
- 在 Dockerfile 中使用国内软件源:
# Ubuntu 示例 RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list # CentOS 示例 RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \ sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*
构建优化
- 使用多阶段构建减小镜像体积
- 合理使用缓存层,加快构建速度
- 使用 BuildKit 提升构建性能:
export DOCKER_BUILDKIT=1
监控和日志
- 推荐使用阿里云日志服务或腾讯云日志服务
- 配置容器日志轮转,避免日志占用过多空间:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } }
安全实践
- 使用国内漏洞扫描服务
- 定期更新基础镜像,修复安全漏洞
- 使用非 root 用户运行应用
- 合理配置容器资源限制
网络和代理配置
构建时的代理设置
在Windows环境下使用Docker时,如果需要在容器构建过程中使用代理,有以下几点需要注意:
构建阶段的代理配置
- 构建阶段(
docker build
)和运行阶段(docker run
)的网络配置是分开的 - 构建时无法直接使用host网络模式
- 构建阶段(
正确的代理配置方法
# 使用build-arg传递代理设置 docker compose build \ --build-arg HTTP_PROXY=http://host.docker.internal:7890 \ --build-arg HTTPS_PROXY=http://host.docker.internal:7890
基础镜像选择
使用Alpine Linux替代Debian基础镜像,可以大幅减少镜像大小和网络依赖:
# 使用Alpine替代Debian
FROM python:3.11-alpine
# 设置环境变量
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app
# 设置 pip 镜像源
ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ENV PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn
# 安装系统依赖
RUN apk add --no-cache gcc musl-dev python3-dev
网络模式配置
在docker-compose.yml中可以配置不同的网络模式:
# 构建时使用host网络
build:
context: .
dockerfile: Dockerfile.web
network: host
# 运行时使用host网络
network_mode: host
常见问题解决
代理连接问题
- 如果遇到
Could not connect to 127.0.0.1:7890
错误,通常是因为容器在尝试直接访问本地代理服务器 - 解决方案是使用
host.docker.internal
替代127.0.0.1
- 如果遇到
网络访问优化
- 使用
--network=host
参数可以让容器使用宿主机网络 - 如果使用代理,需要确保代理服务器允许Docker容器访问
- 可以使用
--add-host=host.docker.internal:host-gateway
参数使容器能够访问宿主机
- 使用
常见问题解决
拉取镜像慢
- 检查镜像加速器配置
- 考虑使用私有镜像仓库
- 在构建时使用
--pull=false
避免重复拉取
构建失败
- 检查网络连接
- 确认软件源可用性
- 使用
--network=host
提升网络性能
资源占用
- 定期清理未使用的容器和镜像
- 配置日志轮转
- 合理设置容器资源限制
总结
在中国大陆环境下使用 Docker,需要特别注意网络访问、镜像加速和依赖管理等问题。通过合理的配置和最佳实践,可以显著提升 Docker 的使用体验和效率。重点是要充分利用国内的基础设施和服务,如镜像加速器、私有仓库和云服务等。