技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页Docker>正文
搭建Docker本地私有镜像仓库
2021年10月27日 Docker 暂无评论 ⁄ 被围观 8,753次+

在使用Docker service create创建容器时,Docker首先默认从Docker Hub官方去下载镜像,这很不方便,很多时候我们的镜像都是使用Dockerfile自定义私有镜像,不对外公开,而且为了安全期间docker可能在内外环境下运行,所以我们有必要搭建一套docker本地私有镜像仓库,以供整个内外集群环境使用。

下面我们使用docker官方提供的registry镜像搭建私有仓库

一、搭建非https访问的私有镜像仓库

#私有镜像仓库服务器ip和对应域名,集群内所有服务器都提前做好解析

vi /etc/hosts #添加以下解析

192.168.21.8 hub.osyunwei.com

:wq! #保存退出

#下载镜像

docker pull registry:latest

#创建镜像挂载目录

mkdir -p /docker/data/registry

#创建容器

docker run -d -p 5000:5000 --name registry --restart always -v /docker/data/registry:/var/lib/registry registry:latest

参数说明:

-p 5000:5000 #端口映射,前面是宿主机:后面是容器内

--name registry #容器名称

--restart always #宿主机重启后容器自启动

-v /docker/data/registry:/var/lib/registry #目录映射,容器被删除后仓库内的镜像不会丢失,默认情况下仓库在容器内的/var/lib/registry目录下

registry:lates #使用的镜像名称

#查看启动的容器

docker ps -a

#默认Docker只支持https的地址,为了使用http协议的地址,集群内所有的服务器需要把私有仓库地址添加到daemon.json文件中

#在daemon.json文件中添加私有镜像仓库地址,注意要用逗号连接

cp /etc/docker/daemon.json /etc/docker/daemon.json-bak

vi /etc/docker/daemon.json

{

"insecure-registries": ["hub.osyunwei.com:5000"],

"registry-mirrors": ["https://t1fyrekt.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com/"]

}

:wq! #保存退出

#重启docker服务

systemctl restart docker.service

#如果不对私有仓库命名的话,docker默认访问的是官方仓库docker hub

#私有仓库镜像的命名规则:宿主机ip地址或域名:端口号/镜像名:版本

#修改镜像标签

docker tag nginx:1.20.1 hub.osyunwei.com:5000/nginx:1.20.1

docker tag php-fpm:8.0.11 hub.osyunwei.com:5000/php-fpm:8.0.11

docker tag mysql:v8.0.26 hub.osyunwei.com:5000/mysql:v8.0.26

#上传镜像

docker push hub.osyunwei.com:5000/nginx:1.20.1

docker push hub.osyunwei.com:5000/php-fpm:8.0.11

docker push hub.osyunwei.com:5000/mysql:v8.0.26

#列出私有仓库的所有镜像

curl -X GET http://hub.osyunwei.com:5000/v2/_catalog

#集群内其他服务器下载镜像

docker pull hub.osyunwei.com:5000/nginx:1.20.1

docker pull hub.osyunwei.com:5000/php-fpm:8.0.11

docker pull hub.osyunwei.com:5000/mysql:v8.0.26

二、搭建https访问的私有镜像仓库

#私有镜像仓库服务器ip和对应域名,集群内所有服务器都提前做好解析

1、创建相关目录

vi /etc/hosts #添加以下解析

192.168.21.8 hub.osyunwei.com

:wq! #保存退出

#下载镜像

docker pull registry:latest

#创建镜像挂载目录

mkdir -p /docker/data/registry

#创建证书存放文件夹

mkdir -p /docker/data/registry/certs

#创建存储鉴权密码文件目录

mkdir -p /docker/data/registry/auth

2、给域名hub.osyunwei.com签发证书,我们使用openssl工具

#服务器要先安装好openssl

yum install -y openssl openssl-devel

#生成自签名证书文件

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /docker/data/registry/certs/hub.osyunwei.com.key -x509 -days 3650 -out /docker/data/registry/certs/hub.osyunwei.com.crt -subj "/C=CN/ST=Shannxi /L=Xian/O=osyunwei/OU=osyunwei/CN=hub.osyunwei.com/emailAddress=vip@osyunwei.com"

参数说明:

openssl req:创建证书签名请求等功能

-newkey:创建CSR证书签名文件和RSA私钥文件

rsa:2048:指定创建的RSA私钥长度为2048

-nodes:对私钥不进行加密

-sha256:使用SHA256算法

-keyout:创建的私钥文件名称及位置

-x509:自签发证书格式

-days:证书有效期

-out:指定CSR输出文件名称及位置

3、创建访问私有镜像仓库的用户和密码,我们使用htpasswd工具

#htpasswd是apache http的基本认证文件,使用htpasswd命令可以生成用户及密码文件

#要先安装http

yum install -y httpd

#创建用户root和密码123456

htpasswd -Bbn root 123456 > /docker/data/registry/auth/htpasswd

4、创建私有仓库容器,我们使用Docker-Compose工具

#编写yaml文件

vi /docker/data/registry/registry.yaml

version: '3'

networks:

mycust-bridge:

external: true

services:

registry:

restart: always

image: registry:latest

ports:

- 443:443

environment:

REGISTRY_HTTP_ADDR: 0.0.0.0:443

REGISTRY_HTTP_TLS_CERTIFICATE: /certs/hub.osyunwei.com.crt

REGISTRY_HTTP_TLS_KEY: /certs/hub.osyunwei.com.key

REGISTRY_AUTH: htpasswd

REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd

REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm

volumes:

- /docker/data/registry:/var/lib/registry

- /docker/data/registry/certs:/certs

- /docker/data/registry/auth:/auth

:wq! #保存退出

#一定要注意yaml文件格式,前后缩进、空格

#创建容器

cd /docker/data/registry/

docker-compose -f registry.yaml up -d

5、配置https访问

#自行签发的证书默认不被系统信任,我们需要设置让Docker信任该证书

#集群内的所有服务器都需要做如下设置

#创建文件夹,注意后面的端口要加上

cd /etc/docker

mkdir -p /etc/docker/certs.d/hub.osyunwei.com:443

#在镜像仓库服务器拷贝hub.osyunwei.com.crt证书文件

[root@master01 docker]# cat /docker/data/registry/certs/hub.osyunwei.com.crt

-----BEGIN CERTIFICATE-----

MIID9zCCAt+gAwIBAgIJAIoc1SqSbXpRMA0GCSqGSIb3DQEBCwUAMIGRMQswCQYD

VQQGEwJDTjERMA8GA1UECAwIU2hhbm54aSAxDTALBgNVBAcMBFhpYW4xETAPBgNV

BAoMCG9zeXVud2VpMREwDwYDVQQLDAhvc3l1bndlaTEZMBcGA1UEAwwQaHViLm9z

eXVud2VpLmNvbTEfMB0GCSqGSIb3DQEJARYQdmlwQG9zeXVud2VpLmNvbTAeFw0y

MTEwMjcxMzUwMjdaFw0zMTEwMjUxMzUwMjdaMIGRMQswCQYDVQQGEwJDTjERMA8G

A1UECAwIU2hhbm54aSAxDTALBgNVBAcMBFhpYW4xETAPBgNVBAoMCG9zeXVud2Vp

MREwDwYDVQQLDAhvc3l1bndlaTEZMBcGA1UEAwwQaHViLm9zeXVud2VpLmNvbTEf

MB0GCSqGSIb3DQEJARYQdmlwQG9zeXVud2VpLmNvbTCCASIwDQYJKoZIhvcNAQEB

BQADggEPADCCAQoCggEBAJfnaUUTWAC0vLHOuqFOwPLouY5Qh7vk9IZ2m83g7dEY

Y6jyHefTfHa5XXY5jWnIYwlasiZW4+9EurispltNIzpsUDjij6tPWhPRLJ7/eRDU

R6uqN89UM3RDqATY8eHCzLzi04eq6XP5aqq18VxQxJnJeWqzXVgH6BG9f7zHFAli

hdeAKzJQke/lQAc09LZA8VdDcIlvUwemdAqq7HsJKSMt3bQEXUGtaI3f/ljTY6Gf

VM96Rc9Znivus7Ht7tj1Ki/9W+pn3DQQAArad0x2b6Etx9apHMSXSjeigT4PKELy

q790QtEqtfACj5bjK9vKvkVTawlDf0JpweBtk/K0yTsCAwEAAaNQME4wHQYDVR0O

BBYEFJDkofGjHYIVNQQUtix1G4vClakXMB8GA1UdIwQYMBaAFJDkofGjHYIVNQQU

tix1G4vClakXMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGaX5EnU

yZk/tKSSfHg/aI+ySGS6pfbMcjdlI03kARPbKOKu0cF/k6X8r43v5A1Nn5lUilLm

ppO/BDFk7OTBvmSWHwoUvF35gv1EWCcVVVjF6ylI8w1dfuRFjsiyX/eWoELdk0+g

o5yUoMYFsY7zdFym1IYX4US8GW6knqae0Hp11FCZMz1tZRzGJw50sVlV9+K/iZVW

BgX37vBE0u0Io7T4ma8N9a2cxAmjhaSJ0qwT6wdU18q1YmZmFfbtnJHYQ8NjiGTI

uA617M2WYthASVTvT6Ivr5L6dWOl8d+RCiPY3C154sKg+fK/DG/NkeiaIdXS7BxQ

g9Q57gFyLG+HmLI=

-----END CERTIFICATE-----

#把hub.osyunwei.com.crt文件复制到所有服务器/etc/docker/certs.d/hub.osyunwei.com:443/目录下,重命名为ca.crt

6、登录私有镜像仓库

docker login hub.osyunwei.com:443

#输入用户名root密码123456,出现Login Succeeded说明登录成功

7、集群内服务器上传下载镜像

首先要登录到私有仓库

docker login hub.osyunwei.com:443

#修改本地镜像标签

docker tag nginx:1.20.1 hub.osyunwei.com:443/nginx:1.20.1

docker tag php-fpm:8.0.11 hub.osyunwei.com:443/php-fpm:8.0.11

docker tag mysql:v8.0.26 hub.osyunwei.com:443/mysql:v8.0.26

#上传镜像

docker push hub.osyunwei.com:443/nginx:1.20.1

docker push hub.osyunwei.com:443/php-fpm:8.0.11

docker push hub.osyunwei.com:443/mysql:v8.0.26

#查看镜像

打开https://hub.osyunwei.com/v2/_catalog地址,输入用户名密码可以看到镜像列表

{"repositories":["mysql","nginx","php-fpm"]}

#集群内其他服务器下载镜像

docker pull hub.osyunwei.com:443/nginx:1.20.1

docker pull hub.osyunwei.com:443/php-fpm:8.0.11

docker pull hub.osyunwei.com:443/mysql:v8.0.26

注意:

在有权限验证的Docker私有仓库,先要登录到私有仓库,使用docker service创建容器还需要指定--with-registry-auth参数,否则无法创建容器

1、登录私有仓库docker login hub.osyunwei.com:443

2、创建容器

docker service create \

--with-registry-auth \

--name nginx \

hub.osyunwei.com:443/nginx:1.20.1

--name nginx #nginx是创建的容器名称

至此,搭建Docker本地私有镜像仓库教程完成

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2024 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3