docker仓库
- 4.1 Docker Hub公共镜像市场
- 4.2 第三方镜像市场
- 4.2.1 daocloud
- 4.2.2 阿里云
- 4.3 *搭建本地私有仓库
仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。
有时候容易把仓库与注册服务器(Registory)混淆。实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址private-docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。
在本章中,笔者将分别介绍使用DockerHub官方仓库进行登录、下载等基本操作,以及使用国内社区提供的仓库下载镜像;最后还将介绍创建和使用私有仓库的基本操作。
4.1 Docker Hub公共镜像市场
Docker Hub公共镜像市场Docker Hub是Docker官方提供的最大的公共镜像仓库,目前包括了超过100000的镜像,地址为https://hub.docker.com
。大部分对镜像的需求,都可以通过在DockerHub中直接下载镜像来实现
-
登录
可以通过命令行执行docker login
命令来输入用户名、密码和邮箱来完成注册和登录。注册成功后,本地用户目录下会自动创建.docker/config.json
文件,保存用户的认证信息。登录成功的用户可以上传个人制作的镜像到DockerHub。 -
基本操作
用户无须登录即可通过docker search
命令来查找官方仓库中的镜像,并利用docker pull
命令来将它下载到本地
例如,以centos为关键词进行搜索
[root@dbc-server-554 docker]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos DEPRECATED; The official build of CentOS. 7461 [OK]
kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 30
couchbase/centos7-systemd centos7-systemd images with additional debug… 6 [OK]
ansible/centos7-ansible Ansible on Centos7 137 [OK]
...
根据是否为官方提供,可将这些镜像资源分为两类:
一种是类似于centos这样的基础镜像,也称为根镜像。这些镜像是由Docker公司创建、验证、支持、提供,这样的镜像往往使用单个单词作为名字;
另一种类型的镜像,比如ansible/centos7-ansible镜像,是由Docker用户ansible创建并维护的,带有用户名称为前缀,表明是某用户下的某仓库。可以通过用户名称前缀“username/镜像名”来指定使用某个用户提供的镜像。
用户也可以在登录后通过docker push
命令来将本地镜像推送到DockerHub
- 自动创建
自动创建(AutomatedBuilds)是DockerHub提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像。
例如,用户构建了某应用镜像,如果应用发布新版本,用户需要手动更新镜像。而自动创建则允许用户通过DockerHub指定跟踪一个目标网站(目前支持GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:
1 )创建并登录DockerHub,以及目标网站如Github;
2)在目标网站中允许DockerHub访问服务;
3)在DockerHub中配置一个“自动创建”类型的项目;
4)选取一个目标网站中的项目(需要含Dockerfile)和分支;
5 )指定Dockerfile的位置,并提交创建。
之后,可以在DockerHub的“自动创建”页面中跟踪每次创建的状态
4.2 第三方镜像市场
国内不少云服务商都提供了Docker镜像市场包括daocloud、腾讯云、网易云、阿里云等。
4.2.1 daocloud
daocloud
- 查看镜像
访问https://hub.daocloud.io/
,即可看到"迈向 Docker 生态的第一步"的搜索界面,可以进行镜像搜索。以nginx为例:
- 下载镜像
下载镜像也是使用docker pull
命令,但是要在镜像名称前添加注册服务器的具体地址。格式为daocloud.io/<repository>/<IMAGE>:<tag>
。也可以直接使用网页给出的"拉取镜像“命令
例如,要下载Docker官方仓库中的nginx:1.12.0-alpine镜像,可以使用如下命令:
[root@dbc-server-554 docker]# docker pull daocloud.io/library/nginx:1.12.0-alpine
1.12.0-alpine: Pulling from library/nginx
ab14e39f58e6: Pull complete
b719aad0065e: Pull complete
193bc4296e28: Pull complete
30cf39878add: Pull complete
Digest: sha256:6a88bc1398333a1a508824c13cc214119510bf7d5898557640606d5edf5da244
Status: Downloaded newer image for daocloud.io/library/nginx:1.12.0-alpine
daocloud.io/library/nginx:1.12.0-alpine
由于下载的镜像名称太长了,使用不方便,打个tag
[root@dbc-server-554 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/nginx 1.12.0-alpine 09b2eb12555f 5 years ago 15.5MB
[root@dbc-server-554 docker]# docker tag daocloud.io/library/nginx:1.12.0-alpine nginx:1.12.0-apline
[root@dbc-server-554 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/nginx 1.12.0-alpine 09b2eb12555f 5 years ago 15.5MB
nginx 1.12.0-apline 09b2eb12555f 5 years ago 15.5MB
启动容器
[root@dbc-server-554 docker]# docker run -it nginx:1.12.0-apline /bin/sh
/ # cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
4.2.2 阿里云
阿里云
首先在网站创建自己的账号,登录阿里云,创建命名空间和镜像仓库
在本地进行登录
[root@dbc-server-554 docker]# docker login --username=*** registry.cn-beijing.aliyuncs.com
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
给镜像打tag
[root@dbc-server-554 docker]# docker tag 09b registry.cn-beijing.aliyuncs.com/docker-yurq/yurq:nginx-0.1
[root@dbc-server-554 docker]# docker images |grep nginx
192.168.5.54:5000/nginx test 09b2eb12555f 5 years ago 15.5MB
daocloud.io/library/nginx 1.12.0-alpine 09b2eb12555f 5 years ago 15.5MB
nginx 1.12.0-apline 09b2eb12555f 5 years ago 15.5MB
registry.cn-beijing.aliyuncs.com/docker-yurq/yurq nginx-0.1 09b2eb12555f 5 years ago 15.5MB
此处需要注意:阿里云上传命令docker tag [ImageId] registry.cn-beijing.aliyuncs.com/<命名空间>/<仓库名称>:[镜像版本号]
其中命名空间和仓库都是必填的,镜像版本号字段中不能有冒号:
,否则报错。我们只需要替换[imageId]和[镜像版本号]字段
上传镜像
[root@dbc-server-554 docker]# docker push registry.cn-beijing.aliyuncs.com/docker-yurq/yurq:nginx-0.1
The push refers to repository [registry.cn-beijing.aliyuncs.com/docker-yurq/yurq]
96c62e4b6ca4: Pushed
9854154a6906: Pushed
613b41d784fd: Pushed
040fd7841192: Pushed
nginx-0.1: digest: sha256:6a88bc1398333a1a508824c13cc214119510bf7d5898557640606d5edf5da244 size: 1153
可以使用镜像加速
网站截图
4.3 *搭建本地私有仓库
- 使用registry镜像创建私有仓库
安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:
[root@dbc-server-554 docker]# docker run -d -p 5000:5000 registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
ca7dd9ec2225: Pull complete
c41ae7ad2b39: Pull complete
1ed0fc8a6161: Pull complete
21df229223d2: Pull complete
626897ccab21: Pull complete
Digest: sha256:ce14a6258f37702ff3cd92232a6f5b81ace542d9f1631966999e9f7c1ee6ddba
Status: Downloaded newer image for registry:2
a26f308cf6228b1ee23f264d7f92ae8a750f1cd71a806df4c81a6788312bdcb1
这将自动下载井启动一个registry容器,创建本地的私有仓库服务。
默认情况下,仓库会被创建在容器的/var/lib/registry
目录下。可以通过-v
参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到/opt/data/registry
目录:
[root@dbc-server-554 docker]# docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2
89a7b82302637e9c67c5105b1894d69c4c6bf803b58bbd437f0d56a456887c26
此时,在本地将启动一个私有仓库服务,监听端口为5000。
- 管理私有仓库
首先在本地搭建私有仓库,查看其地址为192.168.5.54:5000
,然后在虚拟机系统(Centos7)里测试上传和下载镜像。
查看本地已有镜像:
[root@dbc-server-554 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2 81c944c2288b 2 months ago 24.1MB
nginx 1.12.0-apline 09b2eb12555f 5 years ago 15.5MB
daocloud.io/library/nginx 1.12.0-alpine 09b2eb12555f 5 years ago 15.5MB
使用docker tag
命令将nginx这个镜像标记为192.168.5.54:5000/nginx:test
[root@dbc-server-554 docker]# docker tag nginx:1.12.0-apline 192.168.5.54:5000/nginx:test
[root@dbc-server-554 docker]# docker images |grep nginx
daocloud.io/library/nginx 1.12.0-alpine 09b2eb12555f 5 years ago 15.5MB
nginx 1.12.0-apline 09b2eb12555f 5 years ago 15.5MB
192.168.5.54:5000/nginx test 09b2eb12555f 5 years ago 15.5MB
由于需要连接 docker registry,且不能用 ssl 连接,需要增加 insecure-registries 配置。
[root@dbc-server-554 system]# cat /etc/docker/daemon.json
{
"insecure-registries":["192.168.5.54:5000"]
}
使用docker push
上传标记的镜像:
[root@dbc-server-554 system]# docker push 192.168.5.54:5000/nginx:test
The push refers to repository [192.168.5.54:5000/nginx]
96c62e4b6ca4: Pushed
9854154a6906: Pushed
613b41d784fd: Pushed
040fd7841192: Pushed
test: digest: sha256:6a88bc1398333a1a508824c13cc214119510bf7d5898557640606d5edf5da244 size: 1153
[root@dbc-server-554 system]# curl http://192.168.5.54:5000/v2/_catalog
{"repositories":["nginx"]}
[root@dbc-server-554 system]# ll /opt/data/registry/docker/registry/v2/repositories/
total 0
drwxr-xr-x 5 root root 55 Jan 12 11:09 nginx
现在可以到任意一台能访问到192.168.5.54地址的机器去下载这个镜像了。