直接从官网上拉取镜像不太方便,有时候主机由于安全等方面的考虑,不能直接使用外网。这时候需要搭建本地私有仓库,将以已经处理好的镜像存放在仓库中。

并且registry已经开源,打包成一个镜像,直接拉取,然后运行容器即即可,剩下的就是进行设置加密认证以及设置存储等。

私有仓库的搭建

docker search registry					##在公共仓库中找官方分享的私有仓库镜像
docker pull registry						##把镜像拉取
docker images								##查看镜像是否存在
docker history registry:latest		##查看镜像封装是爆漏的端口,以便于端口影射
docker run -d --name registry -p 5000:5000 registry		##运行镜像,进行端口影射,主机5000端口,相当于镜像容器5000端口
docker volume ls							##查看逻辑卷
docker inspect registry					##查看宿主机逻辑卷挂载位置
netstat -antlp|grep :5000				##查看端口影射是否打开
docker tag nginx:latest localhost:5000/nginx:latest		##修改nginx镜像名,由于要上传到主机
docker images
docker push localhost:5000/nginx								##将命名的镜像上传到本机5000端口,也就是容器端口内
curl localhost:5000/v2/_catalog									##查看私人仓库是否有nginx
cd /var/lib/docker/volumes/6157646455a88fd6e63587e4c04db8e9e512273d48f192dce32ae62247091587/_data			##根据挂载位置查看是否存在nginx数据
yum install tree-1.6.0-10.el7.x86_64 -y
tree .										 	##显示数据树,存在nginx,证明上传成功

查看逻辑卷位置:

docker 镜像加密 docker镜像可以加密吗_docker 镜像加密


查看容器分配ip:

docker 镜像加密 docker镜像可以加密吗_nginx_02


查看容器中私人仓库数据:

docker 镜像加密 docker镜像可以加密吗_docker 镜像加密_03


但是由于此时并没有作认证,加密。其实也十分不安全。可以再次优化。

TSL加密:

由于上传镜像时并没有进行加密,所以进行加密。我是重新使用了一台新的虚拟机配置环境,所以就重新配置了一下环境。

yum install containerd.io-1.2.5-3.1.el7.x86_64.rpm container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.09.6-3.el7.x86_64.rpm docker-ce-cli-18.09.6-3.el7.x86_64.rpm -y			##安装docker
yum install bash-* -y		
systemctl start docker							##开启docker服务
docker search registry							##寻找仓库
docker pull registry								##从公共镜像拉取仓库
mkdir -p certs										##创建加密证书存放目录
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.com.key -x509 -days 365 -out certs/westos.com.crt						##生成域名为westos.com证书,以及密钥
docker run -d   --restart=always   --name registry -v "$(pwd)"/certs:/certs   -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.com.key -p 443:443 registry
													##以加密方式运行仓库,并进行端口映射
vim /etc/hosts								##添加域名解析,知道域名存在与哪台服务机
		172.25.66.1     lucky1. westos.com
cd /etc/docker/
mkdir certs.d/westos.com				##创建dockerTSL认证证书
cd certs.d/westos.com/
cp /root/certs/westos.com.crt ca.crt		##复制认证证书到当前文件,并改名
systemctl restart docker						##重启docker服务,由于重新加入认证证书
docker images								
docker load -i busybox.tar					##加载镜像
docker tag busybox:latest westos.com/busybox:latest		##修改镜像名为仓库名
docker push westos.com/busybox			##上传镜像

docker 镜像加密 docker镜像可以加密吗_上传_04


docker 镜像加密 docker镜像可以加密吗_上传_05

用户认证(基于TSL加密):

mkdir auth								##创建用户认证目录
docker run --rm --entrypoint htpasswd registry -Bbn admin westos > auth/htpasswd		##容器运行认证用户admin信息存放到auth/htpasswd
cat auth/htpasswd 
docker run --rm --entrypoint htpasswd registry -Bbn wxh redhat >> auth/htpasswd			##追加用户认证信息
cat auth/htpasswd
docker rm -f registry												##删除之前所建立的仓库
docker run -d   --restart=always   --name registry -v "$(pwd)"/certs:/certs   -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.com.key -p 443:443 -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 login westos.com										##用户认证登陆
docker push westos.com/busybox						##上传镜像
docker logout westos.com									##退出
docker push westos.com/busybox						##上传失败

docker 镜像加密 docker镜像可以加密吗_docker 镜像加密_06

docker 镜像加密 docker镜像可以加密吗_docker_07


docker 镜像加密 docker镜像可以加密吗_nginx_08

远程登陆:
条件:远程主机必须要有域名解析,以及生成docker的密钥证书。
仓库:

vim /etc/hosts
		172.25.66.4     server4 westos.com
		172.25.66.5     server5
cd /etc/docker/
scp -r certs.d/ server5:/etc/docker/

远程主机:

vim /etc/hosts
		172.25.30.4     server4 westos.com
		172.25.30.5     server5
docker login westos.com				##由于使用了用户认证,就必须先登陆,后拉取
docker pull westos.com/busybox		##下载镜像

docker 镜像加密 docker镜像可以加密吗_nginx_09