Docker Registry 安装和使用

前言

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项目

测试

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

时间: 2024-08-25 16:33:39

Docker Registry 安装和使用的相关文章

docker registry 安装步骤

实验环境 192.168.30.95  //registry server 192.168.30.96  //docker client 操作系统  centos 7.2 //-----------------------------------registry server $ docker run -d -p 5000:5000 --restart=always --name registry registry:2 $ docker pull ubuntu:16.04 $ docker ta

基于docker registry镜像安装私服docker hub

采用docker registry镜像安装docker私服,通过https://hub.docker.com/_/registry链接搜索registry镜像 1.输入命令:docker pull registry,安装版本最新的registry镜像: 2.需要在docker配置文件中配置insecure-registeries信息,如下图所示.其中daemon.json文件在/etc/docker目录下面,registry镜像安装的机器是192.168.20.34,对应的端口是5000. 重启

Docker Compose安装Registry后配置WebUI与客户端

场景 Docker 私服Registry简介与使用Docker-Compose安装Registry: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101567542 在上面安装Registry后配置其客户端以及Web UI. 注: 博客:https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿获取编程相关电子书.教程推送与免费下载. 实现 配置客户端使其能识别Registr

部署内网Docker Registry

目前docker 已经分为社区版 (docker CE)和 商业版(docker EE),最新的版本由原来的1.13直接跳到了17.06,目前由于17.06的刚刚发布,在使用Docker 的时候可以根据自己的需求选择相应的版本. Docker 安装 先移除其他非官方的版本: yum -y remove docker docker-common container-selinux yum -y remove docker-selinux 添加yum源,这里选择1.13的版本: yum instal

使用harbor配置docker registry

前面连说了几篇与kubernetes相关的内容,这篇我们来说说docker registry.docker的registry与kubernetes本身并没有太直接的关系.但是任何使用到docker的地方,总少不了这玩艺儿.所以这篇博文我们专门来说一说如何使用开源的harbor来配置管理我们的私有registry. harbor官方是这么描述harbor的:Harbor是可靠的企业级Registry服务器.企业用户可使用Harbor搭建私有容器Registry服务,提高生产效率和安全度,既可应用于

在CentOS 6上搭建私有的Docker Registry

在CentOS 6上搭建私有的Docker Registry v2Registry概念Registry是一个无状态的, 高可扩展的服务器端应用程序, 用于存储和分发Docker Image.依赖安装1. 安装Docker要使用Docker Registry, 当然首先要安装Docker. 假设你已经安装好Docker. 没有安装好可以参考官方文档.2. 安装Docker-composeDocker-compose是一个非常有用的Docker运行, 管理的工具. 你可以通过定义compose文件,

docker registry v2 nginx

Docker registry V2 nginx 搭建 一 环境 俩台centos 7 64位 Docker 版本 Client: Version:      1.8.2 API version:  1.20 Package Version: docker-1.8.2-7.el7.centos.x86_64 Go version:   go1.4.2 Git commit:   bb472f0/1.8.2 Built: OS/Arch:      linux/amd64 Server: Vers

Docker Registry V2(distribution) & Proxy(nginx) 的搭建经历

Docker Registry V2 问世后,简单实用的确不错,不过等将端口5000更改成其他后,或者使用域名绑定后就错误百出.这里详细的将自己的经历过程做一个记录. 一.Docker Registry V2(distribution) 的安装. 这里我选择了使用官方提供的镜像去进行安装,也许你会感觉这很EASY,不屑一顾.不过,对一个运维人员来说,注重的是应用,注重的是registry中的镜像.而不是注重花哨的搭建过程.而我们注重的,registry 镜像都能满足我们的需求. # docke 

centos7 docker registry push错误“server gave HTTP response to HTTPS client”

系统环境:centos7 docker版本: 1.12.3(注意版本,可能存在不同版本设置不同的情况) docker registry版本:2.4.1 问题: 成功安装docker registry,在浏览器中输入http://192.168.1.100:5000/v2,成功返回json数据.在push 到docker registry时,报: [[email protected] sysconfig]# docker push 192.168.1.100:5000/registry:2.4.1