因为生产情况下官方容器还是比较慢的,所以会用到自建docker仓库。docker官方提供完整部署仓库的容器,你只需要提供域名证书,把文件系统挂载到容器,一个用户密码文件就可以使用基本的仓库功能了。
启动一个registry容器
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下
[root@salt-node1 distribution-master]# docker run -d -p 5000:5000 -v /opt/registry:/tmp/registry registry
9ed2f91a7056f1109d2146122930b12f7d077a5404f621647d12eeeb29725260
提交一个本地的镜像到本地仓库,这个需要你首先 tag 一个镜像,然后才能 push 上去
[root@salt-node1 ~]# docker tag redis localhost:5000/redis
[root@salt-node1 ~]# docker push localhost:5000/redis
但是因为你本地仓库如果不进行证书认证只能127.0.0.1访问,所以我们要创建密钥。否则在另外一台机器pull时会提示:
root@ubuntu:/etc/docker# docker pull 192.168.161.130:5000/redis
Using default tag: latest
Error response from daemon: Get https://192.168.161.130:5000/v1/_ping: http: server gave HTTP response to HTTPS client
一种处理方式是修改客户端机器
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.1.100:5000"] }
保存退出后,重启docker。问题解决。
另一种方式是在服务器端添加证书
配置一个域名
给域名准备一个加密证书,启动容器
docker run -d -p 5000:5000 --restart=always --name registry \
-v /etc/docker/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
------------------------------------
还有一个更简单的建立本地仓库的办法:
yum install docker docker-distribution
#systemctl enable docker
#systemctl start docker
#systemctl enable docker-registry
#systemctl start docker-registry
[root@01 /]# vim /etc/sysconfig/docker
- 把下面这一行添加进去。
OPTIONS='--insecure-registry 192.168.161.130:5000'
systemctl restart docker docker-registry
docker tag ubuntu 192.168.161.130:5000/ubuntu
docker push 192.168.161.130:5000/ubuntu