部署私有 Docker Registry 服务
[TOC]
三种部署方式:
- Docker Registry 里有一个 registry 镜像可协助部署私有Docker Registry 服务。该 Registry 镜像对本地测试足矣,但不能用于生产环境。
- 对于生产环境,应以 docker/distribution 为基础,自行配置并构建自定义 Registry 镜像。
- 配置 “Registry + Nginx” 的方式,适合 v1 及 v2 版本并存。不再冗述。
以 Ubuntu Trusty 14.04 (LTS) 部署为例,建议 sudo 或 root 下执行。
Docker 官方 Registry 镜像
从 Docker 公共 Registry 中运行 hello-world 镜像:
docker run hello-world
在 localhost 上启动 Registry 服务:
docker run -p 5000:5000 registry:2
列出镜像:
docker images
把本地 repoistory 重新标记
hello-world
镜像:docker tag hello-world:latest localhost:5000/hello-mine:latest
此命令使用
[REGISTRYHOST/]NAME[:TAG]
格式为hello-world:latest
重新打标签。REGISTRYHOST
在此例中是localhost
。在 Mac OSX 环境中,localhost
换成$(boot2docker ip):5000
推送新镜像到本地 Registry 中:
docker push localhost:5000/hello-mine:latest
使用
curl
命令及 Docker Registry 服务 API v2 列出 Registry 中的镜像:curl -v -X GET http://localhost:5000/v2/hello-mine/tags/list
从你的本地环境中移除所有未使用的镜像:
docker rmi -f $(docker images -q -a )
此命令仅用于说明目的;移除镜像强制
run
从 Registry 而不是从本地缓存拉取。如果在这之后运行docker images
,在你的镜像列表中,应该看不到任何hello-world
或hello-mine
的实例尝试从指定镜像的 Registry 来运行镜像:
docker run localhost:5000/hello-mine
之后运行
docker images
, 你会发现里面多了一个hello-mine
实例。
生产环境部署
下载 Registry 源码并生成证书
下载 Registry docker/distribution 源码:
mkdir docker && cd docker && git clone https://github.com/docker/distribution.git
进入
distribution
目录,并新建certs
子目录:cd distribution && mkdir certs
使用 SSL 生成自签名证书:
openssl req \ -newkey rsa:2048 -nodes -keyout certs/domain.key \ -x509 -days 365 -out certs/domain.crt
列出
certs
目录的内容:ls certs
构建并运行 Registry 镜像
构建:
docker build -t secure_registry
运行新镜像:
docker run -d -p 5000:5000 --restart=always --name registry \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ secure_registry
使用
curl
验证https
连接:curl -v --insecure https://localhost:5000/v2/_catalog