欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker-仓库

程序员文章站 2024-03-12 23:56:45
...

仓库(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命令将它下载到本地。如下:

[email protected]:~# 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为博主机器的内网地址,需根据自己的实际情况进行替换!