你显然需要 安装Docker (Docker1.6.0 或者更新的版本)
入门指南
启动你的 Registry:
$ docker run -d -p 5000:5000 \
--restart=always --name registry registry:2
只需这样,你的 Registry 就启动了。
你现在可以使用 tag 命令修改一个镜像的标签,然后,用 push 命令上传到你的 Registry 服务上。
$ docker pull ubuntu && docker tag ubuntu localhost:5000/batman/ubuntu
$ docker push localhost:5000/batman/ubuntu
然后,用 pull 命令把它拉取到本地。
$ docker pull localhost:5000/batman/ubuntu
我的数据在哪里呢?
默认情况下,你的registry把数据都存储在容器内部的本地文件系统当中。
但是在生产环境下,我们强烈的建议你通过修改配置策略,使用其他的存储服务后台。
如果你坚持使用默认存储策略,你可以把你的数据放到容器外面。
这里通过挂载一个数据卷到容器中,实现数据的外放:
$ docker run -d -p 5000:5000 \
-e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry \
-v /myregistrydata:/var/lib/registry \
--restart=always --name registry registry:2
共享你的Registry
现在你的registry运行在 localhost
, 你可能想于其他主机分享它。
假设你的 registry 可以通过myregistrydomain.com
域名进行访问(监听 5000
)
如果你尝试执行 docker pull myregistrydomain.com:5000/batman/ubuntu
命令,你将看到以下的错误信息:
FATA[0000] Error response from daemon: v1 ping attempt failed with error:
Get https://myregistrydomain.com:5000/v1/_ping: tls: oversized record received with length 20527.
If this private registry supports only HTTP or HTTPS with an unknown CA certificate,please add
`--insecure-registry myregistrydomain.com:5000` to the daemon's arguments.
In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag;
simply place the CA certificate at /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
如果尝试连接到一个非 localhost
registry,Docker要求你使用https模式,或者用 insecure registry 明确指定你的registry。
在这里,你有三个可选的方案来达到安全的需求。
1. 购买域的SSL证书
这个是强烈推荐的解决方案:
你只需花费10美元获取证书一年的使用权(有些数字证书认证中心甚至提供免费的证书),解决很不多不必要的麻烦。
假设你现在已经拥有一个 domain.crt
和 domain.key
在certs
文件夹内:
# Stop your registry
docker stop registry && docker rm registry
# Start your registry with TLS enabled
docker run -d -p 5000:5000 \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
--restart=always --name registry \
registry:2
优点:
- 最佳解决方案
- 没有后顾之忧(假设你的数字证书是从你的操作系统认可的CA机构处购买的)
缺点:
2.使用inscure让docker信任你的Registry
这种方式的实现思路就是让docker完全忽略你的registry的安全性。
- 在
/etc/default/docker
文件中添加:DOCKER_OPTS="--insecure-registry myregistrydomain.com:5000"
(或者DOCKER_OPTS
中追加)。 重启docker 服务。 - 在乌班图系统中,重启Docker守护进程。一般都是用
service docker stop && service docker start
命令。
优点:
- 容易配置
缺点:
- 非常不安全
- 每台想访问你的registry的docker守护进程,都必须先修改它的配置。
3. 使用一个自己签名的证书添加到docker的认证中心
或者,您可以生成自己的证书:
mkdir -p certs && openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt
一定要使用 myregistrydomain.com
作为CN的名字。
为了让每一个docker守护进程通过安全验证。你只需将 domain.crt
文件拷贝到/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
即可(复制以后,不要忘记重启docker)。
优点:
- 比方案2更安全
缺点:
- 每台想访问你的registry的docker守护进程,都必须先修改它的配置。
使用Compose
强烈建议使用Docker Compose 工具管理你的Registry。
这里只需一个简单配置文件 docker-compose.yml
就能达到方法3的效果。
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
volumes:
- /path/registry-data:/var/lib/registry
- /path/certs:/certs
你只需这行简单的命令就能启动你的registry
$ docker-compose up -d