现在的位置: 首页 > 云计算 > Docker > 正文
docker容器技术系列七:构建和使用私有docker镜像仓库
2015年11月13日 Docker ⁄ 共 2319字 暂无评论 ⁄ 被围观 4,039 views+

前几篇文章我们使用docker镜像时,我们都用的是官方镜像仓库,要在机器之间共享共享镜像也使用的是导出再导入实现的,这在企业内部大规模使用的便捷性不服。在第一篇《docker容器技术系列一:基本概念》我们就讲到了docker镜像仓库有两种,公开仓库和私有仓库,这跟我们使用yum仓库一样。

本文将描述如何构建一个无需认证的私有仓库。我这里暂不讨论需要登录或者ssl加密传输的私有仓库(当然要实现也很简单,为仓库增加nginx反向代理,然后在nginx中实现认证和ssl加密)。

那你可能要问了,无需认证、也不加密的私有仓库安全如何保障呢?

  1. 既然是私有仓库,那仓库必然只提供给内部指定的服务器或用户访问,我们可以通过iptables实现安全控制;
  2. 镜像是只读模板,存放的仅仅是相关应用运行所需环境(如java、php等),因此即使被非法使用,问题也不大;
  3. 当然为了保证镜像的完整性,我们可以加入哈希校验机制。

下面就具体介绍如何构建一个私有docker镜像仓库:

1、建立私有仓库

docker的思想就是一切容器化,当然仓库也一样,因此我们仅需用如下命令即可运行一个本地私有仓库registry:

# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

# 注:/opt/data/registry目录需要在本地提前创建

image

你没有看错,也没有听错,一个私有仓库registry就这么简单的建立起来了……

当然,官方也提供了源码安装、RPM本地安装等方式,有兴趣的可以去尝试。但本人完全不推荐,因为用这些方法进行本地化安装既不符合docker一切容器化的思想,运维又复杂,且稳定性还没有足够的保障。

2、使用私有仓库

要使用私有仓库,需要满足两个条件:

  • 在docker服务启动选项中增加本地仓库信息
  • 修改镜像tag,使其指向本地私有仓库

2.1 为docker服务增加本地私有仓库信息

我这里的私有仓库registry地址为node01:5000,其中node01为仓库服务器的主机名(已做DNS或hosts解析,否则就需要用IP地址),5000为端口号。

CentOS系列:

打开/etc/sysconfig/docker,找到OPTIONS这一行,取消注释并修改如下:

OPTIONS='--selinux-enabled --insecure-registry=node01:5000'

Ubuntu系列:

# echo "DOCKER_OPTS='--insecure-registry node01:5000'">>/etc/default/docker

重启docker服务生效。

*注意:这部分的配置网上很多资料描述都是错误的,导致pull时会出现如下这样的错误:

[root@node02 sysconfig]# docker pull node01:5000/nginx
Using default tag: latest
Trying to pull repository node01:5000/nginx ... failed
unable to ping registry endpoint https://node01:5000/v0/
v2 ping attempt failed with error: Get https://node01:5000/v2/: EOF
v1 ping attempt failed with error: Get https://node01:5000/v1/_ping: EOF

或者这样:

root@node04:~# service docker.io restart
docker.io stop/waiting
docker.io start/running, process 4312
root@node04:~# docker ps
2015/11/13 12:06:06 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

是不是也很简单呢?其实docker的出现就是为了简化我们运维的工作和提供效率的。

2.2 提交本地镜像到私有docker仓库

提交镜像到私有docker仓库前,需要修改镜像的tag,方法如下:

# docker tag 66f3b07798c2 node01:5000/centos:sshd

image

然后我们就可以将这个镜像push到私有仓库了:

# docker push node01:5000/centos:sshd

命令执行后就按镜像的层分别上传到仓库了,如下图:

image

上传成功后,就可以在启动主机去获取了镜像了。上传后仓库的目录也发生了相应的变化:

image

2.3 从私有docker仓库获取镜像

本地私有docker仓库没有好的搜索功能,只能通过如下的办法进行简单搜索:

查看私有仓库所有镜像:

# curl -X GET  http://node01:5000/v1/search

根据镜像名查看:

# curl -X GET  http://node01:5000/v1/search?q=nginx

效果如下:

image

可以从结果看到镜像数量和镜像名称,如上划红线的地方。

获取本地私有docker仓库中的镜像:

# docker  pull node01:5000/centos:sshd

image

3、私有仓库的其他事宜:

3.1镜像的删除

目前的私有仓库registry不支持删除镜像,等待官方新版本的registry吧!!

3.2 仓库的备份与恢复

直接定期备份/opt/data/registry,恢复是直接挂在到docker-registry镜像下启动即可。

OK,至此,私有仓库相关就介绍完了。后面我们将继续讲解docker安全机制、docker云等相关知识。

给我留言

留言无头像?


×