Docker-仓库

仓库(Repository)就是集中存放镜像的地方。一个容易混淆的概念是注册服务器(Registry),实际上注册服务器是管理仓库的具体服务器,一个注册服务器下可以有多个仓库,一个仓库下可以有多个镜像。从这方面来说,仓库可以被认为一个具体的项目或目录,例如:dl.dockerpool.com/ubuntudl.dockerpool.com是注册服务器地址,而ubuntu是仓库名

Docker Hub

目前Docker官方维护了一个公共仓库Docker Hub,其中的镜像已经超过了10w+,大部分的需求都可以通过在Docker Hub中直接下载镜像来实现:

注册:你可以在https://cloud.docker.com免费注册一个Docker账号

登录:可以通过docker login命令交互式的输入用户名与密码,登录Docker Hub。可以通过docker logout退出登录

拉取镜像:你可以通过docker search命令来查找官方仓库中的镜像,并利用docker pull命令将它下载到本地。如下:

root@ubuntu:~# docker search ubuntu
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   8032                [OK]                
dorowu/ubuntu-desktop-lxde-vnc                            Ubuntu with openssh-server and NoVNC            197                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   156                                     [OK]
ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with ansible                   94                                      [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   87                  [OK]                
neurodebian                                               NeuroDebian provides neuroscience research s…   50                  [OK]                
ubuntu-debootstrap                                        debootstrap --variant=minbase --components=m…   39                  [OK]                
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          38                                      [OK]
nuagebec/ubuntu                                           Simple always updated Ubuntu docker images w…   23                                      [OK]
tutum/ubuntu                                              Simple Ubuntu docker images with SSH access     18                                      
i386/ubuntu                                               Ubuntu is a Debian-based Linux operating sys…   13                                      
ppc64le/ubuntu                                            Ubuntu is a Debian-based Linux operating sys…   12                                      
1and1internet/ubuntu-16-apache-php-7.0                    ubuntu-16-apache-php-7.0                        11                                      [OK]

字段释义:

  • NAME:镜像名称
  • DESCRIPTION:镜像描述
  • STARS:收藏数,表示该镜像的关注度
  • OFFICIAL:是否官方创建
  • AUTOMATED:是否自动创建,AUTOMATED允许验证镜像的来源和内容

根据是否由官方提供,可以将镜像分为两类:

  • 一类是类似ubuntu这样的镜像,被称为基础镜像或根镜像。这些镜像有Docker公司创建、验证、支持、提供,这样的镜像往往使用单个单词作为名字
  • 还有一种类型,比如i386/ubuntu镜像。它是由Docker的用户创建并维护的,往往带有用户名称前缀。

推送镜像:用户也可以在登录之后,通过docker push命令来推送自己的镜像到Docker Hub,例如:

root@ubuntu:~# docker tag ubuntu:16.04 dockeryang/ubuntu:16.04
root@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
dockeryang/ubuntu   16.04               5e8b97a2a082        6 weeks ago         114MB
ubuntu              16.04               5e8b97a2a082        6 weeks ago         114MB
root@ubuntu:~# docker push dockeryang/ubuntu:16.04

切记,以上命令中的dockeryang替换成你自己的Docker账号用户名

私有仓库

有时候使用Docker Hub这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用

容器运行:你可以获取官方的registry镜像来运行:

docker run -d -p 5000:5000 --name my_registry --restart=always registry

这将使用官方的registry镜像来启动私有仓库,默认情况下,仓库会被创建在容器的/var/lib/registry目录之下。在之前,容器存储层应该保持无状态化,容器运行时应尽量保持容器内不发生任何写入操作,我们可以通过-v参数来将镜像存放在本地的指定目录,如下:

docker run -d -p 5000:5000 --name my_registry --restart=always -v /opt/lib/registry:/var/lib/registry registry

这样一来,镜像都会存放在本地的/opt/lib/registry目录之下

上传镜像:建立好私有仓库之后,我们就可以使用docker tag命令来标记一个镜像,然后将其推送到私有仓库,例如:

root@ubuntu:~# docker tag ubuntu:16.04 127.0.0.1:5000/ubuntu:16.04
root@ubuntu:~# docker push 127.0.0.1:5000/ubuntu:16.04

上传完成之后,我们可以使用curl命令来查看仓库中的镜像:

root@ubuntu:~# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}

这里可以看到{"repositories":["ubuntu"]},表明镜像已经被成功上传了

注意:如果你不想使用127.0.0.1:5000作为仓库地址,想让本网段的其他主机也能把镜像推送到私有仓库,你就得把例如192.168.0.89:5000这样的内网地址作为私有仓库地址。
如果你发现使用127.0.0.1或者你的内网地址无法推送时,不妨在/etc/docker/daemon.json文件(如果文件不存在,请新建)中加入以下内容:

{
    "registry-mirror": [
        "https://registry.docker-cn.com"
    ],
    "insecure-registries": [
        "192.168.0.89:5000"
    ]
}

然后重启Docker服务:

systemctl restart docker

值得注意的是,上面例子中192.168.0.89为博主机器的内网地址,需根据自己的实际情况进行替换!

你可能感兴趣的:(docker,docker,仓库,私有仓库,docker,hub)