从Docker Compose到私有仓库:在CentOS 7上搭建你的第一个容器化微服务‘试验田’

当开发者第一次接触容器化技术时,往往会被各种概念和工具淹没——Docker镜像、容器编排、私有仓库……这些看似独立的组件,实际上构成了现代微服务开发的基石。本文将带你从零开始,在CentOS 7系统上搭建一个完整的容器化开发环境,不仅包括基础的Docker和Compose工具,还会建立一个带图形界面的私有镜像仓库,最终通过一个实际的Nginx+Redis示例项目验证整个工作流。

1. 环境准备与Docker安装

在开始之前,确保你有一台运行CentOS 7的机器(物理机或虚拟机均可),并具备sudo权限。虽然云服务器是最佳选择,但本地虚拟机同样适用。

1.1 系统基础配置

首先进行系统更新和基础工具安装:

sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

对于国内用户,建议替换默认yum源为阿里云镜像以加速下载:

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum makecache

1.2 Docker CE安装

Docker社区版(CE)是我们的首选。添加Docker官方仓库:

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker引擎:

sudo yum install -y docker-ce docker-ce-cli containerd.io

启动Docker服务并设置开机自启:

sudo systemctl start docker
sudo systemctl enable docker

验证安装是否成功:

docker --version
# 预期输出类似:Docker version 20.10.12, build e91ed57

1.3 防火墙与SELinux配置

容器网络需要特殊处理,建议临时关闭防火墙:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

对于SELinux,可以选择禁用或设置为宽容模式:

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

2. Docker Compose部署与管理

Docker Compose是定义和运行多容器应用的工具,通过YAML文件配置服务关系。

2.1 安装Docker Compose

下载最新稳定版的Docker Compose:

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

设置可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

验证安装:

docker-compose --version
# 预期输出:Docker Compose version v2.5.0

2.2 配置命令补全(可选)

为bash添加自动补全功能:

sudo curl -L https://raw.githubusercontent.com/docker/compose/v2.5.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
source ~/.bashrc

3. 搭建私有Docker仓库

私有仓库是企业级容器化部署的核心组件,用于存储和管理内部镜像。

3.1 基础Registry服务

启动一个基础的Registry容器:

docker run -d \
  -p 5000:5000 \
  --name registry \
  --restart=always \
  -v /opt/registry:/var/lib/registry \
  registry:2

验证服务是否正常运行:

curl http://localhost:5000/v2/_catalog
# 预期输出:{"repositories":[]}

3.2 带UI的Registry部署

使用Docker Compose部署功能更完整的仓库方案:

创建docker-compose.yml文件:

version: '3'

services:
  registry:
    image: registry:2
    volumes:
      - ./registry-data:/var/lib/registry
    networks:
      - registry-net

  ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=My Private Registry
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry
    networks:
      - registry-net

networks:
  registry-net:

启动服务:

docker-compose up -d

访问http://<your-server-ip>:8080即可看到仓库UI界面。

3.3 配置Docker客户端

让Docker信任私有仓库(替换为你服务器的实际IP):

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "insecure-registries": ["your-server-ip:5000"]
}
EOF

重启Docker使配置生效:

sudo systemctl restart docker

4. 实战:部署Nginx+Redis微服务示例

现在我们来验证整个环境,部署一个简单的Web应用组合。

4.1 创建项目结构

建立项目目录:

mkdir nginx-redis-demo && cd nginx-redis-demo

创建docker-compose.yml

version: '3'

services:
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - redis

volumes:
  redis_data:

创建Nginx配置文件nginx.conf

worker_processes 1;

events { worker_connections 1024; }

http {
    upstream redis-backend {
        server redis:6379;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://redis-backend;
        }
    }
}

4.2 构建并推送镜像

构建自定义Nginx镜像:

docker build -t your-server-ip:5000/nginx-redis .

推送镜像到私有仓库:

docker push your-server-ip:5000/nginx-redis

4.3 部署与验证

启动服务:

docker-compose up -d

验证服务:

curl http://localhost
# 应该能看到Redis的响应

在私有仓库UI中,现在应该能看到我们推送的nginx-redis镜像。

5. 日常维护与进阶技巧

5.1 仓库数据备份

定期备份仓库数据:

tar czvf registry-backup-$(date +%Y%m%d).tar.gz /opt/registry

5.2 使用Tag管理镜像版本

为镜像打标签:

docker tag nginx:alpine your-server-ip:5000/nginx:1.0
docker push your-server-ip:5000/nginx:1.0

5.3 查看仓库存储用量

检查仓库存储情况:

du -sh /opt/registry

5.4 安全加固建议

  • 为仓库启用HTTPS
  • 配置基本身份验证
  • 定期清理未使用的镜像

这套环境不仅适用于学习,也可以作为小型团队的开发测试平台。在实际使用中,你可能还需要考虑加入监控、日志收集等组件,但这已经为你构建了一个坚实的起点。

更多推荐