docker registry私有化docker仓库服务(三)

在做本文介绍的步骤之前,先要做一些清理的准备工作。

准备工作

首先把前一篇文章中已经创建的registry容器关停并删除:

$ docker stop registry
$ docker rm registry

然后最好把提供「docker服务」的「虚拟机」也使用docker-machine命令重建一遍:

$ docker-machine restart

因为docker-machine实际调用的是boot2docker这个虚拟机:

boot2docker使用的linux发型版本是 Tiny Core Linux 。根据boot2docker里面的文档说明,Tiny Core Linux是基于内存的linux发行版:

所以当使用docker-machine重新启动boot2docker虚拟机的时候,整个虚拟机里面的内容就reset了。

因此通过docker-machine restart就相当于把虚拟机给重建了。做完准备工作,接下来是在host创建所需要的「用户名密码文件」。

创建用户名密码文件htpasswd

接下来在host准备一个auth目录,跟前一篇文章创建的certs目录并列存放。下面是创建目录的命令:

$ mkdir auth

跟前一篇文章一起创建好的目录如下:

其中certs里面有前一篇文章生成的数字证书,然后这个auth目录用来保存这篇文章里要生成的htpasswd文件。

所谓htpasswd文件,是用来保存用户名密码的文本文件,我们可以使用registry容器提供的脚本创建这个文件。

具体步骤是进到auth目录,然后执行下面的命令:

$ docker run --rm --entrypoint htpasswd registry:2 -Bbn foo bar > htpasswd

上面的命令调用registry容器的脚本,生成一个用户,用户名为foo,用户的密码为bar,然后把这个用户保存进htpasswd这个文件。

上面的命令执行完以后,可以查看生成的htpasswd文件的内容。下面是执行结果:

可以看到在htpasswd文件里,用户foo的密码是加密保存的。这样,这个文件就生成了。

接下来是启动容器。

启动容器

注意这回要把「数字证书」和htpasswd文件都使用起来,命令如下:

$ docker run -d \
  --restart=always \
  --name registry \
  -v `pwd`/auth:/auth \
  -v `pwd`/certs:/certs \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
  -p 443:443 \
  registry:2

注意我们一定要在authcerts目录的上层目录执行上面的命令才行。因为上面的命令把当前目录的certsauth目录映射进了容器。

上面的命令让docker registry使用「数字证书」进行ssl通信,并把443服务端口映射到host,然后还使用htpasswd用来做用户认证。

执行上面的命令的结果如下:

可以看到这个容器创建了,此时使用docker ps命令查看容器运行状态:

可以看到此时容器已经运行了。

本篇就讲到这里,下一篇文章讲容器的连接和使用。

Powered by Jekyll and Theme by solid