10.2 创建 docker 私有化仓库
有时候使用 Docker Hub 这样的公共仓库可能不方便(有时候无法访问),用户可以创建一个本地仓
库供私人使用,这里使用官方提供的工具 docker registry 来配置私有库
1 、使用官方提供的工具来配置
docker registry 是官方提供的工具,可以用于构建私有的镜像仓库。
私有仓库好处:
1、节约带宽
2、可以自己定制系统
docker registry 这个工具是一个镜像,直接下载并使用 registry镜像启动 docker 实例就可以了。
有了docker 以后,所有软件不再以 office.exe 或 lrzsz.rpm 形式发布,而以 docker 镜像发布。
你只需要 下载 docker 镜像并运行一个 docker 实例。
实验环境:
docker私有仓库地址:192.168.1.63
docker服务器 地址 192.168.1.64 ,xuegod64 会使用 xuegod63上docker 私有仓库来
pull/push 镜像
实验拓扑图:
10.2.1 配置xuegod63为docker私有仓库
[root@xuegod63 ~]# systemctl stop firewalld
[root@xuegod63 ~]# systemctl disable firewalld
[root@xuegod63 ~]# iptables -L -n
1、 不能关闭防火墙,因为 docker 后期端口转发,需要使用 firewalld
[root@xuegod63 ~]# systemctl start firewalld.service #必需开启防火墙,因为后面要使用
5000 端口进行通信
2、关闭 selinux
[root@xuegod63 ~]#vim /etc/sysconfig/selinux
改:SELINUX enforcing
为:SELINUX=disabled
[root@xuegod63 ~]#reboot
[root@xuegod63 ~]# getenforce
Disabled
10.2.2 配置 xuegod63 为 docker 私有仓库服务端
1.启动 docker
[root@xuegod63 ~]# systemctl start docker
2.拉取 registry 镜像。 registry镜像中包括搭建本地私有仓库的软件:
把registry.tar 上传到 Linux 上
方法一:导入本地镜像:
[root@xuegod63 ~]# docker load -i registry.tar
方法二:在线导入镜像,比较慢
[root@xuegod63 ~]#docker pull registry
Using default tag: latest
Trying to pull repository docker.io/library/registry ...
latest: Pulling from docker.io/library/registry
acf34ba23c50: Waitingerror pulling image configuration: Get
https://dseasb33srnrn.cloudfront.net/registry v2/docker/registry/v2/blobs/sha256/13/136
c8b16df203ef26b2f39e24bd3f403b63be67610ec99a5b5af0cceac5c1b51/data?Expires=1491
661458&Signature=VpBWJnckUbRqJol8E WTw2ZswQ xOjrbqDfUstwjJwA55NoaOlESDpUC2
AOloQXQRXx~F7 DGwaOY4bjJpdymnVhyv5ylO2ZB1tlkgANsNYhyoKOSyT8IycW94Cee~Ga
XqdcwkdECsLqWbRW1S297k4jK2GXTtaZqUsBrrmx3oAQ_&Key Pair Id=APKAJECH5M7VW
IS5YZ6Q: EOF
注:
这是因为访问不了国外的网址导致的。
解决:多再试试几次,终于一次,你不会被墙,可以访问成功的。
扩展:下载registry 镜像时,有时会访问不到国外网站,导致下载失败
3.查看 registry 镜像
[root@xuegod63 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/registry latest 047218491f8c 3 weeks ago 33.17 MB
扩展 :.io 域名
.io是 [british indian ocean territory] 英属印度洋领地的简写
4、从 Docker HUB 上拉取一个镜像测试
方法一:本地导入
上传busybox.tar 镜像到 Linux 系统上,作为测试镜像。
[root@xuegod63 ~]# docker load -i busybox.tar
[root@xuegod63 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/busybox latest 00f017a8c2a6 2 weeks ago 1.11 MB
docker.io/registry latest 047218491f8c 3 weeks ago 33.17 MB
注:
BusyBox概述: BusyBox 是一个集成了一百多个最常用 Linux 命令和 工具的软件。 BusyBox 包
含了 BusyBox 包含了一些简单的工具,例如 ls 、 cat 和 echo 等等,还包含了一些更大、更复杂的工具,
例 grep 、 find 、 mount 以及 telnet 。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说
BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自
带的 shell 。
官网:www.busybox.net
方法二:在线安装
[root@xuegod63 opt]# docker pull busybox
Using default tag: latest
Trying to pull repo sitory docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
5、创建镜像链接或为基础镜像打个标签 (复制一个镜像并起一个名字
语法:docker tag 镜像名 标签 私有仓库地址 镜像名:标签
[root@xuegod63 ~]# docker tag docker.io/registry:latest
192.168.1.63:5 000/busybox:latest
注:不写镜像标签,默认是: latest
[root@xuegod63 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.63:5000/busybox latest 00f017a8c2a6 2 weeks ago 1. 11 MB
docker.io/busybox latest 00f017a8c2a6 2 weeks ago 1.11 MB
docker.io/registry latest 047218491f8c 3 weeks ago 33.17 MB
6、修改 docker 配置文件,指定私有仓库 url
registry ˈ red ʒɪ stri] 记录,登记 ,注册
需要安装docker common 1.12.6 11.el7.centos.x86_64 这个包,不然没有配置文件。默认我
已经安装了。
[root@xuegod63 ~]# rpm -qf /etc/sysconfig/docker
docker-common 1.12.6 11.el7.centos.x86_64[root@xuegod63 ~]# vim /etc/sysconfig/docker
改:4 OPTIONS=' --selinux-enabled --log- driver=journald --signature-verification=false'
为:OPTIONS=' --selinux-enabled --log-driver=journald --signature-verification=false
--insecure-registry 192.168.1.63:5000
注:在原文件后,追加红色标记文字。insecure registry 不安全的注册。 即通信使用 http 协议 。
如果使用安全的通信,就使用 https
[root@xuegod63 ~]# systemctl restart docker 启动时需要等待时间长一些
到此,所有准备工作已经完成。
排错:如果不写--insecure-registry 这个, 默认 要求使用 https 通信。所以一定要有这个参数
[root@xuegod63 ~]# docker push 192.168.1.63:5000/busybox
The push refers to a repository [192.168.1.63:5000/busybox]
Get https://192.168.1.63:5000/v1/_ping: http: server gave HTTP response to HTTPS
client
7.实战:使用 registry镜像搭建一个私有仓库
使用registry 镜像 搭建一个私有仓库。 registry 镜像 中已经把搭建私有库程序安装好了,我只需要
使用 registry 镜像 运行一个 docker 实例就可以了。
默认情况下,Registry 程序 的存放 镜像信息的 目录是 /var/lib /registry 目录下,这样如果容器被删
除,则存放于容器中的镜像也会丢失, 所以我们一般情况下会指定本地物理机一个目录 如 opt/registry
挂载到容器的 /var/lib /registry下, 这样两个目录下都有!
注:registry 运行的实例 的默认存储路径是 /var/lib /registry,只是个临时目录,一段时间之后就会
消失 。 所以 使用- v 参数,指定本地持久的路径 。
[root@xuegod63 ~]# docker run -d -p 5000:5000 -v opt/registry:/var/lib /registry
registry
e4698f625a56661edd2678269215ba42d4fa41c2da881768a741a72b4a3d0c60
[root@xuegod63 ~]# ls opt/registry # 这个目录会自动创建[root@xuegod63 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4698f625a56 docker.io/registry "/entrypoint.sh /etc/" 7 minutes ago Up 6 minutes
0.0.0.0:5000 -->5000/tcp suspicious_colden
[root@xuegod63 ~]# netstat -antup | grep 5000
tcp6 0 0 :::5000 :::* LISTEN 4032/docker proxy
说明,私有库已经启动成功。
8、将刚新打好标签的 192.168.1.63:5000/busybox 镜像, push 到本地私有仓 库中。
[root@xuegod63 ~]# docker push 192.168.1.63:5000/busybox
The push refers to a repository [192.168.1.63:5000/busybox]
c0de73ac9968: Pushed
latest: digest:
sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5 size: 527
9、查看镜像的存储目录和文件
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/tree 1.6.0 10.el7.x86_64.rpm
[root@xuegod63 ~]# tree /opt/registry/docker/registry/v2/
。。。
└── busybox
├── _layers
│ └── sha256
│ ├──
00f017a8c2a6e1fe2ffd05c281f27d069d2a99323a8cd514dd35f228ba26d2ff
│ │ └── link
│ └──
04176c8b224aa0eb9942af765f66dae866f436e75acef028fe44b8a98e045515
│ └── link
总结:
10.2.3 测试私有库是否可用
在另外一台CENTOS7.4 64 64 系统测试 pull 功能
开启CENTOS7.4 64 64 虚拟机:
1.安装 docker
[root@xuegod63 ~]# scp -r docker rpm 192.168.1.64:/root/
[root@xuegod63 ~]# scp /etc/yum.repos.d/docker.repo 192.168.1.64:/etc/yum.repos.d/
安装:
[root@xuegod64 ~]# yum install docker -y
2.修改 docker 配置文件,指定 docker 镜像加速结点为: 私有仓库的地址
[root@xuegod64 ~]# vim /etc/sysconfig/docker
修改此行
改:4 OPTIONS=' --selinux--enabled -log driver=journald -signature verification=false'
为:OPTIONS=' selinux enabled --log-driver=journald --signature-verification=false
--insecure registry 192.168. 1 .6 3 :5000
注:添加红色标记文字。--insecure registry 不安全的注册
[root@xuegod64 ~]# systemctl restart docker #启动 docker 服务
3.测试,下载刚才上传的镜像
[root@xuegod64 ~]# docker pull 192.168.1.63:5000/busybox
[root@xuegod64 ~]# docker images 查看导入的镜像
REPOSITORY TAG IMAGE ID CREATEDSIZE192.168.1.63:5000/busybox latest00f017a8c2a6 2 weeks ago1.11 MB
使用新导入的镜像,运行一个新docker 实例:
[root@xuegod64 ~]# docker run 192.168.1.63:5000/busybox:latest echo "hello"
hello
运行成功。
创建镜像链接并命名:
[root@xuegod64 ~]# docker tag 192.168.1.63:5000/busybox busybox:v1
[root@xuegod64 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.63:5000/busybox latest 00f017a8c2a6 5 months ago 1.11 MB
busybox v1 00f017a8c2a6 5 months ago 1.11 MB
删除镜像:
语法:docker rmi 镜像名:标签
[root@xuegod64 ~]# docker rmi 192.168.1.63:5000/busybox:latest 删除镜像
[root@xuegod64 ~]# docker images
查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox v1 00f017a8c2a6 5 months ago 1.11 MB[root@xuegod64 ~]# docker run busybox:v1 echo aaaaaa 使用新命名的镜像运行实例
aaaaaa