docker 私有仓库搭建

版本: Docker version 18.03.1-ce, build 9ee9f40
参考官方文档:
https://docs.docker.com/samples/library/registry/#run-a-local-registry-quick-version
https://docs.docker.com/registry/deploying/
https://docs.docker.com/registry/insecure/

下载registry镜像

docker pull registry
去海外默认地址下载, 网上说有墙,但我用着是没墙,可以下载。

启动镜像

  1. 创建宿主机保存镜像的目录
    mkdir -p /root/my_docker_registry

  2. 启动 服务
    docker run -d -p 5000:5000 --restart always -v /root/my_docker_registry:/var/lib/registry registry

[root@node205 my_docker_registry]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                      PORTS                    NAMES
5b0159edad4b        registry                     "/entrypoint.sh /etc…"   6 seconds ago       Up 4 seconds                0.0.0.0:5000->5000/tcp   eloquent_poincare

可以使用 docker inspect 5b0159edad4b 查看该registry的详细信息。

验证及配置

  1. 直接push一个镜像
[root@node205 my_docker_registry]# docker push node205:5000/hello-world
The push refers to repository [node205:5000/hello-world]
An image does not exist locally with the tag: node205:5000/hello-world

需要先打tag 。

  1. 打tag 后push
docker tag hello-world  node205:5000/hello-world

[root@node205 my_docker_registry]#  docker push node205:5000/hello-world
The push refers to repository [node205:5000/hello-world]
Get https://node205:5000/v2/: Gateway Timeout 

或者 

[root@node205 docker]# docker push 10.30.16.205:5000/hello-world
The push refers to repository [10.30.16.205:5000/hello-world]
2b8cbd0846c5: Retrying in 1 second 
received unexpected HTTP status: 501 Unsupported method ('POST')

报错原因: 私有仓库默认使用 https , 需要配置为使用http ; 另外,本环境使用了外网代理, 发现连接私有仓库会通过代理,需要配置不走代理。

参见官网: https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry
https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

  • /etc/docker/daemon.json 编辑
{
  "insecure-registries" : ["myregistrydomain.com:5000"]
}

(通过日志发现,当启用insecure-registries时,会先尝试https ,不通,再使用http进行处理。 生产环境不建议使用之。)

  • 配置本地地址不走代理
    编辑/etc/systemd/system/docker.service.d/http-proxy.conf 和 /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]    
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

[Service]    
Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,node205"
  • 重启服务
systemctl daemon-reload

systemctl restart docker

网页验证

http://10.30.16.205:5000/v2/_catalog

可以看到 {"repositories":["hello-world"]}

其他节点配置使用

  1. 配置代理中增加NO_PROXY, 同master上配置

  2. 配置daemon.json ,同master上配置

  3. 使用 docker pull 或push 从私有仓库中下载或上传

你可能感兴趣的:(docker 私有仓库搭建)