[关闭]
@Tmacy 2020-06-04T06:06:50.000000Z 字数 3067 阅读 854

Docker Registry

docker


build

https://github.com/docker/distribution/blob/master/BUILDING.md

Config

https://docs.docker.com/registry/configuration

Deploy a registry server

https://docs.docker.com/registry/deploying/#copy-an-image-from-docker-hub-to-your-registry

Test an insecure registry

https://docs.docker.com/registry/insecure/

启动registry

将下面配置文件放在一个目录下:docker -t registry build .即可生成容器仓库镜像。

Dockerfile

  1. FROM deepin/minibase:v0.1
  2. COPY /config-dev.yml /etc/docker/registry/config.yml
  3. COPY /bin/registry /bin/registry
  4. VOLUME ["/var/lib/registry"]
  5. EXPOSE 5000
  6. ENTRYPOINT ["registry"]
  7. CMD ["serve", "/etc/docker/registry/config.yml"]

config-dev.yml

  1. version: 0.1
  2. log:
  3. level: info
  4. fields:
  5. service: registry
  6. environment: development
  7. storage:
  8. delete:
  9. enabled: true
  10. cache:
  11. blobdescriptor: inmemory
  12. filesystem:
  13. rootdirectory: /var/lib/registry
  14. maintenance:
  15. uploadpurging:
  16. enabled: false
  17. http:
  18. addr: :5000
  19. debug:
  20. addr: :5001
  21. prometheus:
  22. enabled: true
  23. path: /metrics
  24. headers:
  25. X-Content-Type-Options: [nosniff]
  26. health:
  27. storagedriver:
  28. enabled: true
  29. interval: 10s
  30. threshold: 3

启动容器仓库

启动仓库前,先创建容器仓库目录/opt/docker_registry,启动容器时会映射此目录到仓库主目录里

  1. docker run --name registry -d \
  2. -v /opt/docker_registry:/var/lib/registry \
  3. -p 5000:5000 \
  4. deepin/registry:v0.1

推送镜像

创建localhost本地的image

  1. docker tag deepin/minibase:v0.1 localhost:5000/minibase:v0.1

推送到本地仓库

  1. docker push localhost:5000/minibase:v0.1

如果不推送localhost,使用ip地址取代,需要配置https服务。

测试

  1. curl localhost:5000/v2/_catalog

如果返回刚才上传的镜像名称,表示已经可以用。

  1. {"repositories":["minibase"]}

配置https

生成自认证

  1. mkdir -p certs && openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/test.key -x509 -days 365 -out certs/test.crt

配置仓库域名(可选)

  1. cat /etc/hosts
  2. 127.0.0.1 localhost
  3. 127.0.1.1 sw6a
  4. 10.2.3.118 dockerhub.deepin.io

使用nginx配置https代理服务

安装

  1. aptitude install nginx

配置

cat /etc/nginx/sites-available/default

  1. server {
  2. listen 443 ssl;
  3. listen [::]:443 ssl;
  4. server_name dockerhub.deepin.io;
  5. ssl_certificate /etc/ssl/certs/test.pem;
  6. ssl_certificate_key /etc/ssl/certs/test.key;
  7. ssl_session_timeout 10m;
  8. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  9. ssl_prefer_server_ciphers on;
  10. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256::ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  11. location / {
  12. proxy_pass http://127.0.0.1:5000;
  13. proxy_read_timeout 900;
  14. proxy_connect_timeout 300;
  15. proxy_redirect off;
  16. proxy_set_header Host $http_host;
  17. proxy_set_header X-Real-IP $remote_addr;
  18. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19. }
  20. }

启动容器仓库配置证书

  1. docker run --name registry -d \
  2. -v /etc/ssl/certs:/certs \
  3. -v /opt/docker_registry:/var/lib/registry \
  4. -e "REGISTRY_HTTP_TLS_KEY=/certs/test.pem" \
  5. -e "REGISTRY_HTTP_TLS_KEY=/certs/test.key" \
  6. -p 5000:5000 \
  7. deepin/registry:v0.1

测试链接

  1. systemctl start nginx
  2. curl -k https://dockerhub.deepin.io/v2/_catalog

如果正常返回json数据,表示正常。

客户端配置

docker的仓库需要登录,可以配置客户端上传下载
拷贝test.crt到/etc/docker/certs.d/dockerhub.deepin.io/test.crt中,如果没有此路径需要手动创建。

docker login dockerhub.deepin.io后输入用户名密码,返回下面输出表示登录成功

  1. Login Succeeded

上传image:

需要先命名一个镜像为仓库地址的镜像,例如下面:

  1. docker tag deepin/minibase:v0.1 dockhub.deepin.io/minibase:v0.1

之后利用push来上传

  1. docker push dockhub.deepin.io/minibase:v0.1

上传完成后输入下面命令

  1. curl -k https://dockerhub.deepin.io/v2/_catalog

得到:

  1. {"repositories":["minibase"]}

问题

docker login 的x509问题

一般是认证问题,需要检查dockerd进程是否增加--insecure-registry 选项
配置其为你的域名或者IP地址

nginx 配置

默认配置上传有限制,会出现上传失败的情况。
增加http中的配置

  1. http{
  2. client_max_body_size 2G;
  3. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注