05 Docker 私有仓库

概念关系

注册服务器(Registry)和仓库(Repository)概念的区别:注册服务器是存放仓库的实际服务器,而仓库则可以被理解为一个具体的项目或者目录;注册服务器可以包含多个仓库,而每个仓库又可以包含多个镜像。
举例:镜像地址为 docker.io/centos,docker.io 是注册服务器,centos 是仓库名。

注册服务器、仓库和镜像关系

公共镜像仓库

公共镜像仓库一般是 Docker 官方或者其他第三方组织(阿里云,腾讯云,网易云等)提供的,允许所有人注册和使用的镜像仓库。可以进入 Docker Hub 官网注册账号并创建仓库,然后通过 docker login 默认命令请求登录 Docker Hub。

$ 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: mydocker
Password:
Login Succeeded

私有镜像仓库

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把该镜像下载下来,运行容器并暴露 5000 端口,默认访问地址为 localhost

$ docker run -d -p 5000:5000 --name registry registry:2.7
Unable to find image 'registry:2.7' locally
2.7: Pulling from library/registry
cbdbe7a5bc2a: Pull complete
47112e65547d: Pull complete
46bcb632e506: Pull complete
c1cc712bcecd: Pull complete
3db6272dcbfa: Pull complete
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:2.7
d7e449a8a93e71c9a7d99c67470bd7e7a723eee5ae97b3f7a2a8a1cf25982cc3

推送镜像

在本地镜像推送到自定义仓库前,我们需要先把镜像 "重命名" 一下,才能正确推送到自己创建的镜像仓库中,使用 docker tag 命令将镜像 "重命名",然后通过 docker push 命令推送镜像到本地仓库中:

$ docker tag busybox localhost:5000/busybox

$ docker push localhost:5000/busybox

持久化镜像存储

容器是无状态的,而私有仓库的启动方式可能会导致镜像丢失,因为我们并没有把仓库的数据信息持久化到主机磁盘上,当然还支持其他多种存储类型。
下面我们可以使用以下命令将镜像持久化到主机目录,保证容器被重建后数据不丢失:

### -v参数冒号前面为主机目录,冒号后面为容器内目录
$ docker run -v /var/lib/registry/data:/var/lib/registry -d -p 5000:5000 --name registry registry:2.7

构建可外访的镜像仓库

Docker 要求非 localhost 访问的镜像仓库必须使用 HTTPS 或者配置 insecure-registry,否则在另一台机器上是无法直接访问到本地镜像仓库的,在这说明下如何构建一个支持 HTTPS 访问的安全镜像仓库:
● 拥有一个合法的域名,并且可以正确解析到镜像服务器;
● 从证书颁发机构(CA)获取一个证书。

命令说明:域名为 regisry.mydocker.io,把主机上的证书文件挂载到了容器的 /certs 目录下,同时通过 -e 参数设置 HTTPS 相关的环境变量参数,最后让仓库在主机上监听 443 端口。

$ docker run -d \
  --name registry \
  -v "/var/lib/registry/data:/var/lib/registry \
  -v "/var/lib/registry/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/regisry.mydocker.io.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/regisry.mydocker.io.key \
  -p 443:443 \
  registry:2.7

### 远程主机推送镜像
$ docker tag busybox regisry.mydocker.io/busybox
$ docker push regisry.mydocker.io/busybox

私有仓库进阶

Docker 官方开源的镜像仓库仅满足了镜像存储和管理的功能,用户权限管理相对较弱,并且缺少管理界面;此处推荐一个基于 Distribution 项目开发的一款企业级镜像管理软件为 Harbor,拥有 RBAC(基于角色的访问控制)、管理用户界面以及审计等非常完善的功能。

你可能感兴趣的:(05 Docker 私有仓库)