用 Docker 标准化与加速 CentOS 开发
一 快速起步 安装与加速
- 卸载旧版本并安装依赖
- sudo yum remove -y docker* containerd.io
- sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加 Docker CE 仓库并安装
- sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- sudo yum install -y docker-ce docker-ce-cli containerd.io
- 启动并设置开机自启
- sudo systemctl start docker && sudo systemctl enable docker
- docker --version 或 docker run --rm hello-world
- 配置国内镜像加速(提升拉取速度)
- sudo mkdir -p /etc/docker
- sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [
“https://<你的加速器地址>.mirror.aliyuncs.com”,
“https://docker.m.daocloud.io”,
“https://hub-mirror.c.163.com”
]
}
EOF
- sudo systemctl daemon-reload && sudo systemctl restart docker
- 可选 导入 GPG 公钥(遇到签名校验失败时)
- sudo rpm --import https://download.docker.com/linux/centos/gpg
二 标准化开发环境 两种常用方式
- 方式 A 基于 CentOS 官方镜像
- 拉取并进入容器
- docker run -it --name centos-dev centos:7 bash
- 容器内初始化开发基元
- yum update -y && yum install -y gcc gcc-c++ make autoconf automake cmake git vim wget curl
- 退出后可用 docker start -ai centos-dev 再次进入
- 方式 B 使用 Dockerfile 固化环境
- 示例 Dockerfile(按需增减工具链)
- FROM centos:7
- RUN yum update -y && yum install -y -q
gcc gcc-c++ make autoconf automake cmake git vim wget curl
&& yum clean all
- WORKDIR /app
- CMD [“/bin/bash”]
- 构建与进入
- docker build -t centos-dev-env:1.0 .
- docker run -it --name dev01 centos-dev-env:1.0
- 说明
- 若你的应用是 Python/Node/Go 等,优先选择对应官方镜像(如 python:3.9-slim)以获得更小体积与更快构建;仅在需要 glibc、systemd、rpm/yum 等系统级能力时选用 centos:7/8 作为开发基镜像。
三 多服务一键编排与数据持久化
- 使用 Docker Compose 管理数据库 + 应用
- docker-compose.yml 示例
- version: “3.8”
- services:
- app:
- build: .
- volumes:
- .:/app
- node_modules:/app/node_modules
- ports:
- environment:
- db:
- image: postgres:13
- environment:
- POSTGRES_USER=dev
- POSTGRES_PASSWORD=devpass
- POSTGRES_DB=myapp
- volumes:
- pgdata:/var/lib/postgresql/data
- 常用命令
- docker-compose up -d --build
- docker-compose logs -f app
- docker-compose down -v
- 关键实践
- 持久化:数据库使用 named volume(如上 pgdata),避免容器重建后数据丢失
- 网络:Compose 默认创建专用网络,容器可用服务名互相访问(如 app 连 db:5432)
- 开发效率:代码目录挂载到容器内,实现热编辑与快速验证
四 提升效率的实用技巧
- 使用 .dockerignore 减少上下文体积与构建缓存失效
- 示例
- .git
- pycache
- node_modules
- *.log
- .idea
- .vscode
- 多阶段构建(减小镜像体积,适合 Go/C++ 等编译型语言)
- 示例
- FROM golang:1.22 AS builder
- WORKDIR /src
- COPY . .
- RUN go build -o app .
- FROM centos:7
- RUN yum install -y -q ca-certificates && yum clean all
- COPY --from=builder /src/app /usr/local/bin/app
- CMD [“app”]
- 复用与版本化
- 将镜像推送到私有仓库(如 Harbor/ACR),用标签管理版本,便于回滚与环境一致性
- 快速进入正在运行的容器
- docker exec -it <容器名或ID> bash
- 清理无用资源
- docker system prune -af --volumes
五 常见问题与排查
- 权限问题
- 将用户加入 docker 组(需重新登录):sudo usermod -aG docker $USER
- 构建缓慢或拉取超时
- 检查 /etc/docker/daemon.json 的 registry-mirrors 是否生效,必要时更换可用镜像源并重启 Docker
- SELinux 或防火墙干扰
- 开发环境可临时 setenforce 0 或放行端口;生产环境请按需配置策略而非直接关闭
- 容器网络与端口
- 宿主机端口冲突时更换宿主机端口映射(如 “8080:8000”)
- 数据未持久化
- 确认数据库等状态服务使用了 volume/bind mount,避免重建容器后数据丢失