docker仓库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker仓库相关的知识,希望对你有一定的参考价值。
docker仓库是一个无状态,高度可扩展的服务器端应用程序,可以存储和分发Docker镜像
你应该使用仓库,如果你想: 严格控制您的镜像和存储位置 完全拥有您的镜像分配管道 将镜像存储和分发紧密集成到您的内部开发工作流中 运行本地仓库启动容器 docker run -d -p 5000:5000 --restart=always --name registry registry:2 停止本地仓库 要停止仓库,请使用docker stop 与其他容器相同的命令 docker stop registry 要卸下容器,请使用docker rm docker stop registry && docker rm -v registry
基本配置 要配置容器,可以向docker run命令传递附加或修改的选项
1、自动启动仓库
如果要将仓库用作永久基础架构的一部分,则应将其设置为Docker重新启动或退出时重新启动 docker run -d -p 5000:5000 --restart=always --name registry registry:2
2、自定义发布端口
如果您已经使用端口5000,或者想要运行多个本地仓库以分开关注的区域,则可以自定义注册表的 端口设置。此示例在端口5001上运行仓库,并将其命名 registry-test。请记住,-p值的第一 部分是主机端口,第二部分是容器内的端口。在容器内,5000默认情况下,仓库侦听端口 docker run -d -p 5001:5000 --name registry-test registry:2 如果要更改侦听容器内的端口,可以使用环境变量REGISTRY_HTTP_ADDR来更改它。此命令使注册表侦听容器内的端口5001: docker run -d -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 -p 5001:5001 --name registry-test registry:2
3、自定义存储位置
默认情况下,仓库数据在主机文件系统作为Docker卷保留,我们可以将仓库内容存储在主机文件系 统的特定位置,示例将主机目录绑定/mnt/registry到仓库容器中/var/lib/registry/ docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2
部署纯HTTP仓库
1、编辑daemon.json文件,其默认位置 /etc/docker/daemon.json, 如果daemon.json文件不存在,请创建它 { "insecure-registries" : ["myregistrydomain.com:5000"] } 将示例中的不安全注册表的地址替换为该安全注册表的地址 2、重新启动Docker以使更改生效
使用自签名证书
1、生成自己的证书: mkdir -p /data/certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/certs/docker.sellsa.com.key -x509 -days 365 -out /data/certs/docker.sellsa.com.crt 注意:Common Name需要填写域名,我这里写的是docker.sellsa.com 2、使用TLS启动仓库 docker run -d --restart=always -v /data/certs:/certs -v /mnt/registry:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:80 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/docker.sellsa.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/docker.sellsa.com.key -p 80:80 --name registry registry:2 3、指定每个docker守护进程信任该证书 将docker.sellsa.com.crt文件复制到/etc/docker/certs.d/sellsa.com:80/ca.crt每个Docker主机上 4、我配置hosts解析docker.sellsa.com 192.168.88.2 docker.sellsa.com 5、测试上传镜像到仓库 docker pull centos //从官方仓库下载一个镜像 docker tag centos:latest docker.sellsa.com:80/centos:testv1 //配置一个标签 docker push docker.sellsa.com:80/centos:testv1 //上传到仓库
本机基本认证
1、为用户创建一个密码文件testuser,密码为 testpassword: mkdir auth docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd 2、使用基本身份验证启动注册表 docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/certs:/certs -v /mnt/registry:/var/lib/registry -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/docker.sellsa.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/docker.sellsa.com.key registry:2 3、我们把证书目录复制一份(因为这里我们改用凌端口5000) cd /etc/docker/certs.d/ cp -r docker.sellsa.com:80 docker.sellsa.com:5000 4、配置一个镜像标签 docker tag centos:latest docker.sellsa.com:5000/centos:testv1 5、尝试推送 # docker push docker.sellsa.com:5000/centos:testv1 The push refers to a repository [docker.sellsa.com:5000/centos] b362758f4793: Preparing no basic auth credentials 提示我们没有经过基本的认证,因为上面我们配置了认证 6、登录仓库,然后进行推送 # docker login docker.sellsa.com:5000 Username: testuser Password: Login Succeeded # docker push docker.sellsa.com:5000/centos:testv1 The push refers to a repository [docker.sellsa.com:5000/centos] b362758f4793: Pushed testv1: digest: sha256:65daf092bcbca173a2fe9bb5c9fd445f0cc86e0054756e68694e98d6d39c219a size: 529
使用Compose文件部署仓库
如果您的仓库调用是高级的,那么使用Docker编写文件可能会更容易部署它,而不是依赖于特定的docker run 调用。使用以下示例docker-compose-yml作为模板。 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_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm volumes: - /path/data:/var/lib/registry - /path/certs:/certs - /path/auth:/auth 替换/path为包含 目录certs/和auth/目录的目录。 通过在包含该docker-compose.yml文件的目录中发出以下命令来启动您的: docker-compose up -d
以上是关于docker仓库的主要内容,如果未能解决你的问题,请参考以下文章