一、分离docker和jenkins主机,使用远程主机构建
上面实验装的是本地构建,但是生产环境很多容易加重jenkins主机的负担。
1、jenkins服务连接远程docker引擎
打开docker外部连接端口
客户端:jenkins主机-----服务端:docker主机
1)生成相应的key和ca证书
[root@server1 docker]# openssl genrsa -aes256 -out ca-key.pem 4096
[root@server1 docker]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
2)生成server-key和csr文件
[root@server1 docker]# openssl genrsa -out server-key.pem 4096
[root@server1 docker]# openssl req -subj "/CN=server1" -sha256 -new -key server-key.pem -out server.csr
3)可以使用ip地质方式进行tls连接
[root@server1 docker]# echo subjectAltName = DNS:server1,IP:172.25.7.1,IP:127.0.0.1 >> extfile.cnf
[root@server1 docker]# echo extendedKeyUsage = serverAuth >> extfile.cnf
[root@server1 docker]# cat extfile.cnf
subjectAltName = DNS:server1,IP:172.25.7.1,IP:127.0.0.1
extendedKeyUsage = serverAuth
[root@server1 docker]# pwd
/etc/docker
[root@server1 docker]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
4)改变docker启动脚本
[root@server1 docker]# cp /usr/lib/systemd/system/docker.service /etc/systemd/system
[root@server1 docker]# vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376
[root@server1 docker]# systemctl daemon-reload
[root@server1 docker]# systemctl restart docker
[root@server1 docker]# netstat -antlp | grep :2376
tcp6 0 0 :::2376 :::* LISTEN 17776/dockerd
2、jenkins网页设置使用
Docker Host URI : tcp://172.25.7.1:2376 #2376端口是加密的需要证书
1)生成客户端证书
[root@server1 docker]# openssl genrsa -out key.pem 4096
[root@server1 ~]# echo extendedKeyUsage = clientAuth >> extfile.cnf
[root@server1 docker]# openssl req -subj "/CN=client" -sha256 -new -key key.pem -out client.csr
[root@server1 ~]# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
Client Key:[root@server1 docker]# cat key.pem
Client Certificate:[root@server1 docker]# cat cert.pem
Server CA Certificate:[root@server1 docker]# cat ca.pem
3、harbor仓库和docker之间的认证
将harbor仓库主机的/etc/docker/cert.d拷贝到docker主机中
4、测试
手动测试
成功上传
成功使用harbor主机中的docker构建拉取上传镜像成功
[root@server3 docker]# curl 172.17.0.2 #成功访问
二、将任务简单的给远端docker主机
重新部署一台server4-docker主机
1、安装ssh
2、点击系统配置
jenkins主机可以直接通过ssh给远程docker主机发送命令及文件
3、认证证书
[root@server1 docker]# scp -r certs.d/ server4:/etc/docker/
4、网页传送命令
docker ps -a | grep webserver && docker rm -f webserver
docke rmi nginx
docker run -d --name webserver -p80:80 nginx