在Ubuntu上搭建Docker私有仓库可以通过以下步骤完成。我们将使用Docker Registry作为私有仓库的实现。
首先,确保你的Ubuntu系统上已经安装了Docker。如果没有安装,可以使用以下命令进行安装:
sudo apt update
sudo apt install docker.io
确保Docker服务正在运行:
sudo systemctl start docker
sudo systemctl enable docker
从Docker Hub上拉取最新的Docker Registry镜像:
docker pull registry:2
使用以下命令运行一个Docker Registry实例:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
这个命令会在后台运行一个名为registry
的容器,并将主机的5000端口映射到容器的5000端口。
为了让你的Docker客户端能够与私有仓库通信,你需要配置Docker客户端以信任你的私有仓库。创建或编辑/etc/docker/daemon.json
文件,添加以下内容:
{
"insecure-registries" : ["your-private-registry-ip:5000"]
}
将your-private-registry-ip
替换为你的私有仓库所在的主机IP地址或域名。
然后,重新加载Docker守护进程的配置:
sudo systemctl daemon-reload
假设你有一个名为my-image
的镜像,你可以将其标记并推送到私有仓库:
docker tag my-image your-private-registry-ip:5000/my-image
docker push your-private-registry-ip:5000/my-image
现在,你可以从私有仓库拉取镜像:
docker pull your-private-registry-ip:5000/my-image
为了提高安全性,建议为你的私有仓库配置TLS。以下是基本步骤:
生成TLS证书:
mkdir -p /etc/docker/registry/certs
openssl req -newkey rsa:4096 -new -nodes -x509 -days 3650 -keyout /etc/docker/registry/certs/domain.key -out /etc/docker/registry/certs/domain.crt -subj "/CN=your-private-registry-ip"
修改Docker Registry配置:
创建或编辑/etc/docker/registry/config.yml
文件,添加以下内容:
version: 0.1
log:
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
tls:
certificate: /etc/docker/registry/certs/domain.crt
key: /etc/docker/registry/certs/domain.key
重新启动Docker Registry容器:
docker run -d -p 5000:5000 --restart=always --name registry -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml -v /etc/docker/registry/certs:/etc/docker/registry/certs registry:2
配置Docker客户端使用TLS:
更新/etc/docker/daemon.json
文件,添加以下内容:
{
"insecure-registries" : ["your-private-registry-ip:5000"],
"tlsverify": true,
"tlscacert": "/etc/docker/certs/ca.pem",
"tlscert": "/etc/docker/certs/server-cert.pem",
"tlskey": "/etc/docker/certs/server-key.pem"
}
然后重新加载Docker守护进程的配置:
sudo systemctl daemon-reload
通过以上步骤,你就可以在Ubuntu上成功搭建一个Docker私有仓库,并进行镜像的推送和拉取操作。