docker 搭建私有仓库

docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。本文内容基于 docker-registry v2.x 版本。

安装运行 docker-registry

  $ docker run -d -p 5000:5000 --restart=always --name registry registry

# docker run -d -p 5000:5000 --restart=always --name registry registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
81033e7c1d6a: Pull complete
b235084c2315: Pull complete
c692f3a6894b: Pull complete
ba2177f3a70e: Pull complete
a8d793620947: Pull complete
Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
Status: Downloaded newer image for registry:latest
f7f231cb61d1ab0716e60a85e69b64d19bfe099636dcc7d668f3c83f47244bf3

这将使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的
/var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。例
如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录。

# docker run -d \
> -p 5000:5000 \
> -v /opt/data/registry:/var/lib/registry \
> registry

在私有仓库上传、搜索、下载镜像

docker image ls查看已有镜像

# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
fandf-image-base 1.0 33761c640b6f 2 days ago 762MB
centos latest 2d194b392dd1 11 days ago 195MB
nginx latest e548f1a579cf 3 weeks ago 109MB
registry latest d1fd7d86a825 2 months ago 33.3MB
mysql 5.6.38 15a5ee56ec55 2 months ago 299MB
hello-world latest f2a91732366c 3 months ago 1.85kB
centos 7.4.1708 3afd47092a0e 4 months ago 197MB
java latest d23bdf5b1b1b 14 months ago 643MB

使用 docker tag 将 centos:7.4.1708 这个镜像标记为 127.0.0.1:5000/centos:7.4.1708

格式为 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

# docker tag centos:7.4.1708 127.0.0.1:5000/centos:7.4.1708
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fandf-image-base 1.0 33761c640b6f 2 days ago 762MB
centos latest 2d194b392dd1 11 days ago 195MB
nginx latest e548f1a579cf 3 weeks ago 109MB
registry latest d1fd7d86a825 2 months ago 33.3MB
mysql 5.6.38 15a5ee56ec55 2 months ago 299MB
hello-world latest f2a91732366c 3 months ago 1.85kB
127.0.0.1:5000/centos 7.4.1708 3afd47092a0e 4 months ago 197MB
centos 7.4.1708 3afd47092a0e 4 months ago 197MB
java latest d23bdf5b1b1b 14 months ago 643MB

上传镜像

# docker push 127.0.0.1:5000/centos:7.4.1708
The push refers to repository [127.0.0.1:5000/centos]
129b697f70e9: Pushed
7.4.1708: digest: sha256:834aba7fdd53f4e622a8d636dcd549a83e86a22efad0246bf9438e4655b888ef size: 529

用 curl 查看仓库中的镜像

# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["centos"]}

先删除已有镜像,再尝试从私有仓库中下载这个镜像

# docker image rm 127.0.0.1:5000/centos:7.4.1708
Untagged: 127.0.0.1:5000/centos:7.4.1708
Untagged: 127.0.0.1:5000/centos@sha256:834aba7fdd53f4e622a8d636dcd549a83e86a22efad0246bf9438e4655b888ef
[root@localhost ~]# docker pull 127.0.0.1:5000/centos:7.4.1708
7.4.1708: Pulling from centos
Digest: sha256:834aba7fdd53f4e622a8d636dcd549a83e86a22efad0246bf9438e4655b888ef
Status: Downloaded newer image for 127.0.0.1:5000/centos:7.4.1708
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
fandf-image-base 1.0 33761c640b6f 2 days ago 762MB
centos latest 2d194b392dd1 11 days ago 195MB
nginx latest e548f1a579cf 3 weeks ago 109MB
registry latest d1fd7d86a825 2 months ago 33.3MB
mysql 5.6.38 15a5ee56ec55 2 months ago 299MB
hello-world latest f2a91732366c 3 months ago 1.85kB
127.0.0.1:5000/centos 7.4.1708 3afd47092a0e 4 months ago 197MB
centos 7.4.1708 3afd47092a0e 4 months ago 197MB
java latest d23bdf5b1b1b 14 months ago 643MB

私有仓库高级设置

新建文件夹,以下操作均在该文件夹下进行

第一步:创建ca私钥

# openssl genrsa -out "root-ca.key" 4096
Generating RSA private key, 4096 bit long modulus
.................................++
...............................................................................++
e is 65537 (0x10001)
[root@localhost fandf]#

第二步:利用私钥创建 CA 根证书请求文件

# openssl req \
> -new -key "root-ca.key" \
> -out "root-ca.csr" -sha256 \
> -subj '/C=CN/ST=Shanxi/L=xianyang/O=dongfeng/CN=dongfeng Docker Registry CA'

以上命令中 -subj 参数里的 /C 表示国家,如 CN ; /ST 表示省; /L 表示城市或者地区; /O 表示组织名; /CN 通用名称

第三步:配置 CA 根证书,新建 root-ca.cnf

[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

第四步:签发根证书

# openssl x509 -req -days 3650 -in "root-ca.csr" \
> -signkey "root-ca.key" -sha256 -out "root-ca.crt" \
> -extfile "root-ca.cnf" -extensions \
> root_ca
Signature ok
subject=/C=CN/ST=Shanxi/L=xianyang/O=dongfeng/CN=dongfeng Docker Registry CA
Getting Private key
[root@localhost fandf]#

第五步:生成站点 SSL 私钥

# openssl genrsa -out "docker.domain.com.key" 4096
Generating RSA private key, 4096 bit long modulus
...........................................................................................++
........................................++
e is 65537 (0x10001)
[root@localhost fandf]#

第六步:使用私钥生成证书请求文件

# openssl req -new -key "docker.domain.com.key" -out "site.csr" -sha256 \
> -subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=docker.domain.com'
[root@localhost fandf]#

第七步:配置证书,新建 site.cnf 文件

[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:docker.domain.com, IP:127.0.0.1
subjectKeyIdentifier=hash

第八步:签署站点 SSL 证书

# openssl x509 -req -days 750 -in "site.csr" -sha256 \
> -CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial \
> -out "docker.domain.com.crt" -extfile "site.cnf" -extensions server
Signature ok
subject=/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=docker.domain.com
Getting CA Private Key
[root@localhost fandf]#

这样已经拥有了 docker.domain.com 的网站 SSL 私钥 docker.domain.com.key 和 SSL 证书 docker.domain.com.crt 。
新建 ssl 文件夹并将 docker.domain.com.key docker.domain.com.crt 这两个文件移入,删除其他文件。

私有仓库默认的配置文件位于 /etc/docker/registry/config.yml ,我们先在本地编辑
config.yml ,之后挂载到容器中。

version: 0.1
log:
accesslog:
disabled: true
level: debug
formatter: text
fields:
service: registry
environment: staging
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
auth:
htpasswd:
realm: basic-realm
path: /etc/docker/registry/auth/nginx.htpasswd
http:
addr: :443
host: https://docker.domain.com
headers:
X-Content-Type-Options: [nosniff]
http2:
disabled: false
tls:
certificate: /etc/docker/registry/ssl/docker.domain.com.crt
key: /etc/docker/registry/ssl/docker.domain.com.key
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3

生成 http 认证文件

mkdir auth
$ docker run --rm \
--entrypoint htpasswd \
registry \
-Bbn username password > auth/nginx.htpasswd

将上面的 username password 替换为你自己的用户名和密码

编辑 docker-compose.yml

version: '3'

services:
registry:
image: registry
ports:
- "443:443"
volumes:
- ./:/etc/docker/registry
- registry-data:/var/lib/registry
volumes:
registry-data:

修改 hosts

docker.domain.com 127.0.0.1

启动

docker-compose up -d

docker学习笔记(3)的更多相关文章

  1. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  2. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  3. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  4. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  5. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  6. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  7. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  8. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  9. docker学习笔记-1

    docker学习笔记一:安装 mac安装docker docker官方文档上有这么一段话: Because the Docker daemon uses Linux-specific kernel f ...

  10. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

随机推荐

  1. mac os x 编译spark-2.1.0 for hadoop-2.7.3

    mac os x maven编译spark-2.1.0  for hadoop-2.7.3 1.官方文档中要求安装Maven 3.3.9+ 和Java 8 ; 2.执行         export ...

  2. 【XAF问题】层层分级,如何让按钮显示指定的视图

    一.问题 1. 层层分级,如何让按钮显示指定的视图 二.解决方法 解决方法:因为它是层层级别的,不能显示出来指定的视图,需要添加ActionContainer,才可以显示出来

  3. WCF:一个棘手的问题

    前言 在做即时通信项目时,手上另一个项目的颠簸,即时通信项目一直是改改停停的,一些改动比较小,没有即时的签入,然后一段时间本地的项目代码与源代码存在不少区别,在这种情况下,因为新的需求添加,需要给WC ...

  4. OO的奇妙冒险1

    OO的奇妙冒险 ~OOP入门与字符串处理~ 目录 总体分析 作业内容分析 作业内容总结 互测的收获 公测互测bug分析与总结 不太正经的个人自嗨 总体分析 公测 中测(基础与进阶): 其实在我看来,从 ...

  5. zzw原创_非root用户下安装nginx

    想自己安装nginx,又不相用到root用户. 非root用户下(本文为用户bdctool)来ngnix安装,要依赖pcre库.zlib库等, 1. 下载依赖包:下载地址 pcre(www.pcre. ...

  6. 微信公众号开发加密解密异常java.security.InvalidKeyException:illegal Key Size

    完美解决: http://blog.csdn.net/u013628152/article/details/46785173

  7. (05) SpringBoot开发RESTFull?

    1. 什么是RESTFull? RESTFull 一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层 ...

  8. pytest pluggy.manager.PluginValidationError: unknown hook 'pytest_namespace'报错处理办法

    一.背景说明 上周测试的同事说pytest+allure环境在别人电脑上跑没问题,在她的环境跑却报错让帮看一下.其实pytest只是听说过allure直接没听过,但不能直接表示不会,祭出百度大法. 看 ...

  9. FastCGI 进程意外退出造成500错误

    在一台新服务器上,安装新网站,之前只放至了一个网站.是服务器商配置好的,非集成环境. 添加了一个新站,路径都制定好了,但是在访问时出现了500错误.提示貌似是php的问题,但是之前的网站,运行的是di ...

  10. spyder中让生成的图像单独在窗口中显示

    IPython 支持两种形式的绘图 终端输出图像新窗口输出图像方式 1 能够非常方便的保存输出记录(如将`IPython 终端输出转换成 Html 文件) 方式 2 则可以交互式的放大.拖动图片,并且 ...