本文介紹如何將Docker集成到開發環境,自動構建應用,並使容器擁有獨立的內網IP爲開發人員提供服務。java
術語解釋git
組件介紹github
編輯文件/usr/lib/systemd/system/docker.service
找到ExecStart=/usr/bin/dockerd -H fd://
修改成ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H fd://
重加載 systemd daemon
systemctl daemon-reload
spring
爲加快下載速度,配置daocloud的加速鏡像。docker
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://7515421f.m.daocloud.io
默認狀況下,Docker建立的容器運行在私有的內部網絡中。
想要賦予每一個容器獨立IP,能夠使用Docker內置的macvlan驅動將容器橋接到宿主機的網卡上,這樣宿主機網段內的其餘主機即可經過IP地址訪問到容器了。shell
首先在宿主機建立一個新網絡,注意網關及子網掩碼與宿主機網絡一致。api
docker network create -d macvlan \ --subnet=10.16.10.0/21 \ --gateway=10.16.8.254 \ -o parent=eth0 sweet
以後建立的容器,若是須要獨立IP,只須要配置--network sweet
參數便可。網絡
docker run -d -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ --restart always \ --name portainer portainer/portainer
docker run -p 8080:8080 \ -v /usr/bin/docker:/usr/bin/docker \ -v /var/jenkins_home:/var/jenkins_home \ --restart always \ --name jenkins jenkins/jenkins:lts-alpine
訪問 http://localhost:9000 。首次登陸需設置管理員密碼,並配置須要管理的Docker Server地址。app
下面演示一個項目的構建計劃如何配置,首先在項目根目錄建立Dockerfile文件,聲明如何構建docker鏡像。
例如我建立的項目中:curl
FROM java:8-alpine RUN mkdir /app WORKDIR /app ADD target/docker-demo.jar /app EXPOSE 9001 ENTRYPOINT ["java","-jar","docker-demo.jar"]
然後,Jenkins中新建一個構建任務,在"Post Steps"部分添加"Execute shell",並作以下配置:
echo "================ Docker Build ================" >> /dev/null docker -H $DOCKER_URL build --force-rm --tag $JOB_NAME:$BUILD_NUMBER $WORKSPACE echo "================ Docker Remove Container ================" >> /dev/null docker -H $DOCKER_URL rm --force $JOB_NAME echo "================ Docker Run ================" >> /dev/null docker -H $DOCKER_URL run -dt \ --network sweet \ --name $JOB_NAME $JOB_NAME:$BUILD_NUMBER
雖然Docker採用了分層的方式存儲鏡像文件,但開發環境的高頻率構建,會很快地填滿硬盤,所以咱們須要按期地刪除無用鏡像文件。
新建一個構建項目clean
配置"Build periodically"爲H 6 * * *
,天天早上6點執行一次清理任務。
配置"Execute shell"以下,刪除48小時前沒有被使用的鏡像文件。
echo $DOCKER_URL docker -H $DOCKER_URL images docker -H $DOCKER_URL image prune -a -f --filter "until=48h" echo "================ After Prune ================" >> /dev/null docker -H $DOCKER_URL images
自此,
Jenkins會按配置好的觸發器執行構建,刪除原有容器(原有的鏡像不會刪除),並啓動一個新版本的容器。
Portainer中能夠查看已經啓動的容器,IP地址,Log日誌,也可手動停用或建立上一版本的容器。
同網段的其餘主機,能夠直接訪問容器的IP地址進行遠程服務調用。
環境搭建完成。