[Docker] Docker 配置私有仓库

什么是 Docker Registry

Registry 是一个开源的,无状态的(stateless),高可扩展的(highly scalable)服务器端应用,用来存储和获取你的分布式 Docker 镜像。

Registry 是一个存储(storage)和内容分发(content delivery)系统,持有命名的(named)Docker 镜像,通过使用不同的标签版本来区分。

Example: the image distribution/registry, with tags 2.0 and 2.1.

使用 docker 的 pushpull 命令来和仓库交互。

Example: docker pull registry-1.docker.io/distribution/registry:2.1.

理解镜像命名

在 docker 命令中使用镜像名称来反映他们的来源:

  • docker pull ubuntu 表示 docker 从官方的 Docker Hub 中拉取名称为 ubuntu 的镜像。这是命令 docker pull docker.io/library/ubuntu 的简写。
  • docker pull myregistrydomain:port/foo/bar 表示 docker 从位于 myregistrydomain:port 的仓库中寻找镜像 foo/bar

部署仓库服务器

部署仓库之前,需要在主机上安装 Docker,一个仓库是一个运行在 Docker 中的 registry 镜像。

运行一个本地仓库

使用如下命令行来开始一个仓库容器:

$ docker run -d -p 5000:5000 --restart=always --name registry registry:2

这样仓库便准备好被使用。

从 Docker Hub 中复制一个镜像到你的仓库中

  1. 从 Docker Hub 中拉取 ubuntu:16.04 镜像:

    $ docker pull ubuntu:16.04
    
  2. 将镜像重新标签为 localhost:5000/my-ubuntu。这将创建一个当前镜像的额外标签。

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. 将镜像推送到运行在 localhost:5000 的本地仓库中:

    $ docker push localhost:5000/my-ubuntu
    
  4. 删除本地缓存的 ubuntu:16.04localhost:5000/my-ubuntu 镜像,这样你便可以从你的仓库中拉取镜像。这不会删除你仓库中的 localhost:5000/my-ubuntu 镜像。

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. 从你本地仓库中拉取 localhost:5000/my-ubuntu 镜像。

    $ docker pull localhost:5000/my-ubuntu
    

如果出现无法从私有仓库 pull 或者 push,有如下报错情况:

Error response from daemon: Get myregistryhost:5000/v1/_ping: http: server gave HTTP response to HTTPS client

这是因为启动的 registry 服务不是安全可信赖的,需要在 docker 的 /etc/docker 目录下编辑deamon.json,添加下面内容:

$ tee /etc/docker/daemon.json << EOF
{ "insecure-registries":["myregistryhost:5000"] }
EOF

停止一个本地仓库

使用停止容器的命令来停止仓库:

$ docker container stop registry

使用 docker container m 删除容器:

$ docker container stop registry \
&& docker container rm -v registry

基本配置

可以通过在 docker run 命令中添加参数和选项来配置容器

仓库自动启动

通过使用 --restart=always 来设置仓库随 Docker 自动重启。

定制发布的端口

如果 5000 端口已被占用,或者要启动多个仓库,可以定制仓库的端口。通过 -p 来设置,第一部分是仓库在主机运行的端口,第二部分是仓库在容器内的监听端口。

docker run -d -p 5001:5000 \
--name registry-test registry:2

定制本地存储

在默认情况下,你的仓库数据被持久化在主机文件系统的 docker volume,可以通过 bind mount 将主机的某个目录 bind-mount 到仓库容器的 /var/lib/registry/(仓库数据在容器中的位置):

$ docker run -d -p 5000:5000 \
	--restart=always --name registry \
	-v /mnt/registry:/var/lib/registry \
	registry:2

本地认证访问控制

为了使本地仓库可以对其它主机可用,在网络间安全使用,需要使用 TLS 来进行配置。本文暂不介绍 TLS 配置外部可访问性,详见官网

本地认证访问控制使用 htpasswd 来存储密文:

  1. 为用户 testuser 创建一个密码文件,密码为 testpasswd

    $ mkdir auth
    $ docker run --entrypoint htpasswd \
    registry:2 -Bbn testuser testpasswd > auth/htpasswd
    
  2. 停止仓库:

    $ docker container stop registry
    
  3. 使用基础认证启动仓库:

    $ docer 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 \`pwd\`/registry:/var/lib/registry \
    registry:2
    
  4. 尝试使用 pull 或者 push,都会失败。需要登录仓库:

    $ docker login myregistrydomain.com:5000
    

    退出仓库:

    docker logout myregistrydomain.com:5000
    

参考资料

[1] https://docs.docker.com/registry/deploying/#/running-a-domain-registry “Deploy a registry server”
[2] https://www.jianshu.com/p/7918c9af45a3 “docker私有仓库搭建并且配置仓库认证”

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置私有镜像仓库,您可以按照以下步骤进行操作: 1. 首先,您需要安装Docker Distribution,它是一个开源项目,用于搭建和管理Docker私有镜像仓库。您可以使用以下命令来安装Docker Distribution: ``` $ sudo yum install -y docker-distribution ``` 2. 安装完成后,您需要配置Docker Distribution。默认配置文件位于`/etc/docker/distribution/docker-distribution.yml`。您可以根据需要编辑该文件,例如设置仓库的存储路径、认证和授权等。请注意,配置文件中的注释会提供有关每个选项的详细说明。 3. 配置完成后,您需要启动Docker Distribution服务。使用以下命令启动服务: ``` $ sudo systemctl start docker-distribution ``` 4. 确保服务已成功启动后,您可以使用`systemctl`命令将Docker Distribution设置为开机自启动: ``` $ sudo systemctl enable docker-distribution ``` 5. 现在,您的私有镜像仓库已经搭建完成。您可以使用`docker push`和`docker pull`命令来上传和下载镜像。请注意,您需要使用私有镜像仓库的地址作为仓库的名称。例如,如果您的私有镜像仓库在`example.com`上运行,您可以使用以下命令推送和拉取镜像: ``` $ docker push example.com/your-image:tag $ docker pull example.com/your-image:tag ``` 通过按照上述步骤配置私有镜像仓库,您可以方便地管理和维护内部的镜像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker-配置私有仓库](https://blog.csdn.net/weixin_66461008/article/details/125533575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [搭建Docker私有镜像仓库](https://blog.csdn.net/qq_39581637/article/details/122438056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Docker搭建私有镜像仓库的方法](https://download.csdn.net/download/weixin_38645373/14092391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值