直接从官网上拉取镜像不太方便,有时候主机由于安全等方面的考虑,不能直接使用外网。这时候需要搭建本地私有仓库,将以已经处理好的镜像存放在仓库中。
并且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,证明上传成功
查看逻辑卷位置:
查看容器分配ip:
查看容器中私人仓库数据:
但是由于此时并没有作认证,加密。其实也十分不安全。可以再次优化。
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 ##上传镜像
用户认证(基于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的密钥证书。
仓库:
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 ##下载镜像