前提條件,docker開啟RESTful API 操作Docker的守護(hù)進(jìn)程:
1、在vim /usr/lib/systemd/system/docker.service中添加如下參數(shù)
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
2、重啟docker
systemctl restart docker
3、執(zhí)行curl命令測(cè)試
curl -v -X GET localhost:2375/_ping
如果使用docker容器部署的Jenkins,要在Jenkins中執(zhí)行docker build 等命令,有三種方式:
第一:安裝Docker-build-step插件。但是如果是Jenkins pipeline腳本就不行了。
第二:調(diào)用docker RESTful API??梢詤⒖糳ocker官網(wǎng)https://docs.docker.com/engine/api/v1.40/#operation/ImageList
第三:把宿主的docker命令共享給容器內(nèi)部使用,。
網(wǎng)上大部分方案都是采用第三種方式,這里也主要說下第三種方式的一些注意事項(xiàng),避免采坑。
因?yàn)楣倬W(wǎng)Jenkins鏡像是以Jenkins用戶運(yùn)行的,所以正常共享unix文件以后,運(yùn)行會(huì)提示權(quán)限不足,網(wǎng)上有些方案是以root用戶運(yùn)行Jenkins。
還有一種方式是創(chuàng)建一個(gè)docker用戶組:
docker run -it -p 80:8080 -d \ -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/bin/docker -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -v /var/jenkins_home:/var/jenkins_home --name jenkins --group-add=$(stat -c %g /var/run/docker.sock) jenkins/jenkins:lts
如果是docker-compose運(yùn)行不支持--group-add指令,需要重新build一下官網(wǎng)的鏡像,Dockerfile如下:
FROM jenkins/jenkins:lts USER root #gid=stat -c %g /var/run/docker.sock RUN groupadd -g 994 docker &&\ usermod -a -G docker jenkins USER jenkins
然后執(zhí)行docker build -t www.zhongjima.net/jenkins:lts .
docker-compose引用新構(gòu)建的鏡像,運(yùn)行測(cè)試docker命令即可(親測(cè)100%正常)。
version: '3' services: jenkins: image: www.zhongjima.net/jenkins:lts container_name: jenkins restart: always ports: - '80:8080' volumes: - '/var/jenkins_home:/var/jenkins_home' - '/etc/localtime:/etc/localtime' - '/var/run/docker.sock:/var/run/docker.sock' - '/usr/bin/docker:/bin/docker' - '/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7' environment: - "JAVA_OPTS=-Duser.timezone=Asia/Shanghai -Xms2048m -Xmx2048m -Xmn512m"