liusheng / liusheng.github.io

Liusheng's blog
http://liusheng.github.io
5 stars 1 forks source link

搭建私有的Docker image 仓库(registry) #22

Open liusheng opened 4 years ago

liusheng commented 4 years ago

搭建私有的Docker image仓库很简单,官方提供了现成的镜像,可以用于搭建自己私有的docker registry。

1. 起本地docker registry容器

docker run -d -p 5000:5000 --restart=always --name registry registry:2

简单的docker 镜像仓库已经起来,如果仅限于本机使用,就可以直接通过docker命令上传和下载镜像。

2. 使用本地docker镜像

和正常使用流程一样,可以通过下面的命令来上传和下载镜像:

docker image tag ubuntu localhost:5000/myfirstimage
docker push localhost:5000/myfirstimage
docker pull localhost:5000/myfirstimage

3. 配置非安全校验docker镜像仓库使用

上面的docker image仓库仅限于本地使用,如果直接使用的话,默认docker会做https的安全校验,如果只是私有使用的话,可以在各个需要使用该registry的节点上的/etc/docker/daemon.json配上:

{
  "insecure-registries" : ["myregistrydomain.com:5000"]
}

这样,就会对个人私有的仓库不做安全校验,最后systemctl restart docker重启各个机器上的docker守护进程。这样仅限于在局域网内测试使用

4. 停止docker镜像仓库并清理所有的镜像数据

docker container stop registry && docker container rm -v registry

5. 配置用户认证访问

默认情况下,上面部署的docker registry是不限制外部访问的,可以通过htpasswd工具结合registry镜像提供的能力来配置用户访问认证。

6. 配置docker registry服务提供给外部使用

a) 配置TLS安全校验

如果想要将私有的docker registry服务提供给外部使用,首先需要先配置TLS安全校验。这里为了简单起见,我们使用自签名的CA证书来配置。

mkdir -p certs
openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt

b) 重新启动docker registry并且开启TLS

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -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 \
  registry:2

参考: https://docs.docker.com/registry/