目录:
一.本地仓库搭建
先清理之前实验的所有镜像
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