在CentOS 7.x中配置Docker私有库

在公司有时候去使用Docker Hub公共仓库可能不太方便,于是我们可以在公司内网搭建一个私有的Docker库。网上搭建Docker私有库的方法很多,有借助于Docker Hub的、有直接使用别人创建好的私有库,本文写的是使用官方提供的docker-registry来搭建私有库,这也是最多人使用的一种方法。

0x01 私库环境

1、服务器

# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

# uname -r

3.10.0-514.2.2.el7.x86_64

2、Docker版本

# docker -v

Docker version 1.10.3, build 3999ccb-unsupported

3、关闭SELINUX

# /usr/sbin/setenforce 0 &>/dev/null && sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

0x02 私库配置

1、获取官方registry镜像

# docker pull registry ##自动去官方获取

# docker images ##查看是否pull成功,有registry即可

REPOSITORY TAG IMAGE ID CREATED SIZE

registry latest 182810e6ba8c 8 days ago 37.6 MB

2、运行registry镜像

默认仓库会被创建在容器的/var/lib/registry目录下,我们需要用-v参数将镜像文件存放在本地指定路径。

网上很多文章写的容器默认会创建在/tmp/registry下,这边被坑了很久。最后通过查看容器的信息才发现默认路径在/var/lib/registry目录下

# docker inspect f6009d3f5b46

##用docker inspect 跟上容器的ID,就可以查看容器的一些信息,定位到"Mounts",其中"Destination"即是容器默认的存放路径
"Mounts": [
{
"Source": "/cache1/registry",
"Destination": "/var/lib/registry",
"Mode": "",
"RW": true,
"Propagation": "rslave"
}
]

# docker run -d -p 5000:5000 -v /cache1/registry:/var/lib/registry registry ##运行registry容器,端口为5000;并将上传镜像存放到本地的/cache1/registry目录

# docker ps -a ##查看运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6009d3f5b46 registry "/entrypoint.sh /etc/" 3 hours ago Up 3 hours 0.0.0.0:5000->5000/tcp docker-registry

3、访问私有仓库

# curl 127.0.0.1:5000/v1/search ##网上用的这个命令报404
404 page not found
后面查了资料发现是v1版本的api查看方式,我们现在的版本是v2,用下面命令即可
# curl 127.0.0.1:5000/v2/_catalog 
{"repositories":["registry"]} ##有一个registry镜像

4、为镜像打标签

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 182810e6ba8c 8 days ago 37.6 MB

# docker tag registry 127.0.0.1:5000/registry

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 182810e6ba8c 8 days ago 37.6 MB
127.0.0.1:5000/registry latest 182810e6ba8c 8 days ago 37.6 MB

5、上传镜像

# docker push 127.0.0.1:5000/registry
The push refers to a repository [127.0.0.1:5000/registry]
96b4f94bc221: Pushed
a05358fe6900: Pushed
e4bdfaa6de6b: Pushed
c161fb93c3f2: Pushed
7cbcbac42c44: Pushed
latest: digest: sha256:5501375e0e654bb6b7550cb680c638732b3e54fb79536dd2c1f73c20d1044c93 size: 1342

6、查看镜像存储目录

# tree /cache1/registry/docker/registry/v2/repositories
/cache1/registry/docker/registry/v2/repositories
└── registry
└── _manifests
    ├── revisions
    │   └── sha256
    │       └── 5501375e0e654bb6b7550cb680c638732b3e54fb79536dd2c1f73c20d1044c93
    │           └── link
    └── tags
        └── latest
            ├── current
            │   └── link
            └── index
                └── sha256
                    └── 5501375e0e654bb6b7550cb680c638732b3e54fb79536dd2c1f73c20d1044c93
                        └── link
11 directories, 3 files

0x03  Q&A

1、在pull私有仓库时会遇到tls相关的问题

报错信息类似:

v1 ping attempt failed with error: Get https://x.x.x.x:5000/v1/_ping: http: server gave HTTP response to HTTPS client

根据提示信息可以大致了解到是和证书有关系,解决方式也给到了,要么添加额外参数直接信任,要么直接通过其他反方(比如openssl)生成证书,这里介绍添加参数来解决这个报错。

解决方法:

在CentOS 7.x系统中可以修改/usr/lib/systemd/system/docker.service文件

定位到:
ExecStart=/usr/bin/dockerd
修改为:
ExecStart=/usr/bin/dockerd --insecure-registry x.x.x.x:5000

然后重启docker,查看docker进程

# ps -ef |grep docker
root 2557 2490 0 14:56 pts/0 00:00:00 grep --color=auto docker
root 21530 1 0 Jan04 ? 00:01:33 /usr/bin/dockerd --insecure-registry x.x.x.x:5000 ##x.x.x.x即为你的私库地址

weinxin
聂扬帆博客
一个分享IT运维相关工作经验和实战技巧的个人博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. avatar 广州网站建设 4

    拥有私有的Docker库其实很方便