Docker仓库

雨燕双飞 提交于 2020-02-04 20:06:04

简介 

  仓库(Repository)是集中存放镜像的地方。
  一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址hub.docker.com/_/ubuntu来说,hub.docker.com是注册服务器地址,ubuntu是仓库名。
  仓库又分公共仓库和私有仓库,在本文将展示如何使用DockerHub官方仓库进行登录、下载等基本操作;最后还将介绍创建和使用私有仓库的基本操作。

 

Docker Hub

  目前Docker官方维护了一个公共仓库https:/hub.docker.com,其中已经包括15000多个的镜像。大部分需求都可以通过在Docker Hub中直接下载镜像来实现。

登录

  可以通过执行docker login命令来输入用户名、密码和邮箱来完成注册和登录。注册成功后,本地用户目录的.dockercfg中将保存用户的认证信息。

基本操作

  用户无需登录即可通过docker search命令来查找官方仓库中的镜像,并利用docker pull命令来将它下载到本地。
  在前面博文中,已经具体介绍了如何使用docker pull命令。例如以centos为关键词进行搜索:

[root@gavin ~]# sudo docker search centos

NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5488                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              122                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.6.1810 x86…   111                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   96                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   59                                      
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              57                                      [OK]...

  根据是否为官方提供,可将这些镜像资源分为两类。一种是类似centos这样的基础镜像,称为基础或根镜像。这些镜像是由Docker公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。
  还有一种类型,比如ansible/centos7-ansible镜像,它是由DockerHub的用户ansible创建并维护的,带有用户名称为前缀,表明是某用户的某仓库。可以通过用户名称前缀user_
name/来指定使用某个用户提供的镜像,比如ansible用户的镜像前缀为ansible/。
  另外,在查找的时候通过-s N参数可以指定仅显示评价为N星以上的镜像。
  下载官方centos镜像到本地如下所示:

[root@gavin ~]# sudo docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8ba884070f61: Pull complete 
Digest: sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
Status: Downloaded newer image for centos:latest

  用户也可以在登录后通过docker push命令来将本地镜像推送到Docker Hub。

自动创建

  自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说十分方便。有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。
  而自动创建功能使得用户通过Docker Hub指定跟踪一个目标网站(目前支持GitHub或BitBucket)上的项目,一旦项目发现新的提交,则自动执行创建。
  要配置自动创建,包括如下的步骤:

  1. 创建并登录Docker Hub,以及目标网站;*在目标网站中连接帐户到Docker Hub。
  2. 在Docker Hub中配置一个自动创建。
  3. 选取一个目标网站中的项目(需要含Dockerfile)和分支。
  4. 指定Dockerfile的位置,并提交创建。

  之后,可以在Docker Hub的“自动创建”页面中跟踪每次创建的状态。

创建和使用私有仓库

使用registry 镜像创建私有仓库

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

[root@gavin ~]# sudo docker run -d -p 5000:5000 registry

  这将自动下载并启动一个registry容器,创建本地的私有仓库服务。
  默认情况下,会将仓库创建在容器的/tmp/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径上。
  例如下面的例子将上传的镜像放到/opt/data/registry目录:

[root@gavin ~]# sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

  此时,在本地将启动一个私有仓库服务,监听端口为5000。

管理私有仓库镜像

  首先在A虚拟机中搭建私有仓库,查看其地址为192.168.1.16:5000。然后在B虚拟中测试上传和下载镜像。
  在B虚拟机中查看已有镜像:

[root@gavin ~]# sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              9f38484d220f        5 months ago        202MB

  使用docker tag命令将这个镜像标记为192.168.1.16:5000/test(格式为docker tag IMAGE[:TAG] [REGISTRYHOST/] [USERNAME/]NAME[:TAG]):

[root@gavin ~]# sudo docker tag centos:latest 192.168.1.16:5000/test
[root@gavin ~]# sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE192.168.1.16:5000/test   latest              9f38484d220f        5 months ago        202MB
centos              latest              9f38484d220f        5 months ago        202MB

  使用docker push上传标记的镜像:

[root@gavin ~]# sudo docker push 192.168.1.16:5000/test
The push refers to repository [192.168.1.16:5000/test]
d69483a6face: Pushed 
latest: digest: sha256:ca58fe458b8d94bc6e3072f1cfbd334855858e05e1fd633aa07cf7f82b048e66 size: 529

  现在可以到任意一台能访问到192.168.1.16地址的机器去下载这个镜像了:

[root@gavin /]# sudo docker pull 192.168.1.16:5000/test
Using default tag: latest
latest: Pulling from test
Digest: sha256:ca58fe458b8d94bc6e3072f1cfbd334855858e05e1fd633aa07cf7f82b048e66
Status: Downloaded newer image for 192.168.1.16:5000/test:latest
[root@gavin /]# sudo docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE192.168.1.16:5000/test   latest              9f38484d220f        5 months ago        202MB

遇到的问题

  推送镜像到私服报错:

The push refers to repository [192.168.1.16:5000/test]
Get https://192.168.1.16:5000/v2/: http: server gave HTTP response to HTTPS client

  原因:

docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端做相关设置,不使用https传输

  解决步骤:

[root@gavin ~]# vim /etc/docker/daemon.json

  将下面的代码放进去保存并退出

"insecure-registries":["192.168.1.16:5000"]

  最终如下所示:

{
  "registry-mirrors": ["https://9pcu7szd.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.1.16:5000"]
}

  依次执行下面两条命令,重新启动docker:

[root@gavin ~]# systemctl daemon-reload
[root@gavin ~]# systemctl restart docker

 

这篇文章是我学习 Docker 的记录,内容参考自《Docker技术入门与实战》

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!