Ubantu docker学习笔记(八)私有仓库

这篇具有很好参考价值的文章主要介绍了Ubantu docker学习笔记(八)私有仓库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在前面的学习中,我们可以知道,我们所使用上传的镜像全都是公共镜像,镜像如果是商业机密,只能供公司内部人员使用,怎么办,这个就涉及到我们私有仓库的搭建。
Ubantu docker学习笔记(八)私有仓库
在这一章的学习中,我们就用两台主机,分别作为服务器端和客户端,现在我们开始吧!

名称 IP地址
服务端 192.168.2.109
客户端 192.168.2.108

一、建立HTTPS链接

<registry.xinhua.com>可以替换
/opt/docker/registry/certs也地址可以进行修改

1.在仓库服务器上获取TLS证书

新建一个目录

sudo su
mkdir -p /opt/docker/registry/certs
cd /opt/docker/registry/certs
ls

1.1 生成证书颁发机构证书

生成 CA 证书私钥

openssl genrsa -out ca.key 4096

生成ca证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=registry.xinhua.com" \
 -key ca.key \
 -out ca.crt

Ubantu docker学习笔记(八)私有仓库

1.2 生成服务器证书

生成私钥

openssl genrsa -out registry.xinhua.com.key 4096

生成证书签名请求 (CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=registry.xinhua.com" \
    -key registry.xinhua.com.key \
    -out registry.xinhua.com.csr

Ubantu docker学习笔记(八)私有仓库
生成 x509 v3 扩展文件

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=registry.xinhua.com
DNS.2=registry.xinhua
DNS.3=hostname
EOF

使用该文件为 主机生成证书v3.ext

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in registry.xinhua.com.csr \
    -out registry.xinhua.com.crt

Ubantu docker学习笔记(八)私有仓库

1.3 利用证书运行仓库容器

docker run -it -d --name registry-TLS -p 5000:5000 -v /opt/docker/registry/certs/:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.xinhua.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.xinhua.com.key registry:2

Ubantu docker学习笔记(八)私有仓库

2.让私有仓库支持HTTPS

ip addr

Ubantu docker学习笔记(八)私有仓库
在仓库服务器和客户端配置域名解析

sudo gedit /etc/hosts


192.168.2.109 registry.xinhua.com
192.168.2.109 nginx.xinhua.com

Ubantu docker学习笔记(八)私有仓库
验证一下

ping registry.xinhua.com

Ubantu docker学习笔记(八)私有仓库

3.客户端端配置

在仓库服务器和客户端配置域名解析

sudo gedit /etc/hosts

<服务器ip>
192.168.2.109 registry.xinhua.com
192.168.2.109 nginx.xinhua.com

Ubantu docker学习笔记(八)私有仓库
验证一下

ping registry.xinhua.com

Ubantu docker学习笔记(八)私有仓库
客户端安装open-ssh server

apt-get install openssh-server

在客户端上创建存储证书的目录

mkdir -p /etc/docker/certs.d/registry.xinhua.com\:5000

将服务器上的所有证书/opt/docker/registry/certs(.cert .key .crt)通过scp拷贝到创建客户端存储证书的目录服务端执行

修改服务端权限:chmod 777 /opt/docker/registry/certs
修改客户机权限:chmod 777 /etc/docker/certs.d/registry.xinhua.com:5000

scp -r -p /etc/docker/certs.d/registry.xinhua.com:5000/register.xinhua.com.crt username@serverip: /opt/docker/registry/certs/register.xinhua.com.crt 

username<登录用户名你服务器的名字【就是你直接打开控制台的名字】>
serverip<客户端ip(ip addr查看)> 192.168.2.108

scp -r -p /opt/docker/registry/certs/registry.xinhua.com.crt root-u@192.168.2.108:/etc/docker/certs.d/registry.xinhua.com:5000/register.xinhua.com.crt

Ubantu docker学习笔记(八)私有仓库
客户端
Ubantu docker学习笔记(八)私有仓库
下面我们就来演示吧

名称 IP地址
服务端 192.168.2.109
客户端 192.168.2.108

在客户端推送镜像
代码解释参考:Ubantu docker学习笔记(三)docker账号push及Dockerfile优化

docker tag busybox:latest registry.xinhua.com:5000/busybox:V1
docker push registry.xinhua.com:5000/busybox:V1

Ubantu docker学习笔记(八)私有仓库

curl -X GET https://registry.xinhua.com:5000/v2/_catalog -k

Ubantu docker学习笔记(八)私有仓库

二、基本身份验证

创建目录及用户密码文件

mkdir /opt/docker/registry/auth
docker run  --entrypoint htpasswd  httpd:2 -Bbn testuser testpassword > /opt/docker/registry/auth/htpasswd

这里注意testuser testpassword 就是我们后面登录的账号密码了

停止之前镜像(直接把所有关了)

docker stop $(docker ps -q) & docker rm $(docker ps -aq)

再次运行我们的服务镜像

docker run -d  \
-p 5000:5000   \
--restart=always  \
--name registry  \
-v /opt/docker/registry/auth:/auth  \
-e "REGISTRY_AUTH=htpasswd"  \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  \
-v /opt/docker/registry/certs:/certs   \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.xinhua.com.crt   \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.xinhua.com.key   registry:2

Ubantu docker学习笔记(八)私有仓库
去我们客户端进行镜像上传

docker push registry.xinhua.com:5000/busybox:V1

Ubantu docker学习笔记(八)私有仓库
可以看到我们上传不了,接着我们登录

登录

docker login registry.xinhua.com:5000

账号:testuser
密码:testpassword
Ubantu docker学习笔记(八)私有仓库
Ubantu docker学习笔记(八)私有仓库
我们再去上传我们的镜像

docker push registry.xinhua.com:5000/busybox:V1

Ubantu docker学习笔记(八)私有仓库

三、对外隐藏仓库服务器

3.1 在服务器端

安装nginx

apt install nginx

为nginx创建SSL秘钥和证书到/etc/nginx/certs/目录下

mkdir -p /etc/nginx/certs/
cd /etc/nginx/certs/
ls

开始参考https的方式啦,也就是相当于把registry.xinhua.com全都替换成nginx.xinhua.com

生成ca证书私钥

openssl genrsa -out ca.key 4096

生成ca证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=nginx.xinhua.com" \
 -key ca.key \
 -out ca.crt

生成服务器证书,私钥

openssl genrsa -out nginx.xinhua.com.key 4096

生成证书签名请求 (CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=nginx.xinhua.com" \
    -key nginx.xinhua.com.key \
    -out nginx.xinhua.com.csr

生成 x509 v3 扩展文件

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=nginx.xinhua.com
DNS.2=nginx.xinhua
DNS.3=hostname
EOF

使用该文件为 主机生成证书v3.ext

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in nginx.xinhua.com.csr \
    -out nginx.xinhua.com.crt

Ubantu docker学习笔记(八)私有仓库
客户端上创建存储证书的目录

mkdir -p /etc/docker/certs.d/nginx.xinhua.com\:443

将服务器上的所有证书/opt/docker/registry/certs(.cert .key .crt)通过scp拷贝到创建客户端存储证书的目录服务端执行

修改服务端权限:
chmod 777 /etc/nginx/certs/
修改客户机权限:
chmod 777 /etc/docker/certs.d/nginx.xinhua.com:443
chmod 777 /usr/local/share/ca-certificates

username<登录用户名你服务器的名字【就是你直接打开控制台的名字】>
serverip<客户端ip(ip addr查看)> 192.168.2.108

scp -r -p /etc/nginx/certs/nginx.xinhua.com.crt root-u@192.168.2.108:/etc/docker/certs.d/nginx.xinhua.com:443/nginx.xinhua.com.crt
scp -r -p /etc/nginx/certs/nginx.xinhua.com.crt root-u@192.168.2.108:/usr/local/share/ca-certificates/nginx.xinhua.com.crt

Ubantu docker学习笔记(八)私有仓库

修改nginx配置/etc/nginx/nginx.conf让nginx的支持SSL的反向代理和身份验证

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {
        upstream docker-register {
        	server registry.xinhua.com:5000;
        }

	server {
	    listen 443 ssl;
	    server_name nginx.xinhua.com;
	    #修改
	    ssl_certificate /etc/nginx/certs/nginx.xinhua.com.crt;
	    #修改
	    ssl_certificate_key /etc/nginx/certs/nginx.xinhua.com.key;

	    ssl_session_cache builtin:1000 shared:SSL:10m;
	    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
	    ssl_prefer_server_ciphers on;
	    
	    proxy_set_header Host $host;
	    proxy_set_header X-Real-IP $remote_addr;
	    add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
	    
	    location / {
	        auth_basic "Restricted";
	        auth_basic_user_file /etc/nginx/auth/htpasswd.txt;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_pass https://docker-register;
		proxy_read_timeout 900;
	    }
	    
	    location /v2 {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	    
	    location /_ping {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	    
	    location /v2/_ping {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	    location /v2/_catalog {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	}
	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
#
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

使用htpasswd去生成用户账号,设置密码

mkdir /etc/nginx/auth
cd /etc/nginx/auth
apt install apache2-utils
htpasswd -c htpasswd.txt user

输入你的密码

Ubantu docker学习笔记(八)私有仓库
重启Nginx服务

sudo /etc/init.d/nginx restart
注意!!!
一定要打全
https://192.168.2.109:443
直接输入域名可能出现以下错误

没有打端口号
Ubantu docker学习笔记(八)私有仓库
没有用http连接
Ubantu docker学习笔记(八)私有仓库
正确!!!
Ubantu docker学习笔记(八)私有仓库

Ubantu docker学习笔记(八)私有仓库

3.2 在客户端进行

配置

sudo vi /etc/docker/daemon.json

{  
   "registry-mirrors": ["https://8f6a79wk.mirror.aliyuncs.com"],
   "insecure-registries":["私库地址(可以域名也可以ip)"]
}



我的配置
{
   "registry-mirrors": ["https://8f6a79wk.mirror.aliyuncs.com"],
   "insecure-registries":["https://nginx.xinhua.com"]
}

如果不配置就会出现
Error response from daemon: Get "https://nginx.xinhua.com/v2/": x509: certificate signed by unknown authority

登录

update-ca-certificates
systemctl daemon-reload
systemctl restart docker

第一种:
docker login https://192.168.2.109:443 -u user -p "123456"

第二种:
#设置环境变量
export PASSWORD=123456
#以环境变量的方式读入
echo "$PASSWORD" | docker login https://https://nginx.xinhua.com --username user --password-stdin

Ubantu docker学习笔记(八)私有仓库

我们再去上传我们的镜像

docker tag busybox:latest 192.168.2.109:443/busybox:V1
docker push 192.168.2.109:443/busybox:V1

四、仓库可视化

http:

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


docker run -it -d -p 8080:8080 --name registry-web --link registry   \
-e REGISTRY_URL=http://192.168.2.109:5000/v2            \
-e REGISTRY_TRUST_ANY_SSL=true            \
-e REGISTRY_BASIC_AUTH="cm9vdDoxMjM0NTY"            \
-e REGISTRY_NAME=192.168.2.109:5000 hyper/docker-registry-web

Ubantu docker学习笔记(八)私有仓库

https:(未实现)

docker run -it -d --name registry-TLS -p 5000:5000 -v /opt/docker/registry/certs/:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.xinhua.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.xinhua.com.key registry:2


docker run -it -d -p 8080:8080 --name registry-web --link registry-TLS   \
-e REGISTRY_URL=https://192.168.2.109:5000/v2            \
-e REGISTRY_TRUST_ANY_SSL=true            \
-e REGISTRY_BASIC_AUTH="cm9vdDoxMjM0NTY"            \
-e REGISTRY_NAME=192.168.2.109:5000 hyper/docker-registry-web

Ubantu docker学习笔记(八)私有仓库文章来源地址https://www.toymoban.com/news/detail-434101.html

到了这里,关于Ubantu docker学习笔记(八)私有仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker容器:本地私有仓库、harbor私有仓库部署与管理

    目录 一、本地私有仓库 1、本地私有仓库简介 2、搭建本地私有仓库 3、容器重启策略介绍 二、harbor私有仓库部署与管理 1、什么是harbor 2、Harbor的特性 3、Harbor的构成 4、harbor部署及配置 ①部署docker-compose ②部署Harbor服务 ③登录创建项目 ④登录仓库并上传镜像 5、客户端测试

    2024年02月04日
    浏览(58)
  • 【docker】docker私有仓库

    一、说明 1.docker官方的docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,可以从上面拉取镜像到本地,也可以把自己的镜像推送上去 2.若服务器无法访问互联网,或者不希望将自己的镜像放到公网当中,则需要搭建自己的私有仓库来存储和管理自己的镜像 二、私有

    2024年02月14日
    浏览(34)
  • 【Docker】制作Docker私有仓库

    由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。 下载Registry的Docker镜像; 使用Docker容器运行Registry服务,需要添加环境变量 REGISTRY_STORAGE_DELETE_ENABLED=true 开启删除镜像的功能; 修改Docker Daemon的配置文件,文件位置为

    2024年02月15日
    浏览(37)
  • 【Docker】Docker私有仓库的使用

    目录 一、搭建私有仓库 二、上传镜像到私有仓库 三、从私有仓库拉取镜像 首先我们需要拉取仓库的镜像 docker pull registry 然后创建私有仓库容器 docker run -it --name=reg -p 5000:5000 registry 这个时候我们可以打开浏览器访问5000端口看是否成功,如果成功则会返回一个json格式字符串

    2024年02月13日
    浏览(36)
  • 7-Docker私有仓库harbor私有镜像上传配置

    1.编辑/etc/docker/daemon.json文件,修改容器仓库配置,并保存 命令: vim /etc/docker/daemon.json 更新前 更新后 2.重启docker及Harbor 命令: cd /usr/local/harbor docker-compose -f docker-compose.yml down -v docker-compose ps -a systemctl stop docker systemctl status docker systemctl start docker systemctl status docker docker-comp

    2024年01月23日
    浏览(60)
  • 搭建Docker私有仓库

    目录 背景介绍 学习目的 学习准备 搭建过程 Docker registry是存储Docker image的仓库 ,运行push、pull、 search 时,是通过Docker daemon与docker registry通信。 Docker Hub(Docker埠,内有大量存储库或叫仓库)是Docker提供的一项服务,用于查找和与您的团队共享容器镜像。它是世界上最大的容

    2024年02月12日
    浏览(36)
  • Docker私有仓库搭建

    Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。 Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署

    2024年02月22日
    浏览(37)
  • Docker 搭建本地私有仓库

    有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。 使用私有仓库有许多优点: Docker 官方提供了一个搭建私有仓库的镜像 registry (注册服务器),只需把镜像下载下来,运行容器并暴露5000端口

    2024年02月16日
    浏览(39)
  • docker本地私有仓库搭建

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 和Maven的管理一样,docker不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。使用docker私有仓库有许多优点: 一、节省网络宽带,针对于每个镜像,不需要每个人都去中央仓库上面

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包