仓库是集中存放镜像的地方,又分私有仓库和共有仓库。
有时候容易把仓库与注册服务器混淆。实际上注册服务器是存放仓库的具体服务器,一个注册服务器可以有多个仓库,而没个仓库下面可以有多个镜像。仓库可以被认为是一个具体的项目或目录。例如private-docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。
1. Docker Hub 共有镜像仓库
Docker Hub是Docker官方提供的最大的公共镜像仓库,地址是https://hub.docker.com。
1.1 登录
可以通过命令执行docker login命令来输入用户名、密码登录,登录成功后本地用户目录下会自动创建.docker/config.json文件,保存用户的认证信息。
登录成功的用户可以上传个人制作的镜像到Docker Hub。
[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
1.2. 基本操作
用户无需登录即可通过docker search 命令查找官方仓库中的镜像,并利用docker [image] pull 下载到本地。
[root@localhost ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos DEPRECATED; The official build of CentOS. 7549 [OK]
kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 35
镜像资源被分为两类:
- 一种是类似于centos这样的基本镜像,也被称为根镜像。这些镜像是由Docker公司创建、验证、支持、提供,这样的镜像往往使用单个单词作为名字。
- 另一类型的镜像,比如kasmweb/centos-7-desktop镜像,是由Docker用户kasmweb创建并维护的,带有用户名称为前缀,表明是某用户下的某仓库。可以通过用户名前缀“user_name/镜像名”来指定使用某个用户提供的镜像。
下载官方centos镜像到本地:
[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
1.3. 自动创建
自动创建是Docker Hub提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像。
例如:构建了某应用镜像,如果应用发布了新版本,用户需要手动更新镜像。而自动创建规则允许通过Docker Hub指定跟踪一个目标网站上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,步骤如下:
- 创建并登录Docker Hub,以及目标网站如github;
- 在目标网站中允许Docker Hub访问服务;
- 在Docker Hub中配置一个“自动创建”类型的项目;
- 选取一个目标网站中的项目(需要包含Dockerfile)和分支;
- 指定Dockerfile的位置,并提交创建;
之后在Docker Hub的“自动创建”页面中跟踪每次创建的状态。
2. 搭建私有仓库
2.1. 使用registry镜像创建私有仓库
安装Docker 后可以使用官方提供的registry镜像来简单搭建一套本地私有仓库环境:
[root@localhost ~]# docker run -d -p 5000:5000 registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
91d30c5bc195: Pull complete
65d52c8ad3c4: Pull complete
54f80cd081c9: Pull complete
ca8951d7f653: Pull complete
5ee46e9ce9b6: Pull complete
Digest: sha256:8c51be2f669c82da8015017ff1eae5e5155fcf707ba914c5c7b798fbeb03b50c
Status: Downloaded newer image for registry:2
249cfb72777433f8d36d5455ce219720ff6635179171af312fe50ad9650c76c1
这时将自动下载并启动一个registry容器,创建本地的私有仓库。
在daemon.json文件中添加私有镜像仓库地址。
[root@localhost]# vim /etc/dockerdaemon.json
{
"insecure-registries": ["192.168.92.132:5000"],
"registry-mirrors": ["https://4abdkxlk.mirror.aliyuncs.com"]
}
默认情况下,仓库会被创建在容器的/var/lib/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径。例如:
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always: 这是重启的策略,在容器退出时总是重启容器
--name registry: 创建容器命名为registry
为镜像打上标签
[root@localhost docker]# docker tag centos:latest 192.168.92.132:5000/centos:0.1
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.92.132:5000/centos 0.1 5d0da3dc9764 19 months ago 231MB
使用docker push命令上传到私有仓库
[root@localhost docker]# docker push 192.168.92.132:5000/centos:0.1
The push refers to repository [192.168.92.132:5000/centos]
74ddd0ec08fa: Pushed
0.1: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
用curl查看仓库中的镜像
[root@localhost docker]# curl http://192.168.92.132:5000/v2/_catalog
{"repositories":["centos"]}