1 Docker私有仓库(Registry)
1.1 Registry的介绍
关于Docker的仓库分为私有库和公有仓库,共有仓库只要在官方注册用户,登录即可使用。但对于仓库的使用,企业还是会有自己的专属镜像,所以私有库的搭建也是很有必要的存在。
对于原生的仓库,Docker提供了Registry,它能帮助我们组建属于自己的私有库,但是缺点也比较明显,就是难管理,无法进行复杂的操作
1.1 下载镜像Docker Registry
Docker Registry工具也是个docker镜像,它的功能就是用于创建私服版本个人企业版的docker hub。输入如下命令下载Docker Registry:
docker pull registry
1.2 运行私有库Registry的方法
docker run -itd -v /data/registry:/var/lib/registry -p 5100:5000 --restart=always --name registry registry:latest
上面指令中参数的具体含义:
(1)-d:设置Reigistry容器后台运行模式;
(2)-p:网络端口映射,指定容器端口绑定到主机相应主机端口;默认情况下Docker开放了5000端口(Python Flask端口)映射到主机端口32769上,这里的-p 5100:5000是将Docker内部默认端口映射到主机端口5100上,第一个5100是主机端口;第二5000是容器端口。
(3)-v:添加数据卷,格式为:-v /宿主机目录:/容器内目录。需要注意的是,指令执行后会自动创建文件夹。
(4)--privileged=true:Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied的解决办法。
(5)registry:docker registry镜像。
2 制作镜像
我们首先对一个容器进行升级,让它具有更多的功能,然后提交这个镜像,制作成一个具有新功能的镜像; 然后将这个具有新功能的镜像提交给私有库Registry。
2.1 由下载的镜像创建容器并对容器进行功能加强
这里以ubuntu16.04为例演示创建一个镜像的过程。这里我已经下载了ubuntu16.04镜像,使用命令docker run -itd --name='jy-ubuntu16.04' ubuntu:16.04创建一个名字为jy-ubuntu16.04的容器。
# 启动容器
docker run -itd --name='jy-ubuntu16.04' ubuntu:16.04
#进入容器
docker exec -it jy-ubuntu16.04 /bin/bash
安装vim和net-tool两个工具包。在容器内部,安装这两个包的命令为:
apt-get update
apt-get install vim
apt-get install net-tool
# 退出容器
exit
2.2 提交容器副本为镜像
使用命令docker commit来提交容器副本,命令如下:
docker commit -m="ubuntu advanced version" -a="jy" jy-ubuntu16.04 my_ubuntu:v1
docker commit指令中的参数说明:
(1)-m:自定义的提交描述信息;
(2)-a:指定镜像作者;
(3)jy-ubuntu16.04:容器名字,这里也可以用容器ID代替;
(4)my_ubuntu:v1:指定要创建目标镜像的自定义名字(这里为my_ubuntu)和自定义版本(v1)。
3 制作镜像
3.1 curl验证私服库Registry上有什么镜像
# curl -XGET http://主机映射的网络地址:主机映射网络端口/v2/_catalog
curl -XGET http://0.0.0.0:1000/v2/_catalog
3.2 将新镜像修改为符合私服规范的Tag
# docker tag 镜像ID或镜像名:Tag Host:Port/Repository:Tag
docker tag my_ubuntu:v1 0.0.0.0:1000/my_ubuntu:v1
上面代码的参数含义如下所示:
(1)镜像ID或镜像名:要上传到私有库Registry的镜像ID或名字; (2)Tag:要上传的镜像版本号; (3)Host:本地私有库的映射网址(本文为0.0.0.0); (4)Post:本地私有库的映射端口(本文为5100); (5)Repository:Tag:上传到私有库Registry后自定义的镜像名字、版本号。
3.3 修改配置文件使docker支持http
由于docker的私服库作了安全加固,通常是不支持http的推送,所以这里需要配置取消该限制,代码如下所示:
首先查看,安装的docker支持的可访问的支持http:
cat /etc/docker/daemon.json
由上图可以看出,安装的docker只支持阿里云镜像加速网址的http连接,为了实现镜像上传到私有库Registry,我们还要配置支持本地安装私有库Registry的http连接,代码如下:
修改/etc/docker/daemon.json配置文件,在终端输入sudo gedit /etc/docker/daemon.json,打开配置文件添加如下内容(注意不要遗漏,):
{
"insecure-registries": ["hadoop102:5100"]
}
# 重启docker
systemctl daemon-reload
systemctl restart docker
3.4 push推送到私服库
#docker push 符合私服规范的Tag的镜像名称或ID:版本号
docker push 0.0.0.0:5100/my_ubuntu:v1
3.5 将私有库的镜像拉取到本地并运行
使用docker pull命令从私有库拉取镜像到docker中:
docker pull Registry的网络映射:Registry的端口映射/私有库中的镜像名字:版本号