Docker的公共和私有Registry

13 篇文章 1 订阅
13 篇文章 0 订阅

一、镜像版本管理

1、下载镜像

格式:docker pull NAME[:tag]

指定标签tag

docker pull ubuntu:12.04

docker pull dl.dockerpool.com:5000/ubuntu:12.04

不指定标签tag

docker pull ubuntu

将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像

[root@docker-centos ~]# docker pull ubuntu:12.04

12.04: Pulling from library/ubuntu

d8868e50ac4c: Pull complete

83251ac64627: Pull complete

589bba2f1b36: Pull complete

d62ecaceda39: Pull complete

6d93b41cfc6b: Pull complete

Digest: sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005

Status: Downloaded newer image for ubuntu:12.04

docker.io/library/ubuntu:12.04

下载过程中,会输出获取镜像的每一层信息。

该命令实际上相当于:

docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。

完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。

docker run -t -i ubuntu:12.04 /bin/bash

[root@docker-centos ~]# docker run -t -i ubuntu:12.04 /bin/bash

WARNING: IPv4 forwarding is disabled. Networking will not work.

root@557fb25eb93d:/#

退出交互:exit

2、查看镜像信息

docker images

3、查看镜像详细信息

docker  inspect  1cca79f8389d

[

    {

        "Id": "sha256:1cca79f8389d83e1a23fc811b451abdf7305e36c708eeb63b96575e61161b9a5",

        "RepoTags": [

            "centos-with-wget:latest"

        ],

        "RepoDigests": [],

        "Parent": "sha256:fe6ec852b0c91010eb14606003c4562120c809442ec0a61fb05bb3ad53a356a2",

        "Comment": "",

        "Created": "2020-05-07T09:30:07.23859234Z",

        "Container": "7a07360617b62f7cb04aa5481da40366b9b5f5af436225fbe5d2f7e8051a90ff",

        "ContainerConfig": {

            "Hostname": "",

            "Domainname": "",

            "User": "",

            "AttachStdin": false,

            "AttachStdout": false,

            "AttachStderr": false,

            "Tty": false,

            "OpenStdin": false,

            "StdinOnce": false,

            "Env": [

                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

            ],

            "Cmd": [

                "/bin/sh",

                "-c",

                "yum install -y wget"

            ],

            "Image": "sha256:fe6ec852b0c91010eb14606003c4562120c809442ec0a61fb05bb3ad53a356a2",

            "Volumes": null,

            "WorkingDir": "",

            "Entrypoint": null,

            "OnBuild": null,

            "Labels": {

                "org.label-schema.build-date": "20200114",

                "org.label-schema.license": "GPLv2",

                "org.label-schema.name": "CentOS Base Image",

                "org.label-schema.schema-version": "1.0",

                "org.label-schema.vendor": "CentOS",

                "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",

                "org.opencontainers.image.licenses": "GPL-2.0-only",

                "org.opencontainers.image.title": "CentOS Base Image",

                "org.opencontainers.image.vendor": "CentOS"

            }

        },

        "DockerVersion": "19.03.8",

        "Author": "zola",

        "Config": {

            "Hostname": "",

            "Domainname": "",

            "User": "",

            "AttachStdin": false,

            "AttachStdout": false,

            "AttachStderr": false,

            "Tty": false,

            "OpenStdin": false,

            "StdinOnce": false,

            "Env": [

                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

            ],

            "Cmd": [

                "/bin/bash"

            ],

            "ArgsEscaped": true,

            "Image": "sha256:fe6ec852b0c91010eb14606003c4562120c809442ec0a61fb05bb3ad53a356a2",

            "Volumes": null,

            "WorkingDir": "",

            "Entrypoint": null,

            "OnBuild": null,

            "Labels": {

                "org.label-schema.build-date": "20200114",

                "org.label-schema.license": "GPLv2",

                "org.label-schema.name": "CentOS Base Image",

                "org.label-schema.schema-version": "1.0",

                "org.label-schema.vendor": "CentOS",

                "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",

                "org.opencontainers.image.licenses": "GPL-2.0-only",

                "org.opencontainers.image.title": "CentOS Base Image",

                "org.opencontainers.image.vendor": "CentOS"

            }

        },

        "Architecture": "amd64",

        "Os": "linux",

        "Size": 271334279,

        "VirtualSize": 271334279,

        "GraphDriver": {

            "Data": {

                "LowerDir": "/var/lib/docker/overlay2/90ae4fb35aa95461c7927d717f54ac21d6ce7f467d53544691181893e88f67a1/diff",

                "MergedDir": "/var/lib/docker/overlay2/2d59c3c720e46ff47e4516b57236aedba4e0411cdecd7a4c37bbaf883befcb1b/merged",

                "UpperDir": "/var/lib/docker/overlay2/2d59c3c720e46ff47e4516b57236aedba4e0411cdecd7a4c37bbaf883befcb1b/diff",

                "WorkDir": "/var/lib/docker/overlay2/2d59c3c720e46ff47e4516b57236aedba4e0411cdecd7a4c37bbaf883befcb1b/work"

            },

            "Name": "overlay2"

        },

        "RootFS": {

            "Type": "layers",

            "Layers": [

                "sha256:0683de2821778aa9546bf3d3e6944df779daba1582631b7ea3517bb36f9e4007",

                "sha256:daf6dae04785924d00f3b8f00d704e71f2943afdca9fbfa3911b073c4dacd02e"

            ]

        },

        "Metadata": {

            "LastTagTime": "2020-05-07T17:30:07.270525487+08:00"

        }

    }

]

返回JSON格式的信息

查看镜像指定信息:

docker  inspect  -f  {{."Architecture"}} 1cca79f8389d

"Id"

"RepoTags"

"RepoDigests"

"Parent"

"Comment"

"Created"

"Container"

"ContainerConfig"

"DockerVersion"

"Author"

"Config"

"Architecture"

"Os"

"Size"

"VirtualSize"

"GraphDriver"

"RootFS"

"Metadata"

4、搜寻镜像

搜索带mysql关键字的镜像

docker  search  mysql

                                    

5、删除镜像

使用镜像标签删除

使用镜像标签删除,IMAGE可以是镜像ID或者TAG

docker  rmi   IMAGE[;IMAGE...]

docker images

docker  rmi   3de0e2c97e5c

docker images

注意:当镜像创建的容器是重载的,镜像文件默认是无法删除的

查看本机上所有存在的容器

docker  ps   -a

Exited表示后台退出状态的容器,是删除不掉对应的镜像

强制删除:不推荐使用强制删除有依赖的镜像,会造成一些遗留问题

docker  rmi  -f  hello-world

推荐使用:先删除镜像所依赖的所有容器,然后再删除对应的镜像

docker   rm   CONTAINER ID

6、存出和载入镜像

存出本机镜像ubuntu:14.04为文件ubuntu_14.04.tar

docker  save  -o  ubuntu_14.04.tar   ubuntu:14.04

导入镜像从本机文件ubuntu_14.04.tar导入到镜像列表中

docker  load  --input  ubuntu_14.04.tar

docker  load  <  ubuntu_14.04.tar

7、docker  run

8、给镜像打标签(tag)时需要注意命名的规范

一般为:系统名称+系统版本+服务名+服务版本:代码版本

如:centos7.6-nginx-1.47:2.0

需要注意的是:镜像的名称需要现限制为[a-z0-9],其中可以出现的符号为[-._],不能出现中文以及中文符号,包括镜像名称中的: 也必须是英文的冒号,不然创建容器的时候会失败

给镜像打 tag:

docker tag old-image[:old-tag] new-image[:new-tag]

-f 参数为强制重命名

使用docker tag使用镜像tag重命名

docker tag hello-world:latest hello-world:v1

docker镜像的版本控制

若需升级某个docker镜像:

1.给每个新生成的镜像都打上相应版本的tag。此时可能存在image:latest、image:v1、image:v2等。

2.我们要从v1升级到v2,首先我们将导入的v2镜像强制重命名为image:latest  命令为 docker tag -f image:v2 image:latest

3.docker stop之前正在运行的容器

4.启用docker run image,此时image的等价镜像image:latest就是最新的V2镜像。

使用repository:tag的组合来删除特殊的镜像镜像ID一样

docker rmi repository:tag

  • Docker镜像公共Registry(仓库)

Docker镜像公共Registry:

Registry(注册服务器)实际是存放仓库的具体服务器,1个注册服务器上可以有N个仓库,1个仓库下可以有N个镜像。仓库可看成一个具体项目或目录。如:https://hub.docker.com/centos,可以这样理解:https://hub.docker.com是注册服务器地址,centos是仓库名。

1、Docker Hub

Docker官方维护的一个公共仓库

https://hub.docker.com

网速不好的话,特别慢!!!

https://hub.docker.com

在 Docker Hub 上注册一个账号

在 Docker Host 上登录

[root@docker-centos ~]# docker login -u zolazuomingshui

Password:

修改镜像的 repository 使之与 Docker Hub 账号匹配。Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag

重命名镜像

docker tag

docker tag  zolazuomingshui/centos-with-wget:v1

通过 docker push 将镜像上传到 Docker Hub

docker push  zolazuomingshui/centos-with-wget:v1

登录 https://hub.docker.com,在Public Repository 中就可以看到上传的镜像

要删除上传的镜像,只能在 Docker Hub 界面上操作

该镜像为公有镜像可被其他 Docker host 下载使用了

2、Docker Pool

Docker Pool是国内专业的Docker技术社区,也提供官方镜像下载管理服务

http://dockerpool.com

http://www.dockerpool.com/downloads

同上操作

三、Docker镜像私有Registry(仓库)

由于受网络和安全等因素的限制,公有Registry的弊端显现,此时选用私有Registry管理自己的镜像

安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:

1、运行registry容器

docker  run  -d  -p  5000:5000  -v  /myregistry:/var/lib/registry   registry:2

使用的镜像是:  registry:2

-d 是后台启动容器

-p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口

-v 将容器 /var/lib/registry 目录映射到 Host 的 /myregistry,用于存放镜像数据

问题描述:

创建容器的时候报错WARNING: IPv4 forwarding is disabled. Networking will not work.

解决办法:

vi  /usr/lib/sysctl.d/00-system.conf

添加如下代码:

net.ipv4.ip_forward=1

重启network服务

systemctl restart network

systemctl status  network

完成以后,删除错误的容器,再次创建新容器,就不再报错了

docker ps

docker stop 5d7181801db5

docker ps

[root@docker-centos ~]# docker  run  -d  -p  5000:5000  -v  /myregistry:/var/lib/registry   registry:2

61ccf06cd7fd9f996a28bc3302b18ca9f8638226a7a275ccb927827e54531f4b

[root@docker-centos ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

61ccf06cd7fd        registry:2          "/entrypoint.sh /etc??   20 seconds ago      Up 19 seconds       0.0.0.0:5000->5000/tcp   nifty_rubin

 

页面访问:

http://192.168.233.143:5000/

2、通过 docker tag 重命名镜像,使之与 registry 匹配

在镜像的前面加上了运行 registry 的主机名称和端口

镜像名称由 repository 和 tag 两部分组成。repository 的完整格式为:[registry-host]:[port]/[username]/xxx

只有 Docker Hub 上的镜像可以省略 [registry-host]:[port]

[root@docker-centos ~]# docker images

docker  tag  centos-with-wget:latest  192.168.233.143:5000/centos-with-wget/centos-with-wget:v1

[root@docker-centos ~]# docker images

3、上传镜像

docker  push  192.168.233.143:5000/centos-with-wget/centos-with-wget:v1

注意:这里使用push来上传镜像!!!

[root@docker-centos ~]# docker  push  192.168.233.143:5000/centos-with-wget/centos-with-wget:v1

The push refers to repository [192.168.233.143:5000/centos-with-wget/centos-with-wget]

Get https://192.168.233.143:5000/v2/: http: server gave HTTP response to HTTPS client

问题描述:

http: server gave HTTP response to HTTPS client

出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交时出现以上错误。

这个报错是在本地上传私有镜像的时候遇到的报错

解决办法:在docker server启动的时候,增加启动参数,默认使用HTTP访问:

vi  /usr/lib/systemd/system/docker.service

在ExecStart=/usr/bin/dockerd这一行后面增加

--insecure-registry  192.168.233.143:5000

修改好后重启docker 服务

systemctl daemon-reload

systemctl restart docker

systemctl status docker

如果上述方法还是不能解决,还可以通过以下办法解决:

vi  /etc/docker/daemon.json

{

"registry-mirrors":["https://49c47s26.mirror.aliyuncs.com","http://192.168.233.143:5000"]

}

systemctl restart docker

systemctl status docker

docker  run  -d  -p  5000:5000  -v  /myregistry:/var/lib/registry   registry:2

[root@docker-centos ~]# docker  run  -d  -p  5000:5000  -v  /myregistry:/var/lib/registry   registry:2

188b391a9267928c78897a72db2150ca44c551c7c7f7106caca10e3ec6c03ef3

 

Docker 查询或获取私有仓库(registry)中的镜像

docker search 192.168.233.143:5000

不太好用

[root@docker-centos ~]# docker search 192.168.233.143:5000

Error response from daemon: Get https://index.docker.io/v1/search?q=192.168.233.143%3A5000&n=25: net/http: TLS handshake timeout

获取仓库类的镜像:

curl -XGET  http://192.168.233.143:5000/v2/_catalog

[root@docker-centos ~]# curl -XGET  http://192.168.233.143:5000/v2/_catalog

{"repositories":[]}

获取某个镜像的标签列表:

curl -XGET  http://192.168.233.143:5000/v2/image_name/tags/list

重新尝试上传镜像到本地仓库:

docker  push  192.168.233.143:5000/centos-with-wget/centos-with-wget:v1

curl -XGET  http://192.168.233.143:5000/v2/centos-with-wget/centos-with-wget/tags/list

{"name":"centos-with-wget/centos-with-wget","tags":["v1"]}

4、从本地 registry 下载镜像

docker pull  192.168.233.143:5000/v2/centos-with-wget/centos-with-wget:v1

镜像的名称(包含 registry host 和 port)

docker images  192.168.233.143:5000/centos-with-wget/centos-with-wget

registry 也支持认证,https 安全传输等特性,参考链接:

https://docs.docker.com/registry/configuration/

详情请见,微信公众号

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值