码迷,mamicode.com
首页 > 其他好文 > 详细

Docker Registry 安装和使用

时间:2018-12-13 21:17:21      阅读:1585      评论:0      收藏:0      [点我收藏+]

标签:直接   数据存储   通过   仓库   tps   start   将不   1.2   insecure   

 

前言

Docker Hub公共镜像市场

目前Docker官方维护了一个公共镜像仓库https://hub.docker.com,其中已经包括超过15000的镜像。大部分镜像需求,都可以通过在Docker Hub中直接下载镜像来实现。

Docker Registry私有仓库

公共仓库有很多镜像,但下载速度就那样,而且公共镜像缺乏个性化和实用性,毕竟每个公司得项目需求不一样。这样就可以自建一个Docker Registry。优点很明显,自建仓库很多都是局域网内吗,上传下载速度很快,安全性高。

Docker Registry有三个角色,分别是index、registry和registry client。

角色 1 -- Index 

index负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。它使用以下组件维护这些信息:

  • Web UI
  • 元数据存储
  • 认证服务
  • 符号化

角色 2 --Registry

registry是镜像和图表的仓库。然而,它没有一个本地数据库,也不提供用户的身份认证,由S3、云文件和本地文件系统提供数据库支持。此外,通过Index Auth service的Token方式进行身份认证。

角色 3 --Registry Client

Docker充当registry客户端来负责维护推送和拉取的任务,以及客户端的授权。

实验环境:

docker registry:192.168.1.201

docker clinent:192.168.1.200

首先保证两台宿主机上都已安装docker

技术分享图片

 

安装

1:docker hub 公共镜像中有 registry 的镜像,直接从docker hub拉取。此操作在192.168.1.201上执行

1 mkdir /registry
2 docker run -p 5000:5000  --restart=always --name registry -v /registry/:/var/lib/registry -d registry

注:registry容器启动时,会在容器内/var/lib/下面创建一个registry目录,用于存储作为私有仓库接受docker client 上传的镜像。-v:将宿主机/registry/目录挂载到容器内/var/lib/registry目录。

--restart 容器重启方式

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  •   on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

2:验证私有仓库是否搭建成功,使用浏览器访问192.168.1.201:5000/v2/

 技术分享图片

界面显示{},表示docker registry搭建成功

使用

实验目的:将上文档中的wordpress项目上传至私有仓库,在192.168.1.201中运行。

上篇文档中使用docker-compose创建了两个容器mariadb和wordpress ,宿主机为192.168.1.200,这里使用这两个容器作为实验对象。

技术分享图片

1:首先将两台实验机hosts解析。

1 cat >>/etc/hosts <<EOF
2 192.168.1.201 hub.com
3 EOF

注:registry和client都要解析。

2:添加认证方式。

docker registry  老版本可以使用http认证,但新版本很早就取消,不提供认证,但是又需要https认证才能实现上传和下载。可以借助nginx ssl 认证。这里先使用强制使用http方式认证。

 cat >>/etc/docker/daemon.json<<EOF
 {
     "registry-mirrors": [
         "http://68cdf6cf.m.daocloud.io"
     ],
     "insecure-registries":["Registry:81"]
 }
 EOF

注:registry和client都要配置,配置完后需要重启docker,再启动registry。

技术分享图片

 

3:提交镜像。

docker镜像命名格式为:提交者/镜像名:版本号

例如:Danny/wordpress:1.0  表示这个镜像由Danny用户创建,如果没有用户名,默认为Docker hub 官方创建,名称为wordpress,版本号为1.0。如果没有版本号,默认为最新版。  

提交用户必须和私有仓库IP:port,可以做hosts解析,不然会提交失败。

例如:你的仓库ip为192.168.1.201,registry映射到宿主机上的端口为5000,镜像名为nginx,你的client提交镜像须为:192.168.1.201:5000/nginx

现在将已存储数据的wordpress项目提交为hub.com用户的镜像。

技术分享图片

现有wordpress项目mariadb数据库又数据:用户名,密码,页面等等数据。

1:查看正在运行的容器

技术分享图片

 2:提交当前运行项目为新的镜像。

docker commit wordpress_wordpress_1 hub.com:5000/wordpress:1.0
docker commit wordpress_db_1 hub.com:5000/db:1.0

技术分享图片

3:上传镜像到私有仓库

docker push hub.com:5000/db:1.0
docker push hub.com:5000/wordpress:1.0

技术分享图片

4:查看私有仓库镜像,用浏览器访问http://192.168.1.201:5000/v2/_catalog

技术分享图片

 

 可以看到有db,wordpress两个镜像。

5:从私有仓库拉取镜像并启动容器,这里我们还是使用docker-compose启动容器。详情请看上一篇文章。

docker-compose配置文件

wordpress:
  image:
      hub.com:5000/wordpress:1.0
  links:
    - db:mysql
  ports:
    - 80:80
db:
  image:
      hub.com:5000/db:1.0
  environment:
     MYSQL_ROOT_PASSWORD: 123456
  volumes:
    - /docker/db/:/var/lib/mysql

技术分享图片

6:测试是否下载并启动成功。

技术分享图片

问题来了

我是用的镜像是有数据的镜像commit后的镜像,按理界面因该是我配置好的wordpress界面。现在还是没有数据,说明commit没有把mariadb的数据提交到新的镜像内。

为此我去查了文档:

发现docker默认使用的是文件系统。特征:它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。链接:https://docs.docker.com/storage/volumes/

然后我又去查看了docker commit 官方文档,发现提交操作将不包括容器内安装的卷中包含的任何数据。链接:https://docs.docker.com/engine/reference/commandline/commit/#options

就只有一种可能,就是容器内的mariadb数据存储的目录是以挂载卷方式挂载的。

通过 docker inspect wordpress_db_1 查看到"Mounts"中有如下信息:

技术分享图片

我将宿主机/docker-compose/mysql/目录挂载到容器内的/var/lib/mysql,存储数据全部写到挂载宿主机目录下。

如果我启动不挂载目录的话,他还是将宿主机的目录挂载到容器内用于保存数据存储目录中。

技术分享图片

到这里,原因知道了。

192.168.1.200数据库是挂载到宿主机上的,我把它拷到192.168.1.201挂载的目录上应该就行了吧。

192.168.1.201:关闭wordpress和mariadb

技术分享图片

192.168.1.200:将数据库挂载目录中文件scp到192.168.1.201数据库挂载目录。

技术分享图片

然后启动192.168.1.201的wordpress项目

技术分享图片

测试

技术分享图片

 

Docker Registry 安装和使用

标签:直接   数据存储   通过   仓库   tps   start   将不   1.2   insecure   

原文地址:https://www.cnblogs.com/big-cousin/p/10116396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!