docker实践入门之六:Registry

自建仓库

之前说过,我们可以直接从dockerhub上抓取别人做好的image,也可以把自己做的image上传去共享。

但是如果要做一些自己用的image呢?那就需要自建registry。

官方的registry本身做成了一个image,所以安装使用非常简单:

docker pull registry
docker run -d -p 5000:5000 --name registry registry:2

这样你就有了一个 localhost:5000 的本地registry,如果要开放出去用的话,则必须使用https,简单的方法就是用nginx做一层反向代理,加上https支持即可。

# 上传一个image
docker tag image_name localhost:5000/image_name
docker push localhost:5000/image_name
# 下拉一个image
docker pull localhost:5000/image_name

如果是经过https代理,则把localhost:5000换成相应的域名即可。

加上用户权限控制

默认的registry服务是开放的,可供任何人访问,这显然不是通常自建仓库想要的,所以需要加上用户权限管理。

一个基本的用户系统类似于web server的basic auth。

先创建一个htpasswd文件,记录用户信息:

mkdir /var/auth
docker run --entrypoint htpasswd registry -Bbn <username> <password>  >> /var/auth/auth_reg

其中/var/auth/auth_reg是用于保存用户信息的文件。<username><password>则是要创建的用户名和密码。

然后这样启动registry即可:

docker run -d -p 5000:5000 --restart=always -v /var/auth:/var/auth
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/var/auth/auth_reg \
    registry

现在就不能直接push和pull了,需要先登录一下:

docker login localhost:5000

输入用户名密码,之后登录信息会被保存在~/.docker/config.json里,并且会有一个安全警告,建议使用更安全的保存方式,比如Mac OS的keychain。

因为登录信息已经保存,所以后就可以直接push和pull了。

推送到[go4pro.org]