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 镜像

实验拓扑图:

docker默认私有仓库 docker私有仓库的优点_docker

 

 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 。

 

docker默认私有仓库 docker私有仓库的优点_docker默认私有仓库_02

 

 

官网:www.busybox.net

docker默认私有仓库 docker私有仓库的优点_docker_03

 

 

方法二:在线安装

[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


总结:

docker默认私有仓库 docker私有仓库的优点_docker_04

 

 

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