Docker 是一个开源的容器引擎,可让开发者把应用以及依赖打包到一个可移植的容器中。Docker 采用Go语言编写,当时学习Go语言的时候已经知道这个神器,可是一直没有合适的场景正式使用,如今机会来啦。linux
Registry 是Docker 镜像的仓库,使用Registry 能搭建私有的Docker仓库,方便分发自定义镜像。docker
本文的内容在如下版本中测试经过,不一样的版本可能存在不一样的地方,如下内容仅供参考。
vim
1 |
[root@CentOS72-40 /] |
安装Docker 须要内核是3.10 以上64位的Linux 系统。查看Linux 内核版本,CentOS7.2是没问题的。(如今Mac 和 Windows 均可以安装Docker)
centos
1 |
[root@CentOS72-40 ~]# uname -r |
CentOS 7 以后的默认防火墙是firewall,习惯使用iptables 作防火墙,因此仍是修改成iptables 作防火墙。
中止firewall ,而后禁止firewall 开机启动。
tomcat
1 |
[root@CentOS72-40 ~] |
检查iptables 的状态,若没有安装iptables 服务则须要安装iptables-services。
tcp
1 |
[root@CentOS72-40 ~] |
编辑iptables 防火墙文档,开放22和5000端口(5000端口供Registry对外提供服务)。
学习
1 |
[root@CentOS72-40 ~]# vim /etc/sysconfig/iptables |
设置iptables 防火墙开机启动,启动防火墙使更改的配置生效。
测试
1 |
[root@CentOS72-40 ~]# systemctl enable iptables |
建立Docker 的yum 的仓库。
ui
1 |
[root@CentOS72-40 ~]# tee /etc/yum.repos.d/docker.repo <<-'EOF' |
安装docker-engine 会自动安装依赖 docker-engine-selinux。
this
大专栏 Docker 安装与Registry V2私有仓库搭建">1 |
[root@CentOS72-40 ~]# yum install docker-engine |
设置开机启动docker,而后启动docker。
1 |
[root@CentOS72-40 ~]# systemctl enable docker |
安装完docker以后将会发现建立docker0网卡。
1 |
[root@CentOS72-40 /]# ifconfig |
拉取2.5.1版本的Registry 镜像。
1 |
[root@CentOS72-40 /]# docker pull registry:2.5.1 |
启动Registry镜像。根据Registry的文档把/tmp/registry-dev 目录映射出来是有问题的,真正的数据不是存储再这个目录。不知道是不新版的存在这个目录,反正2.5.1版的Registry 数据不是保存在这里,进入容器发现真正存储镜像的时在/var/lib/registry 目录,因此把这个目录映射出来。(跟着官方文档竟然也走不通,郁闷,会不会是官方故意挖个坑让你们踩的呢)
1 |
[root@CentOS72-40 /]# docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --name registry registry:2.5.1 |
打开http://172.18.2.40:5000/v2/_catalog 验证是否安装成功。
如果启用iptables的时候没有放开5000端口,在registry 运行的时候再放开。以后停了registry 从新打开registry 就会有下面的错误。不单单是Registry这个容器存在这个问题,全部容器的在运行中,主机的iptables 被修改过,停了容器再启动都会有这个问题。目前没有找到好的解决版本,可是从新启动docker 服务 systemclt restart docker
能够临时解决这个问题。
1 |
Error response from daemon: driver failed programming external connectivity on endpoint registry (4b748e54bb59d8bfe1f1bd961c6f0fcfbd8ec94c75c5d4880134bd2a453b0d51): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.17.0.2:5000 ! -i docker0: iptables: No chain/target/match by that name. |
对已经存在的镜像wendyeq/tomcat8
打上带Registry地址的tag,版本号位1.0。而后推送到Registry,发现推送不了,缘由是Registry V2采用https协议。
1 |
[root@M-CentOS72-36 ~]# docker tag wendyeq/tomcat8 172.18.2.40:5000/wendyeq/tomcat8:1.0 |
解决这个问题的最简单方式是修改docker的启动脚本,添加-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock --insecure-registry 172.18.2.40:5000
内容。
1 |
[root@M-CentOS72-36 ~]# vim /usr/lib/systemd/system/docker.service |
修改完以后就能够推送到Registry 的私有仓库啦。
1 |
[root@M-CentOS72-36 ~]# systemctl start docker |
Docker 和 Registry 的安装都比较简单,可是Registry查找镜像好麻烦,特别是查看版本号,要好好研究一下Registry 的文档才行。