在 Ubuntu 上搭建一个轻量级的 Docker 镜像仓库,可以使用 Harbor 或者 Docker Registry。如果你想要一个简单、轻量的仓库,Docker Registry
是一个非常合适的选择,因为它是 Docker 官方提供的。
步骤 1:安装 Docker #
确保你的系统上已安装 Docker,如果还没有,可以通过以下命令安装:
sudo apt update
sudo apt install -y docker.io
步骤 2:使用 Docker Registry 搭建镜像仓库 #
Docker Registry 是 Docker 官方提供的开源镜像仓库,使用它可以轻松搭建私有镜像仓库。
拉取 Docker Registry 镜像: Docker 官方提供了一个 Docker Registry 镜像,运行这个镜像就可以搭建一个私有仓库。
sudo docker pull registry:2
运行 Docker Registry: 启动一个 Docker Registry 实例,默认情况下会使用端口 5000。
sudo docker run -d -p 5000:5000 --name registry registry:2
这条命令将会拉取并运行一个
registry
容器,并将本地的 5000 端口映射到容器的 5000 端口。验证镜像仓库是否正常运行: 在浏览器中访问
http://<your-server-ip>:5000/v2/
,如果一切顺利,你会看到一个响应,表示仓库正在运行。
步骤 3:配置 Docker 客户端连接私有仓库 #
标记镜像: 假设你有一个本地的镜像
my-app
,你可以将其标记为指向私有仓库:sudo docker tag my-app:latest localhost:5000/my-app:latest sudo docker tag flask-app:latest localhost:5000/547475331/flasktest:latest
推送镜像到私有仓库: 你可以将标记过的镜像推送到你刚刚搭建的私有仓库:
sudo docker push localhost:5000/my-app:latest sudo docker push localhost:5000/547475331/flasktest:latest
从私有仓库拉取镜像: 如果你想从私有仓库拉取镜像,只需运行:
sudo docker pull localhost:5000/my-app:latest sudo docker pull localhost:5000/547475331/flasktest:latest
可选:启用 HTTPS(生产环境) #
如果你准备将这个仓库用于生产环境,建议启用 HTTPS 来加密数据传输。你可以使用自签名证书或者从认证机构(如 Let’s Encrypt)获得证书。
生成自签名证书:
mkdir -p /certs openssl req \ -newkey rsa:4096 -nodes -keyout /certs/domain.key \ -x509 -out /certs/domain.crt
更新 Docker Registry 启动命令: 修改启动命令,添加证书和密钥的路径。
sudo docker run -d -p 5000:5000 --name registry \ -v /certs:/certs \ -e REGISTRY_HTTP_SECRET=<your-secret> \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
通过这种方式,你就搭建了一个简单、轻量的 Docker 镜像仓库。如果你希望更高效、易用的管理界面,可以考虑使用 Harbor,它有更丰富的功能,但也需要更多的资源来支持。
是的,Docker Registry 可以配置持久化存储。默认情况下,Docker Registry 存储镜像数据在容器的本地文件系统中,但为了持久化存储和确保镜像数据不会在容器重启或删除时丢失,你需要将存储目录挂载到宿主机的持久存储上。
Docker Registry 持久化存储配置 #
要让 Docker Registry 使用持久化存储,通常做法是将宿主机的一个目录挂载到 Registry 容器的 /var/lib/registry
路径上,这样存储的数据将保存在宿主机的文件系统中,不会随着容器的删除而丢失。
1. 使用宿主机挂载目录: #
docker run -d -p 5000:5000 --name registry \
-v /path/on/host:/var/lib/registry \
registry:2
docker run -d -p 5000:5000 --name registry \
-v /registry-data:/var/lib/registry \
registry:2
docker run -d -p 5000:5000 --name registry \
-v /registry-data:/var/lib/registry \
--restart always \
registry:2
/path/on/host
: 这个路径是宿主机上的目录,会被挂载到 Docker Registry 容器的/var/lib/registry
目录。你需要确保这个目录有足够的磁盘空间,以存储镜像。
2. 使用云存储或网络存储(如 NFS、AWS S3 等): #
如果你需要在多个主机之间共享 Registry 存储,或者希望将镜像存储到云存储中,可以使用支持的后端存储。
Docker Registry 支持多种持久化存储后端,包括:
- Amazon S3
- Google Cloud Storage
- Microsoft Azure Storage
- OpenStack Swift
- NFS
例如,使用 S3 存储:
docker run -d -p 5000:5000 --name registry \
-e REGISTRY_STORAGE=s3 \
-e REGISTRY_STORAGE_S3_ACCESSKEY=<access-key> \
-e REGISTRY_STORAGE_S3_SECRETKEY=<secret-key> \
-e REGISTRY_STORAGE_S3_BUCKET=<bucket-name> \
registry:2
在此配置中,镜像数据将存储在指定的 S3 桶中。
3. 配置持久化数据库: #
如果你需要配置 Docker Registry 以持久化配置信息和身份验证等数据,可以考虑使用外部数据库(如 MySQL、PostgreSQL)来存储这些信息。
总结: #
- 默认情况下,Docker Registry 的存储是临时的,仅在容器生命周期内有效。
- 要启用持久化存储,可以通过挂载宿主机目录或使用外部存储服务(如 AWS S3)来持久保存镜像数据。