整體可分為以下幾個步驟:
1,建立springboot項目
2,搭建docker私服庫
3,build鏡像并上傳到私服庫
4,搭建docker swarm叢集
5,搭建jenkins并建構部署
示範系統使用centos7,jdk1.8
1,建立Springboot項目:
在eclipse上建立maven項目,在pom.xml中引入相應的包,如下所示:
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.spring</groupId>
<artifactId>mySpringboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mySpringboot</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>ramer</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.0.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 添加docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>docker私服庫的位址與端口/learn:mySwarm</imageName>
<forceTags>true</forceTags>
<baseImage>docker.io/java</baseImage>
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
2, 搭建docker私服庫
2.1 下載下傳安裝docker環境
直接使用線上安裝,在終端輸入指令: yum install docker
下載下傳完成後啟動docker服務:service docker start
成功啟動後輸入:docker version檢視docker資訊,如下圖所示:
2.2 docker常用指令
docker run :執行鏡像生成容器
docker ps –a:檢視所有容器
docker pull:拉取鏡像
docker push:上傳鏡像
docker start:運作容器
docker stop:停止容器
docker rm:删除容器
docker rmi:删除鏡像
docker logs:檢視容器日志
docker tag:修改鏡像名
docker images:檢視所有鏡像
以上是平時用的比較多的docker指令,想了解更多的指令請百度
2.3 拉取私服庫鏡像
在終端輸入: docker pull registry
把鏡像下載下傳完後修改鏡像名:
docker tag docker.io/:registry192.168.230.10:5000/learn:registry
說明:docker tag後面分為兩部分中間以空格隔開,空格的左邊是要修改的原始鏡像,右邊是修改後的鏡像,每個鏡像名的組成都由registry + tag形成唯一辨別,例如192.168.230.10:5000/learn這個是鏡像存放的具體路徑,registry這個是鏡像标簽名tag,必須要按照這種格式命名,否則無法上傳到私服庫
修改鏡像名後輸入: docker run -p 192.168.230.10:5000:5000 -v/opt/data/registry:/var/lib/registry -i -t -d docker.io/registry
生成并運作容器,這樣一個docker私服庫就已經搭建好了
我們把剛才修改鏡像名後的鏡像上傳到docker私服庫
docker push 192.168.230.10:5000/learn:registry
這裡會報錯,編輯配置檔案::
vi /etc/docker/daemon.json
添加内容:"insecure-registries":["docker私有庫的位址"]
設定搭建好的docker私服庫IP與端口
再次push剛才的鏡像,成功上傳
輸入: curl http://192.168.230.10:5000/v2/_catalog可以查詢私服庫資訊,如下圖所示
learn就是私服庫存放鏡像的檔案夾,再查詢這個檔案夾下的鏡像,輸入:
curl http://192.168.230.10:5000/v2/learn/tags/list
通過docker pull拉取鏡像,如:docker pull 192.168.230.10:5000/learn:registry
這裡是拉取私服庫中的鏡像,根據你的鏡像命名去私服庫中查找,如果隻提供了tag名則預設去docker官方的倉庫中拉取,如我們之前拉取的服務庫鏡像,docker pull registry
3,build鏡像并上傳到私服庫
3.1 build鏡像并上傳到dock伺服器
回到我們之前建立的springboot項目,找到本地項目根目錄,如我的是D:\springbootTest\mySpringboot
打開cmd進入到此目錄中輸入以下指令:
mvn clean package docker:build,如下圖所示
注意:這裡會報錯,原因是本地沒有安裝docker,無法執行docker指令
3.2 擷取docker指令
通常有2種情況擷取docker指令
1,本地安裝docker
2,開啟docker遠端api
這裡我們使用之前安裝好的docker環境
1,先在本地環境變量中加入docker_host變量,如下圖所示
2,然後在docker服務中,編輯配置檔案
vi /lib/systemd/system/docker.service,如下圖所示在紅框位置添加紅框内的内容
然後重新開機docker
systemctl daemon-reload
systemctl restart docker.service
再在cmd中執行mvn clean package docker:build,還是會報錯,原因是對應的2375端口沒有被開放,進入到/sbin目錄中執行 iptables -I INPUT -p tcp --dport 2375 -j ACCEPT然後再次打包,成功上傳
然後在docker伺服器輸入docker images可以看到鏡像已經上傳到伺服器,然後通過
docker push指令把鏡像上傳到私服庫
4,搭建docker swarm叢集
為了示範,我們用兩台伺服器就好了
192.168.230.10(主)
192.168.230.11(從)
4.1 pull docker swarm鏡像
在主機上執行:docker pull swarm,安裝swarm插件
安裝好插件後執行:
docker swarm init --advertise-addr192.168.230.10 初始化一個叢集的master伺服器
傳回以下資訊:
記住這裡的token 這個token是叢集的唯一辨別,隻有根據這個token才能加入docker叢集中
然後在從機上輸入:
docker swarm join --token SWMTKN-1-5fli7xt3s4hbt3pghkmaosgz98ttvmnd1t5lolnkfn446s6gpj-15893cufutsyuc7ewg89iwhz3 192.168.2.10:2377
使伺服器加入到這個docker叢集中
然後在主機上輸入
docker node ls 檢視叢集的資訊,如下圖
可以看到辨別有leader的是叢集的master伺服器,其他的是從機
4.2 docker swarm常用指令
Docker swarm init:初始化一個叢集
Docker swarm join:加入一個叢集
Docker node ls:檢視叢集的資訊
Docker service create:建立一個叢集服務
Docker service ls:檢視叢集的服務
Docker service rm:删除一個叢集服務
還有更多swarm指令,請百度
4.3 部署一個docker swarm叢集項目
用之前從docker私服庫中拉取的鏡像,在主機上輸入:
docker service create –replicas 2 –p8000:8000 –name mySwarm 192.168.230.10:5000/learn:mySwarm
這樣就建立了一個docker swarm叢集服務,這裡的replicas是部署幾台伺服器,swarm叢集會先從本地找有沒有對應的鏡像,如果有則直接run該鏡像,如果沒有則從docker私服庫上拉取,然後一個伺服器一個伺服器run鏡像生成容器
然後輸入docker service ls:可以看到目前服務的情況
這樣,我們就簡單的初步實作了一個docker swarm的叢集
5,搭建jenkins并建構部署
5.1 拉取鏡像
直接在終端機(jenkins可随意搭建在任意一台伺服器)輸入:
Docker pull Jenkins
下載下傳完鏡像後輸入;
docker run -p 8080:8080 -e"DOCKER_HOST=tcp://192.168.230.10:2375" --name myJenkins -u root -v/jenkins/:/var/jenkins_home -d docker.io/jenkins
這裡的docker_host跟前面說的原理一樣,因為jenkins鏡像run出來的容器本身是沒有安裝docker的,是以我們直接從docker伺服器擷取docker指令
這裡的-u root是為了把目前運作jenkins的使用者換做root
然後輸入docker ps –a可以發現容器并沒有跑起來,輸入docker logs + 容器ID,檢視容器日志提示沒有權限,輸入setenforce 0 然後再執行容器就成功run起來了
5.2 配置jenkins
Jenkins的初始化請參照百度,這裡就不重複了
注意:run完之後浏覽器輸入localhost:8080出現jenkins界面的時候在安裝插件步驟可能會報以下錯誤:
No such plugin: cloudbees-folder
是在jenkins鏡像run的過程中,這個插件下載下傳失敗,可以浏覽器輸入
localhost:8080/restart 先跳過這個步驟,然後重新去啟動jenkins,如果還不行就跳過這個步驟後自己上傳手動下載下傳的插件
先安裝要用到的插件,進入系統管理-管理插件-可選插件,在搜尋框中輸入要安裝的插件
MavenIntegration plugin
這個插件是為了可以建立一個maven項目
PublishOver SSH
這個插件是為了jenkins建構完之後遠端登入到docker swarm叢集中的master機器統一部署
配置 SSH:
參照百度生成秘鑰的方式生成公鑰和私鑰,
http://blog.csdn.net/u010947098/article/details/61922969
然後我們生成一個maven項目,配置如圖所示:
Exec command中的指令:
docker service rm mySwarm;
先删除舊的服務
docker rmi 192.168.230.10:5000/learn:mySwarm;
然後删除舊的鏡像
docker service create --replicas 2 -p8000:8000 --name mySwarm 192.168.230.10:5000/learn:mySwarm
建立新的服務
配置完之後點選立即建構,第一次建構會下載下傳很多包,需要一點時間,請耐心等待,最終如下圖所示:
先成功build鏡像
然後push鏡像到docker私服庫
建構完成後通過SSH登入到docker swarm叢集的master統一部署代碼
至此整個流程就結束了,還有很多細節需要完善….