手记

Docker 仓库之单机 Docker Registry

在公司规模较小的情况下我们可以通过docker官方仓库的方式来进行构建。

Docker Registry 作为 Docker 的核心组件之一负责镜像内容的存储与分发,客户端的 docker pull 以及 push 命令都将直接与 registry 进行交互,最初版本的 registry 由Python 实现,由于设计初期在安全性,性能以及API 的设计上有着诸多的缺陷, 该版本在 0.9 之后停止了开发,由新的项目 distribution(新的 docker register 被称为 Distribution)来重新设计并开发下一代 registry,新的项目由 go 语言开发, 所有的 API,底层存储方式,系统架构都进行了全面的重新设计已解决上一代registry 中存在的问题,2016 年 4 月份 rgistry 2.0 正式发布,docker 1.6 版本开始支持 registry 2.0,而八月份随着 docker 1.8 发布,docker hub 正式启用 2.1 版本registry 全面替代之前版本 registry,新版 registry 对镜像存储格式进行了重新设计并和旧版不兼容,docker 1.5 和之前的版本无法读取 2.0 的镜像,另外,Registry

2.4 版本之后支持了回收站机制,也就是可以删除镜像了,在 2.4 版本之前是无法支持删除镜像的,所以如果你要使用最好是大于 Registry 2.4 版本的。

本部分将介绍通过官方提供的 docker registry 镜像来简单搭建一套本地私有仓库环境。

6.1.1 Docker Registry仓库服务器配置:

6.1.1.1 在docker服务器上下载并运行镜像仓库镜像
在我们的docker服务器上配置我们的镜像仓库地址

#下载镜像仓库镜像

[14:34:27 root@docker ~]#docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry
​
docker run:                             #运行起来
-d:                                     #后台运行
-v  /opt/registry:/var/lib/registry:    #逻辑卷挂载
-p 5000:5000:                           #将容器的端口映射到宿主机上(docker 默认走的是443端口)
--restart=always:                       #开机自启
registry:                               #镜像名

6.1.1.3 运行成功之后我们还要做一些其他设置
在/etc/docker/daemon.json配置,这个相当于我们的第二个主配置文件,这个文件中写了一些配置也会加载到主配置文件中进行生效,在这里我们授权一下仓库镜像地址和端口

1、编写配置文件配置镜像仓库地址

[14:58:19 root@docker ~]#vim /etc/docker/daemon.json 
​
{
      "insecure-registries":["10.0.0.117:5000"]                                                                              
}
​
10.0.0.117:5000:            #指定我们的镜像仓库IP和端口
​

2、重启docker服务使其生效
[14:40:34 root@docker ~]#systemctl restart docker
​
3、通过docker ps -a 查看正在运行的镜像,就会发现镜像仓库容器已经运行
[14:40:41 root@docker ~]#docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES
c38f9be5a45d        registry            "/entrypoint.sh /e..."   9 minutes ago       Up 10 seconds                 0.0.0.0:5000->5000/tcp   stupefied_liskov

6.1.1.4 上传镜像至镜像仓库

6.1.1.4.1 查看已有镜像
上传的话非常容易,首先我们需要去对已经存在的镜像打补丁操作

#先查看已经存在的镜像、这里有一个nginx的镜像

[14:11:33 root@docker ~]#docker images 
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
nginx-1.19.1                  ubuntu-18.04        f2a267dc97aa        44 hours ago        382 MB

6.1.1.4.2 修改镜像名格式
想要上传至仓库的话必须满足这个格式:仓库地址/验证过用户名/镜像名:版本号满足这一个格式之后才能实现被上传。所以我们需要对这个nginx镜像做一个修改

1、修改镜像名

#修改镜像名格式
[14:42:37 root@docker ~]#docker tag nginx-1.19.1:ubuntu-18.04 10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1:v1
​
docker tag:                                     #修改镜像名
nginx-1.19.1:ubuntu-18.04:                      #原镜像
10.0.0.117:5000/nginx-1.19.1:ubuntu-18.04:      #修改后镜像名

2、查看已经修改成功

[15:01:49 root@docker ~]#docker images 
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1   v1     
             f2a267dc97aa        44 hours ago        382 MB

因为在官方镜像仓库里没有认证也没有授权,所以验证过的用户省略即可

6.1.1.4.3 上传镜像至我们的10.0.0.7镜像仓库服务器

[14:58:01 root@docker ~]#docker push 10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1:v1

6.1.1.5 查看镜像已上传
1、通过下面的这条命令可以查看到我们已经上传的镜像

[15:01:52 root@docker ~]#curl -XGET http://10.0.0.117:5000/v2/_catalog
{"repositories":["ubuntu-18.04-nginx-1.19.1"]}

6.1.2 客户端演示拉取nginx镜像

6.1.2.1 客户端授权操作
如果不给客户端授权的话同样没有办法,对我们的10.0.0.117镜像仓库进行认证,因为官方的端口是443而我们在仓库服务器上配置的地址是5000所以需要修改配置文件

1、配置镜像仓库地址

[15:19:06 root@A7 ~]#vim /etc/docker/daemon.json 
{
          "insecure-registries":["10.0.0.117:5000"]                                                                          
}
​
10.0.0.117:5000             #指定仓库地址和5000端口

2、在A7客户端上重启docker

[15:19:32 root@A7 ~]#systemctl restart docker
3、在A7客户端主机上下载刚才我们在仓库服务器端上传的nginx镜像。

[15:20:42 root@A7 ~]#docker pull 10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1:v1

4、通过查看镜像、我们的nginx镜像已经下载至当前A7服务器上。

[15:22:00 root@A7 ~]#docker images 
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1   v1                  f2a267dc97aa        45 hours ago        382 MB

6.1.2.2 通过运行验证当前镜像是否可用

1、启动容器

[15:24:08 root@A7 ~]#docker run -it -d --name nginx -p 80:80 10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1:v1 nginx
​
docker run:             #启动容器
-it:                    #对容器执行命令
-d:                     #放到后台运行
--name nginx:           #启动的容器名为nginx
-p 80:80:               #将容器的80端口映射到宿主机的80端口
10.0.0.117:5000/ubuntu-18.04-nginx-1.19.1:v1:       #使用的镜像名
nginx                   #在容器启动的时候执行nginx操作

2、浏览器访问验证。

0人推荐
随时随地看视频
慕课网APP