私有仓库的搭建
为什么要搭建私有仓库?
- docker hub太慢
- 放到网上去,有些docker是定制的,上传后不安全。
如何搭建私有仓库?
下载一个registry镜像,或者直接在网上拉取一个registry镜像,运行容器。
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 708bc6af7e5e 2 weeks ago 25.8MB
直接进行拉取。
查看一下构建历史
IMAGE CREATED CREATED BY SIZE COMMENT
708bc6af7e5e 2 weeks ago /bin/sh -c #(nop) CMD ["/etc/docker/registr… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/entrypoint.… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) COPY file:507caa54f88c1f38… 155B
<missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 5000 0B
<missing> 2 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/registry] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) COPY file:4544cc1555469403… 295B
<missing> 2 weeks ago /bin/sh -c #(nop) COPY file:21256ff7df5369f7… 20.1MB
<missing> 2 weeks ago /bin/sh -c set -ex && apk add --no-cache… 1.28MB
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:e38375b009a2e2c9b… 4.41MB
发现这个容器主动暴露5000端口,并且设置了一个挂载点。所以在运行容器的时候也要注意一些参数。
docker run -d --name registry -p 5000:5000 -v /mnt/registry:/var/lib/registry registry
如何上传至本地仓库?
先将标签进行修改,加入端口号,
docker tag nginx:latest localhost:5000/nginx:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 2073e0bcb60e 6 days ago 127MB
localhost:5000/nginx latest 2073e0bcb60e 6 days ago 127MB
这样就指定完成了。如果不指定,将默认上传到网络仓库。
docker push localhost:5000/nginx
上传完成后查看5000端口
curl localhost:5000/v2/_catalog
{"repositories":["nginx"]}
已经上传成功。
docker仓库加密
一般本机上传和拉取是不需要加密的,但是如果远程登陆拉取的话,不加密是很危险的,比如再准备一台虚拟机,尝试
[root@server2 ~]# curl 192.168.122.2:5000/v2/_catalog
{"repositories":["nginx"]}
可以看到还是可以进行拉取数据的,那么如何进行加密呢?
按照docker官方文档进行操作。
先创建一个仓库目录。
mkdir certs
接着生成证书
openssl req \
> -newkey rsa:4096 -nodes -sha256 -keyout certs/passyt.com.key\
> -x509 -days 365 -out certs/passyt.com.crt
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shaanxi
Locality Name (eg, city) [Default City]:Xi'an
Organization Name (eg, company) [Default Company Ltd]:haha
Organizational Unit Name (eg, section) []:yyy
Common Name (eg, your name or your server's hostname) []:passyt.com
Email Address []:root@passyt.com
这个时候虽然生成了加密,但是docker仓库并没有进行读取,要如何操作?
进行重载,将原来的仓库容器删除后重新生成一个容器。
docker run -d \
> --restart=always \ ##在docker开启的时候容器也自动开启
> --name registry \
> -v "$(pwd)"/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/passyt.com.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/passyt.com.key \
> -p 443:443 registry
容器打开后开启443加密端口。之后拷贝证书到下面地址。
[root@server1 docker]# mkdir certs.d
[root@server1 docker]# cd certs.d/
[root@server1 certs.d]# mkdir passyt.com
[root@server1 certs.d]# cd passyt.com/
[root@server1 passyt.com]# ls
[root@server1 passyt.com]# cp /etc/docker/certs/passyt.com.crt ca.crt ##将证书名字改为 ca.crt
设置完成之后就可以和推送到本地仓库的方法进行推送。
远程用户进行拉取
用同样的方法创建一些目录。
[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# mkdir certs.d
[root@server2 docker]# cd certs.d/
[root@server2 certs.d]# mkdir passyt.com
[root@server2 certs.d]# cd passyt.com/
[root@server2 passyt.com]#
[root@server2 passyt.com]# scp server1:/etc/docker/certs.d/passyt.com/ca.crt .
root@server1's password:
ca.crt 100% 2098 2.1KB/s 00:00
[root@server2 passyt.com]#
[root@server2 passyt.com]# ls
ca.crt
将钥匙发送过去即可,完成之后就可以让server2的用户尝试拉取镜像。
拉取的时候需要添加域名。所以解析还是需要添加的。
docker pull passyt.com/nginx:latest
给docker用户添加认证功能
在服务端设置用户密码并查看
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# mkdir auth
[root@server1 docker]# ls
[root@server1 docker]# docker run --entrypoint htpasswd registry:2.3.1 -Bbn admin passyt> auth/htpasswd
再次创建仓库
先删除之前的,在原有的基础上额外加一些参数
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/passyt.com.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/passyt.com.key \
> -p 443:443 \
> -v /opt/registry:/var/lib/registry \
> -v "$(pwd)"/auth:/auth \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
添加完成之后,在server2上尝试进行拉取或者上传,发现不行,系统提示应先登陆,
docker login passyt.com
输入用户名和密码即可进行下一步操作。
来源:CSDN
作者:passnetY
链接:https://blog.csdn.net/passnetY/article/details/104224614