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
注意我们一定要在auth
和certs
目录的上层目录执行上面的命令才行。因为上面的命令把当前目录的certs
和auth
目录映射进了容器。
上面的命令让docker registry使用「数字证书」进行ssl通信,并把443
服务端口映射到host,然后还使用htpasswd
用来做用户认证。
执行上面的命令的结果如下:
可以看到这个容器创建了,此时使用docker ps
命令查看容器运行状态:
可以看到此时容器已经运行了。
本篇就讲到这里,下一篇文章讲容器的连接和使用。