博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建docker 私有镜像仓库
阅读量:5917 次
发布时间:2019-06-19

本文共 3326 字,大约阅读时间需要 11 分钟。

前期准备

  • 服务器:centos 7.3
  • docker-ce: 18.06.1-ce
  • docker-compose: 1.22.0

docker 安装

首先,更新系统

yum update    yum upgrade

然后执行安装脚本

#!/bin/sh#添加docker安装源sudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo #执行安装命令sudo yum install -y docker-ce#添加docker用户组sudo groupadd docker#将当前用户加入docekr用户组sudo gpasswd -a $USER docker#更新用户组newgrp docker#修改serivce配置sudo cp docker.service /lib/systemd/system/#配置文件需要手动修改sudo cp docker.conf /etc/default/sudo systemctl enable docker.servicesudo systemctl daemon-reload#启动docker服务sudo systemctl start docker

将上面的命令保存到docker-install.sh, 然后执行

sudo -E sh docker-install.sh

进行安装。

docker-compose 安装

执行以下命令安装:

#安装pipsudo yum -y install epel-releasesudo yum -y install python-pip#安装docker-composesudo pip install --upgrade pipsudo pip install docker-compose --ignore-installed requests

准备加密证书

我们假设repository的域名为registry.domain.com

生成repository仓库https证书

1. 准备根证书

openssl req -newkey rsa:2048 -nodes -sha256 -keyout certs/ca.key -x509 -days 365 -out certs/ca.crt

执行以上命令,生成证书,Common Name那里要输入我们registry的域名,生成的证书只对该域名有效。其他的可以任意填,生成后可以在certs目录下查看到证书。

2. 签发服务证书

cd certs    openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -out domain.csr      openssl x509 -req -days 365 -in domain.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out domain.crt

生成的domain.crt就是公钥证书,ca.crt 是根证书。我们要把ca.crt交付给docker client端,这样客户端才能校验仓库服务器的身份。

3. 客户端校验文件生成

在客户端校验仓库服务的同时,仓库服务也要校验客户端的身份和权限

mkdir auth    docker run --entrypoint htpasswd registry:2 -Bbn username password  > auth/htpasswd

username和password请自行替换为自己想设定的用户名和密码。

最终docker repository根文件夹的目录结构如下:
目录结构

启动私有仓库

编写docker-compose file

将如下的配置保存为registry.yaml文件:

version: '3.2'services:  registry:    image: "registry:2"    container_name: repo_local_network    environment:      - REGISTRY_AUTH=htpasswd      - REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd      - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt      - REGISTRY_HTTP_TLS_KEY=/certs/domain.key    ports:      - ${RPO_PORT}:5000    volumes:      - ${ROOT_PATH}/lib:/var/lib/registry      - ${ROOT_PATH}/certs:/certs      - ${ROOT_PATH}/auth:/auth

放置在dockerenv目录下,同时在dockerenv目录下编写环境变量文件.env

RPO_PORT=443ROOT_PATH=/opt/docker

ROOT_PATH 根据实际情况修改,RPO_PORT不要去修改,否则会有问题。

启动容器

执行以下命令启动仓库容器:

cd dockerenv    docker-compose -f registry.yaml up --force-recreate -d

客户端注册和测试

添加仓库CA证书

mkdir -p /etc/docker/certs.d/registry.domain.com    cp  ca.crt /etc/docker/certs.d/registry.domain.com

ca.crt就是我们用来颁发仓库服务证书的自签名证书,重启客户端docker服务。

添加服务器地址(可选)

在/etc/hosts中添加服务器地址:

172.168.170.201 registry.domain.com

如果你的服务器域名是可以通过dns解析的话就不需要这个步骤

身份认证

docker login -u username -p passwd registry.domain.com

如果一切正常会有如下提示:

WARNING! Your password will be stored unencrypted in /home/whty0/.docker/config.json.

Configure a credential helper to remove this warning. See
Login Succeeded

测试仓库(optional)

docker pull busybox    docker tag busybox:latest registry.domain.com/busybox:latest    docker push  registry.domain.com/busybox:latest

如果成功的话会有如下提示:

The push refers to repository [registry.domain.com/busybox]

f9d9e4e6e2f0: Pushed
latest: digest: sha256:5e8e0509e829bb8f990249135a36e81a3ecbe94294e7a185cc14616e5fad96bd size: 527

参考网址

转载于:https://www.cnblogs.com/cnblogs-wangzhipeng/p/9603971.html

你可能感兴趣的文章
如何让代码可测试化(C#)
查看>>
LINQ 学习笔记
查看>>
WinSock学习笔记3:Select模型
查看>>
数据库的架构和对象
查看>>
FUHLEN/富勒 U79/U79G节能系列/U系列无线2.4G接收器-淘宝网
查看>>
关于网站favicon.ico
查看>>
PLSQL中INDEX BY TABLE 的 prior 和 next 操作学习
查看>>
python 抽象类、抽象方法的实现
查看>>
Linux的nm查看动态和静态库中的符号
查看>>
最小费用最大流
查看>>
iPhone 5/iOS 6 前端开发指南
查看>>
Java IO 装饰者模式
查看>>
Python深入05 装饰器
查看>>
java学习:日期的运算
查看>>
小菜的程序员道路(一)
查看>>
Android学习笔记27:网格视图GridView的使用
查看>>
21.8.3. C API Function Descriptions
查看>>
比亚迪速锐F3专用夏季座套 夏天坐垫 四季坐套
查看>>
读<海底捞店长日记>
查看>>
fzu校赛B题
查看>>