Linux云服务器镜像仓库配置全指南
在现代云计算环境中,Docker镜像仓库的配置是每个DevOps工程师必备的技能。本文将详细介绍如何在Linux云服务器上搭建私有镜像仓库,包含从环境准备到安全配置的完整流程。
一、环境准备
1.1 服务器要求
- 操作系统:Ubuntu 20.04 LTS或CentOS 8
- 内存:至少2GB
- 磁盘空间:建议50GB以上
- Docker版本:19.03+
1.2 基础软件安装
# Ubuntu系统
sudo apt update
sudo apt install docker.io docker-compose
# CentOS系统
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
二、部署私有镜像仓库
2.1 使用官方Registry镜像
最简单的部署方式是通过Docker官方提供的registry镜像:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
2.2 持久化存储配置
为数据持久化,建议挂载本地目录:
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /data/registry:/var/lib/registry \
registry:2
三、高级安全配置
3.1 HTTPS证书配置
生产环境必须配置HTTPS:
# 生成自签名证书
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout domain.key -x509 -days 365 -out domain.crt
# 启动带证书的registry
docker run -d \
-p 443:443 \
--name registry \
-v /data/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
3.2 身份验证配置
使用htpasswd创建认证文件:
docker run --entrypoint htpasswd httpd:2 -Bbn username password > auth/htpasswd
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /data/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2
四、日常使用与维护
4.1 客户端配置
在使用自签名证书时,客户端需要信任证书:
# Linux系统
sudo cp domain.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
# Docker配置
sudo mkdir -p /etc/docker/certs.d/myregistrydomain.com:5000
sudo cp domain.crt /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
4.2 常用操作
推送和拉取镜像:
# 标记镜像
docker tag myimage myregistrydomain.com:5000/myimage
# 推送镜像
docker push myregistrydomain.com:5000/myimage
# 拉取镜像
docker pull myregistrydomain.com:5000/myimage
五、总结
通过本文的详细步骤,您应该已经成功在Linux云服务器上配置了私有镜像仓库。私有仓库不仅能提高部署效率,还能增强安全性。建议定期备份仓库数据,并监控存储空间使用情况。
对于企业级应用,可以考虑使用Harbor等更专业的镜像仓库解决方案,它们提供了更多高级功能如漏洞扫描、复制策略等。
实用小贴士
- 定期执行
docker system prune清理无用镜像 - 使用
registry garbage-collect命令清理仓库中未被引用的层 - 考虑配置日志轮转防止日志文件过大
