从零开始:基于镜像仓库搭建Nginx并创建私有仓库全流程指南

从零开始:基于镜像仓库搭建Nginx并创建私有仓库全流程指南

一、镜像仓库基础与Docker环境准备

镜像仓库是容器化部署的核心基础设施,分为公有仓库(如Docker Hub)和私有仓库两类。公有仓库适合开源项目分发,而私有仓库则用于企业级应用隔离、安全管控及内部镜像管理。搭建私有镜像仓库前,需确保系统满足以下条件:

  • 操作系统:Linux(推荐CentOS 7/8或Ubuntu 20.04 LTS)
  • 依赖工具:Docker引擎(版本≥20.10)、curl、wget
  • 网络配置:开放5000端口(默认私有仓库端口)或自定义端口

1.1 Docker安装与验证

以CentOS为例,执行以下命令安装Docker:

  1. # 卸载旧版本(如有)
  2. sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  3. # 安装依赖
  4. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  5. # 添加Docker官方仓库
  6. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  7. # 安装Docker CE
  8. sudo yum install -y docker-ce docker-ce-cli containerd.io
  9. # 启动并验证
  10. sudo systemctl start docker
  11. sudo docker run hello-world

输出Hello from Docker!即表示安装成功。

二、通过镜像仓库命令部署Nginx容器

Nginx作为高性能Web服务器,可通过镜像仓库快速拉取并运行。以下步骤演示从Docker Hub拉取官方Nginx镜像并启动容器:

2.1 拉取Nginx镜像

  1. sudo docker pull nginx:latest

此命令从Docker Hub拉取最新版Nginx镜像。若需特定版本,可替换latest为版本号(如1.25.3)。

2.2 运行Nginx容器

  1. sudo docker run -d --name my-nginx -p 80:80 nginx
  • -d:后台运行
  • --name:指定容器名称
  • -p 80:80:将宿主机的80端口映射到容器的80端口

2.3 验证Nginx服务

访问http://<服务器IP>,若显示Nginx欢迎页则表示部署成功。

2.4 常用管理命令

命令 功能
sudo docker ps 查看运行中的容器
sudo docker logs my-nginx 查看容器日志
sudo docker stop my-nginx 停止容器
sudo docker rm my-nginx 删除容器

三、创建私有镜像仓库的完整流程

私有仓库可实现镜像集中管理、权限控制及网络隔离。以下以registry镜像为例部署私有仓库:

3.1 启动私有仓库容器

  1. sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2
  • --restart=always:容器退出时自动重启
  • registry:2:使用官方Registry 2.0镜像

3.2 配置镜像推送权限

默认情况下,Docker拒绝推送至HTTP仓库。需修改Docker守护进程配置:

  1. # 编辑/etc/docker/daemon.json(不存在则创建)
  2. sudo vi /etc/docker/daemon.json

添加以下内容:

  1. {
  2. "insecure-registries": ["<服务器IP>:5000"]
  3. }

重启Docker服务:

  1. sudo systemctl restart docker

3.3 推送镜像至私有仓库

  1. 标记镜像
    1. sudo docker tag nginx:latest <服务器IP>:5000/my-nginx:v1
  2. 推送镜像
    1. sudo docker push <服务器IP>:5000/my-nginx:v1
  3. 验证镜像
    1. curl http://<服务器IP>:5000/v2/_catalog

    输出应包含my-nginx

四、私有仓库的高级配置与安全优化

4.1 启用HTTPS认证

  1. 生成自签名证书
    1. mkdir -p /certs
    2. openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/domain.key -x509 -days 365 -out /certs/domain.crt
  2. 启动带HTTPS的Registry
    1. sudo docker run -d \
    2. -p 5000:5000 \
    3. --restart=always \
    4. --name registry \
    5. -v /certs:/certs \
    6. -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
    7. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    8. -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    9. registry:2
  3. 更新Docker配置
    insecure-registries替换为证书中的域名或IP。

4.2 镜像清理与存储管理

Registry默认将镜像存储在容器内,建议挂载宿主机目录:

  1. sudo docker run -d \
  2. -p 5000:5000 \
  3. --restart=always \
  4. --name registry \
  5. -v /data/registry:/var/lib/registry \
  6. registry:2

清理无用镜像可通过registry-cli工具或直接删除存储目录中的文件。

五、实验总结与最佳实践

  1. 版本控制:推送镜像时务必添加版本标签(如v1.0),避免覆盖生产环境镜像。
  2. 备份策略:定期备份/var/lib/registry目录,防止数据丢失。
  3. 性能优化:高并发场景下,可部署Registry集群并配置负载均衡。
  4. 监控告警:通过Prometheus+Grafana监控Registry的存储使用率及请求延迟。

通过本文的步骤,读者可快速掌握从Nginx容器部署到私有仓库创建的全流程,为后续的微服务架构及CI/CD流水线打下基础。实际生产环境中,建议结合Kubernetes的ImagePullSecrets及Helm Chart实现更高效的镜像管理。