# vim /usr/lib/systemd/system/docker.service
增加:
ExecStart=/usr/bin/dockerd --insecure-registry 192.18.1.8(服务器注册地址)
增加 --insecure-registry 192.18.1.8 即可。
重启docker:
# systemctl daemon-reload
# systemctl restart docker
或者
创建/etc/docker/daemon.json文件,在文件中指定仓库地址
# cat > /etc/docker/daemon.json << EOF
{ "insecure-registries":["192.168.1.8"] }
EOF
然后重启docker就可以。
# systemctl restart docker
这样设置完成后,就不会提示我们使用https的错误了。
# vim Dockerfile
FROM centos:centos7.1.1503
ENV TZ "Asia/Shanghai"
# docker build -t 192.168.1.8/library/centos7.1:0.1 .
# docker login 192.168.1.8
# docker push 192.168.1.8/library/centos7.1:0.1
如果不是自己创建的镜像,记得先执行 docker tags 给镜像做tag
例如:
# docker pull busybox
# docker tag busybox:latest 192.168.1.8/library/busybox:latest
# docker push 192.168.1.8/library/busybox:latest
从别的机器上拉一下镜像
# docker rmi -f $(docker images -q -a )
# docker pull 192.168.1.8/library/centos7.1:0.1
0.1: Pulling from library/centos7.1
07618ba636d9: Pull complete
Digest: sha256:7f398052ae0e93ddf96ba476185c7f436b15abd27acd848a24b88ede4bb3c322
Status: Downloaded newer image for rgs.unixfbi.com/library/centos7.1:0.1
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rgs.unixfbi.com/library/centos7.1 0.1 6c849613a995 5 hours ago 212MB
因为我们上面对Harbor的配置都是使用的http协议访问,但是我们工作中一般都是配置https访问。所以我给大家演示一下怎么配置Harbor可以使用https访问,以及配置TLS证书都需要做哪些工作。
1.修改Harbor配置文件
因为Harbor默认使用http协议访问,所以我们这里在配置文件中,开启https配置;
配置harbor.cfg
hostname = 192.168.1.8
ui_url_protocol = https
ssl_cert = /etc/certs/ca.crt
ssl_cert_key = /etc/certs/ca.key
2.创建自签名证书key文件
# mkdir /etc/certs
# openssl genrsa -out /etc/certs/ca.key 2048
Generating RSA private key, 2048 bit long modulus
....+++
..................................................+++
e is 65537 (0x10001)
3.创建自签名证书crt文件
注意命令中/CN=192.168.1.8字段中r192.168.1.8修改为你自己的仓库域名。
# openssl req -x509 -new -nodes -key /etc/certs/ca.key -subj "/CN=192.168.1.8" -days 5000 -out /etc/certs/ca.crt
4.开始安装Harbor
# ./install.sh
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at https://192.168.1.8.
For more details, please visit https://github.com/vmware/harbor .
显示是https了。
5.客户端配置
客户端需要创建证书文件存放的位置,并且把服务端创建的证书拷贝到该目录下,然后重启客户端docker。我们这里创建目录为:
mkdir -p /etc/docker/certs.d/192.168.1.8
把服务端crt证书文件拷贝到客户端,例如我这的客户端为:192.168.199.183
# scp /etc/certs/ca.crt [email protected]:/etc/docker/certs.d/192.168.1.8/
重启客户端docker
# systemctl restart docker
6.测试是否支持https访问
# docker login 192.168.1.8
Username (admin):
Password:
Login Succeeded
遇到的问题就是Harbor我配置的是http访问,但是docker客户端默认都是https访问Harbor,所以就会产生错误。下面看看我是怎么解决这个问题的吧。下面我们来访问以下Harbor
# docker pull 192.168.1.8/library/centos7.1:0.1
Error response from daemon: Get https://192.168.1.8/v1/_ping: dial tcp 192.168.199.233:443: getsockopt: connection refused
问题原因:
因为docker默认访问仓库时都是使用的https协议,而我们的仓库配置的是http
解决方法:
方法一:
在docker启动的配置仓库地址添加如下内容:
–insecure-registry 192.168.1.8
# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.8
然后
# systemctl daemon-reload
# systemctl restart docker
方法二:
创建/etc/docker/daemon.json文件,在文件中指定仓库地址
# cat > /etc/docker/daemon.json << EOF
{ "insecure-registries":["192.168.1.8"] }
EOF
然后重启docker就可以了
# systemctl restart docker
方法三:
就是把你的仓库也配置成https ,设置证书。好吧,这种方法其实我不说,你也知道。
1、admin登录
$ docker login 192.168.1.8
Username: admin
Password:
Login Succeeded
2、给镜像打tag【tag 修改 image 的名字. 格式为: userip/项目名/image名字:版本号】
$ docker tag nginx 192.168.126.131/docker/nginx:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 958a7ae9e569 2 weeks ago 109 MB
192.168.1.8/docker/nginx latest 958a7ae9e569 2 weeks ago 109 MB
3、我们新建一个名称为docker的项目,设置不公开。注意:当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。
4、push到仓库
$ docker push 192.168.1.8/docker/nginx
The push refers to a repository [docker.bksx.com/docker/nginx]
a552ca691e49: Pushed
7487bf0353a7: Pushed
8781ec54ba04: Pushed
latest: digest: sha256:41ad9967ea448d7c2b203c699b429abe1ed5af331cd92533900c6d77490e0268 size: 948