0%

运行个人 Docker Registry(基础)

安装 Docker Engine

Install Docker Engine on CentOS

1
2
3
4
5
6
7
8
9
10
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Registry as a pull through cache

1
2
3
4
5
6
7
8
9
10
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker.service

注册域名

申请 SSL 证书

FreeSSL.cn

运行 Registry Server

Deploy a registry server

1
2
3
4
5
6
7
mkdir auth
docker run \
--entrypoint htpasswd \
httpd:2 -Bbn testuser testpassword > auth/htpasswd

mkdir certs
# copy domain.crt and domain.key to here
1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry-srv \
-v "$(pwd)"/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-v /mnt/registry:/var/lib/registry \
registry:2

拷贝镜像到 Registry Server

1
2
3
4
5
6
7
# 需要将 <domain> 替换为申请的域名
docker pull busybox:latest
docker tag busybox:latest <domain>:5000/busybox:latest
docker login <domain>:5000
docker push <domain>:5000/busybox:latest
# Registry API
curl https://testuser:testpassword@<domain>:5000/v2/busybox/tags/list

运行 Registry UI

docker-registry-frontend

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d \
--name registry-web \
--link registry-srv:registry \
-e ENV_USE_SSL=yes \
-e ENV_DOCKER_REGISTRY_HOST=registry \
-e ENV_DOCKER_REGISTRY_PORT=5000 \
-e ENV_DOCKER_REGISTRY_USE_SSL=1 \
-v "$(pwd)"/certs/domain.crt:/etc/apache2/server.crt:ro \
-v "$(pwd)"/certs/domain.key:/etc/apache2/server.key:ro \
-p 8000:443 \
-p 0:80 \
konradkleine/docker-registry-frontend:v2
# https://<domain>:8000/

添加防火墙规则

来源 协议 端口
0.0.0.0/0 TCP 5000
0.0.0.0/0 TCP 8000