Docker-本地仓库搭建、harbor仓库

本文详细介绍了如何搭建和管理Docker本地仓库,包括镜像改名、加密认证、远程拉取等内容。还涵盖了Docker Harbor仓库的设置,如下载、配置、上传镜像,以及内容信任和容器优化。此外,文章强调了认证和内容信任在私有仓库中的重要性,并提供了在不同服务器间拉取镜像的步骤。
摘要由CSDN通过智能技术生成

一.本地仓库搭建

先清理之前实验的所有镜像

docker image prune
docker container prune
docker ps -a
docker rm -f demo
docker rmi rhel7:v4
docker rmi rhel7:v3
docker rmi rhel7:v2
docker rmi rhel7:v1
docker images

请添加图片描述
把镜像v4先保存为本地包:

docker save rhel7:v4 -o demo.tar

请添加图片描述

请添加图片描述

请添加图片描述

本地加载刚才保存的镜像

docker load -i demo.tar
docker images

请添加图片描述

1.镜像改名

标记原有镜像rhel7:v4 为新镜像demo:latest

docker tag rhel7:v4 demo:latest
docker images

请添加图片描述
删除rhel7:v4不影响demo的使用

docker rmi rhel7:v4
docker images rhel7
docker images demo

请添加图片描述

拉取镜像tegistry

docker pull registry

请添加图片描述

查看逻辑卷,并清除!

docker volume ls
docker volume prune

请添加图片描述

启动本低仓库,-v表示本地 /opt/ 映射容器中的 /var/lib ,端口映射为5000

docker run -d --name registry -v /opt/registry:/var/lib/registry -p 5000:5000 registry

请添加图片描述

查看进程是否开启

docker ps

请添加图片描述

查看端口:查看端口5000是否打开

netstat -antlp

请添加图片描述
查看本地映射的仓库路径

ls /opt/registry/
cd /opt/registry/

请添加图片描述

请添加图片描述

将容器中的game2048镜像标记到本地仓库中

docker tag game2048:latest localhost:5000/game2048:latest

请添加图片描述

请添加图片描述

push上传

docker push localhost:5000/game2048

请添加图片描述
上传成功后本地路径中也产生了文件
删除之后,重新加载,之前的内容依然存在

ls /opt/registry/
docker ps 
docker rm -f registry
docker run -d --name registry -v /opt/registry:/var/lib/registry -p 5000:5000 registry

curl localhost:5000/v2/_catalog

请添加图片描述
请添加图片描述

2.本地容器仓库加密认证

首先创建加密认证的密钥,创建一个目录certs用来保存密钥
创建目录,之后生成密钥!

mkdir -p certs

openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt

请添加图片描述
注意server hostname这块需要写为reg.westos.org或者自己起名字,带回需要用!

请添加图片描述

需要在server1之后加上本地解析。

vim /etc/hosts
172.25.0.1 server1 reg.westos.org

请添加图片描述

运行docker容器:

docker run -d --name registry -v /opt/registry:/var/lib/registry -p 443:443 -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key  registry

请添加图片描述

标记重命名nginx并归类到本地reg.westos.org仓库中
然后上传容器:

docker tag nginx:latest reg.westos.org/nginx:latest
docker push reg.westos.org/nginx:latest

请添加图片描述

请添加图片描述
我们会发现上传容器的时候,报错了!!!
因为:取不到认证,将认证移动到指定目录

cd /etc/docker/
ls
mkdir certs.d
cd certs.d/
mkdir reg.westos.org
cd reg.westos.org/
cp ~/certs/westos.org.crt ca.crt

请添加图片描述

重新标记上传

docker push reg.westos.org/nginx:latest

成功!

请添加图片描述

测试查看上传的内容

curl -k https://reg.westos.org/v2/game2048/tags/list
curl -k https://reg.westos.org/v2/_catalog

请添加图片描述

3.认证

创建认证目录并进入

mkdir auth
cd auth/

请添加图片描述
因为认证需要系统完成,所以我们需要安装认证的软件

yum install -y httpd-tools

请添加图片描述

为admin用户和wxh用户添加认证信息和密码
需要学习详细用法,可以htpasswd --help 查看

htpasswd -Bc auth/htpasswd admin
cat auth/htpasswd
htpasswd -B auth/htpasswd wxh
cat auth/htpasswd

请添加图片描述

请添加图片描述
删除之前的仓库信息registry,运行容器并查看进程!

docker rm -f registry

docker run -d --name registry -v /opt/registry:/var/lib/registry -p 443:443 -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  registry

docker ps

请添加图片描述
当然,我们可以和之前学习其它知识一样,使用日志查看有无报错!

docker logs registry

请添加图片描述

我们需要准备一台虚拟机server2,测试能否拉取镜像!
安装docker,并配置取消warning,和前面的方法一样!
首先将server2的本地解析完成!

yum install -y docker-ce
systemctl enable --now docker
docker info
vim /etc/sysctl.d/docker.conf
sysctl --system
docker info

vim /etc/hosts
server1 reg.westos.org

请添加图片描述

请添加图片描述

将server1前面生成的证书发送给server2,不然在pull拉取镜像就会报错!

server1
cd /etc/docker/
scp -r certs.d/ server2:/etc/docker/

server2
docker  push reg.westos.org/nginx:latest
登陆认证
docker login reg.westos.org

请添加图片描述

请添加图片描述

4.注意:

若是没有传过来证书就会出现509报错,若是遇到,一定是证书的问题!如下报错就是!
请添加图片描述
查看认证信息

cat /root/.docker/config.json

请添加图片描述

若是退出登陆,那么认证就会消息!

docker logout reg.westos.org
cat /root/.docker/config.json

请添加图片描述

5.远程拉取本地仓库的内容

在server2上去拉取!

如果直接拉取镜像会报错如下:
怎么解决?因为没有登陆用户!

docker pull reg.westos.org/nginx

请添加图片描述
认证登陆,成功登陆后拉取镜像!

docker login reg.westos.org
admin westos
docker pull reg.westos.org/nginx

请添加图片描述

请添加图片描述

二.docker-harbor仓库

先将之前的仓库删除掉!

docker rm -f registry

请添加图片描述

1.软件下载

harbor-offline-installer-v1.10.1.tgz ,
docker-compose-Linux-x86_64-1.27.0 需要自行在网上下载!

[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.1.tgz 
[root@server1 ~]# cd harbor/
[root@server1 harbor]# mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose
[root@server1 harbor]# chmod +x /usr/local/bin/docker-compose
[root@server1 ~]# mv certs/ /data/

请添加图片描述

请添加图片描述

2.修改配置信息

修改内容如下

[root@server1 harbor]# vim harbor.yml     
hostname: reg.westos.org
  certificate: /data/certs/westos.org.crt
  private_key: /data/certs/westos.org.key
harbor_admin_password: westos

请添加图片描述

请添加图片描述

进入,等待成功!

cd harbor/
[root@server1 harbor]# ./install.sh 

请添加图片描述

[root@server1 harbor]# docker-compose ps
[root@server1 harbor]# docker ps

请添加图片描述

请添加图片描述

3.登陆网页

访问172.25.0.1
没有安全认证,解决一下就好

请添加图片描述

请添加图片描述

账户为admin
使用刚才配置文件中的密码
请添加图片描述

请添加图片描述

4.获取认证

[root@server1 harbor]# docker logout reg.westos.org
[root@server1 harbor]# docker login reg.westos.org
Username: admin
Password: 
是登陆web页面的账号密码。

请添加图片描述

5.上传镜像

使用刚才网页查看到的路径!

[root@server1 harbor]# docker tag nginx:latest hyl.westos.org/library/nginx:latest
[root@server1 harbor]# docker push reg.westos.org/library/nginx:latest

请添加图片描述

到网页上查看是否上传?

请添加图片描述

6.添加默认仓库路径

在远端拉取镜像时,我们可以直接指定我们的私有仓库进行下载
在server2上拉取进行测试:

在server1上传过来
cd /etc/docker/
scp daemon.json server2:/etc/docker/

[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# vim daemon.json
{
  "registry-mirrors" : ["https://reg.westos.org"]
}

请添加图片描述

请添加图片描述

可以查看到新的添加的镜像路径

docker info

请添加图片描述

[root@server2 docker]# systemctl reload docker.service
[root@server2 docker]# docker pull nginx

请添加图片描述
如果直接运行容器,它会不会顺便下载呢?
我们先删掉刚才上传的nginx,直接run运行容器

docker rmi nginx:latest
docker images ##没有了
docker run -d --name demo nginx
docker images

请添加图片描述

如下图,运行容器的时候,第一步是pull拉取镜像,说明会自动下载没有的镜像!!
请添加图片描述

当然我们可以再网页上看到下载的记录

请添加图片描述

7.重新下载配置

停止并删除,清理配置信息

[root@server1 harbor]# docker-compose down                  
[root@server1 harbor]# ./prepare  

请添加图片描述

请添加图片描述内容信任 ,镜像扫描
相当于:配置中加入了漏洞扫描,内容信任等选项。

[root@server1 harbor]# ./install.sh --with-notary --with-clair --with-chartmuseum

请添加图片描述
请添加图片描述
当选中漏洞扫描之后。

docker tag nginx:latest reg.westos.org/library/nginx:latest
docker push reg.westos.org/library/nginx:latest

请添加图片描述

我们可以看到漏洞这一列,显示已经加入队列!

请添加图片描述

过一会就会扫描完成!
请添加图片描述

启用docker内容信任:

export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443

请添加图片描述
部署根证书:

[root@server1 ~]# mkdir ~/.docker/tls/reg.westos.org:4443 -p
[root@server1 ~]# cd ~/.docker/tls/reg.westos.org:4443
[root@server1 reg.westos.org:4443]# cp /etc/docker/certs.d/reg.westos.org/ca.crt .

请添加图片描述

请添加图片描述


[root@server1 ~]# docker push reg.westos.org/library/nginx:latest

会显示已经存在,但是会需要我们输入root key 当我们只修改标签的时候,我们只用输入repository key
请添加图片描述

请添加图片描述

网页访问,会发现再签名一列,显示对号!
请添加图片描述
当我们把镜像的名字更改之后:重新拉取镜像v1
我们会发现只需要更改仓库的key!

docker tag demo:latest reg.westos.org/library/demo:v1
docker push reg.westos.org/library/demo:v1

请添加图片描述

请添加图片描述

上网页查看 上传成功!
请添加图片描述
项目westos,当打开内容信任之后:点下面的确认!
会发现本来拉取报错的镜像,可以拉取镜像了!!

请添加图片描述
在server2上:
没有信任的时候,拉取报错的镜像
请添加图片描述

开启信任之后:
请添加图片描述
在server1上:
修改:
export DOCKER_CONTENT_TRUST=0

那么在拉取的时候就不需要再输入认证了!
请添加图片描述

8.优化容器

为了不让扫描,使得占用的空间越来越大,所以重新修改一下选项

[root@server1 ~]# export DOCKER_CONTENT_TRUST=0
[root@server1 harbor]# docker-compose down
[root@server1 harbor]# ./prepare
[root@server1 harbor]# ./install.sh  --with-chartmuseum

请添加图片描述

请添加图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dudududu--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值