ubuntu下的安裝。使用snap應該是最簡單的方法。java
#安裝docker
sudo snap install docker
#移除docker
sudo snap remove docker
查看snap的安裝列表linux
能夠看到本次安裝的docker版本是18.06.1-cegit
lgj@lgj-Lenovo-G470:~$ snap list docker Name Version Rev Tracking Publisher Notes docker 18.06.1-ce 384 stable canonical* -
測試docker是否安裝成功github
lgj@lgj-Lenovo-G470:~$ docker version Client: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.4 Git commit: e68fc7a Built: Tue May 7 17:57:34 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.06.1-ce API version: 1.38 (minimum version 1.12) Go version: go1.10.4 Git commit: e68fc7a Built: Tue May 7 17:57:34 2019 OS/Arch: linux/amd64 Experimental: false
docker經常使用命令web
#查看docker支持的全部命令
docker
#查看docker命令的使用方式
docker images --help
docker ps --help
#查看安裝的鏡像
docker images [OPTIONS] [REPOSITORY[:TAG]]
#查看運行的容器
docker ps
#查看全部的容器
docker ps -a
#刪除鏡像
docker rmi -f [REPOSITORY[:TAG]]
#刪除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
更多命令參考官方命令文檔spring
dockerfile使用docker
docker的更多使用方法參考shell
<Docker開發實踐><Docker開發指南><沒什麼難的Docker入門與開發實戰><第一本DOCKER書>ubuntu
Jenkins是一個獨立的開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。前身是Hudson是一個可擴展的持續集成引擎。可用於自動化各類任務,如構建,測試和部署軟件。Jenkins能夠經過本機系統包Docker安裝,甚至能夠經過安裝Java Runtime Environment的任何機器獨立運行。springboot
選擇下載war包
下載以後直接運行便可,指定端口爲8097,訪問地址爲http://localhost:8097
java -jar jenkins.war --httpPort=8097
運行後會在用戶目錄下生成.jenkins工做目錄。
首次登陸須要用戶名和密碼
用戶名爲:admin
密碼查看 .jenkins/secrets/initialAdminPassword 文件中。
lgj@lgj-Lenovo-G470:~$ cat .jenkins/secrets/initialAdminPassword 7d3bc703deb449debce0a25dfd3a00ad
安裝git插件
系統管理-插件管理
配置jdk和maven
系統管理-全局工具配置
能夠選擇本地或者自動安裝
jemkins更多使用方式參考官方文檔 <jenkins權威指南>
只有一個controller類
@RestController @RequestMapping("/web") public class WebController { @RequestMapping("/demo") public String demo(){ return new Random().nextInt(100)+""; } }
訪問端口爲:8452
server: port: 8452
上傳到git,倉庫地址爲https://github.com/lgjlife/web-demo
首頁-新建任務-構建一個maven項目(項目名稱爲:web-demo-docker)
建立成功後首頁能夠看到項目列表
項目配置
點擊項目名稱---配置---進入配置頁面
1.配置git倉庫
jenkins構建時會自動從git倉庫拉取項目文件。
git@github.com:lgjlife/web-demo.git
注意url的寫法,寫錯會自動報錯。因爲是從公共倉庫拉取,因此沒有進行認證配置。
本次獲取的是master分支。
2.配置觸發器
觸發器就是定義何種條件下jenkins開始構建項目
這裏選擇輪詢,*/1 * * * * 說明每隔一分鐘就進行一次構建,這裏只有在git倉庫更新以後才起做用。也就是每分鐘會去檢測git倉庫源碼是否更新,不更新則不進行構建。
更多表達式的說明點擊後面的?圖標查看。
3.構建操做
這裏選擇運行兩個shell腳本,腳本後面進行說明
jenkins項目配置完成。
注意dockerfile位於主工程目錄下。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定該Main Class爲全局的惟一入口 --> <mainClass>com.demo.web.WebApplication</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal><!--能夠把依賴的包都打包到生成的Jar包中--> </goals> </execution> </executions> </plugin>
<!-- docker 插件配置--> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.10</version> <configuration> <repository>lgj/webdemo</repository> <tag>1.0</tag> <buildArgs> <JAR_FILE>/target/web-1.0.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build>
說明:
dockerfile-maven-plugin ,maven 的docker插件
<repository>lgj/webdemo</repository>:鏡像名稱
<tag>1.0</tag>:鏡像標籤
一個鏡像的完整標識是:鏡像倉庫/鏡像名稱:鏡像標籤
<JAR_FILE>/target/web-1.0.jar</JAR_FILE>:構建時的傳入dockerfile的參數
#基於jdk8鏡像進行構建,建立的鏡像已經配置好java環境
FROM openjdk:8
#上述的pom中配置的JAR_FILE將會傳入到該參數
#也能夠在這裏直接配置 ARG JAR_FILE=/target/web-1.0.jar
#用於配置spingboot應用maven打包生成的jar文件 ARG JAR_FILE
#在鏡像中建立一個工做目錄 run mkdir /worker
#將jar文件複製到工做目錄中 add ${JAR_FILE} /worker
#暴露鏡像的端口8452,其餘端口不開放 expose 8452
#鏡像啓動時執行的命令,配置多條僅執行最後一條
#這裏配置啓動jar文件: java -jar /worker/web-1.0.jar entrypoint ["java","-jar","/worker/web-1.0.jar"]
用於根據dockerfile建立docker腳本
mvn clean mvn package -DskipTests docker rmi -f lgj/webdemo:1.0 mvn dockerfile:build docker images
先使用mvn進行打包
再刪除舊的鏡像,因爲不能覆蓋建立,所以須要刪除再建立。
因爲已經pom中已經配置docker插件,能夠直接調用:mvn dockerfile:build 進行構建。
用於建立並運行docker容器
docker ps -a docker stop webdemo-8452 docker rm -f webdemo-8452 docker run -d --name webdemo-8452 -p 8452:8452 lgj/webdemo:1.0 docker ps -a
和建立鏡像相似,運行以前必須先刪除容器。
docker run 說明:
-d:之後臺進程的方式運行。
--name :指定容器的名稱爲 webdemo-8452
-p : 指定主機和容器的端口映射。docker是基於主機運行的,數據--》主機端口--》容器端口。所以須要配置端口映射。通常配置成同樣的。這裏只須要訪問springboot應用的8452,因此配置成8452.
lgj/webdemo:1.0: 鏡像名稱
全部文件編寫完成後,從新pull到git倉庫。
點擊項目頁面的當即構建
能夠看到下方的構建歷史。
點擊進去查看每次構建的具體狀況。
點擊控制檯輸出,能夠查看構建過程的輸出
構建過程:
1.拉取遠端的git倉庫文件到jenkins的工做目錄/home/lgj/.jenkins/workspace/web-demo-docker
2. 執行配置的相關命令和操做。
輸出 Finished: SUCCESS 則表示構建成功。
??? admin ?? ??? ????? /home/lgj/.jenkins/workspace/web-demo-docker ? No credentials specified > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url git@github.com:lgjlife/web-demo.git # timeout=10 Fetching upstream changes from git@github.com:lgjlife/web-demo.git > git --version # timeout=10 > git fetch --tags --force --progress git@github.com:lgjlife/web-demo.git +refs/heads/*:refs/remotes/origin/* > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 Checking out Revision 074769c6e558772ddcaf133e92641995cbf3c7ef (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f 074769c6e558772ddcaf133e92641995cbf3c7ef Commit message: "docker images" > git rev-list --no-walk 074769c6e558772ddcaf133e92641995cbf3c7ef # timeout=10 [web-demo-docker] $ /bin/sh -xe /tmp/jenkins5091262134747837972.sh + echo ======================================================================================= ======================================================================================= + pwd /home/lgj/.jenkins/workspace/web-demo-docker + ./build.sh [[1;34mINFO[m] Scanning for projects... [[1;34mINFO[m] [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [1mBuilding web 1.0[m [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-clean-plugin:3.1.0:clean[m [1m(default-clean)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Deleting /home/lgj/.jenkins/workspace/web-demo-docker/target [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [1;32mBUILD SUCCESS[m [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] Total time: 2.595 s [[1;34mINFO[m] Finished at: 2019-06-02T13:07:18+08:00 [[1;34mINFO[m] Final Memory: 12M/188M [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] Scanning for projects... [[1;34mINFO[m] [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [1mBuilding web 1.0[m [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:3.1.0:resources[m [1m(default-resources)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Using 'UTF-8' encoding to copy filtered resources. [[1;34mINFO[m] Copying 1 resource [[1;34mINFO[m] Copying 1 resource [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:3.8.0:compile[m [1m(default-compile)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Changes detected - recompiling the module! [[1;34mINFO[m] Compiling 2 source files to /home/lgj/.jenkins/workspace/web-demo-docker/target/classes [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:3.1.0:testResources[m [1m(default-testResources)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Using 'UTF-8' encoding to copy filtered resources. [[1;34mINFO[m] skip non existing resourceDirectory /home/lgj/.jenkins/workspace/web-demo-docker/src/test/resources [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:3.8.0:testCompile[m [1m(default-testCompile)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] No sources to compile [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.22.1:test[m [1m(default-test)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Tests are skipped. [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mmaven-jar-plugin:3.1.0:jar[m [1m(default-jar)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Building jar: /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0.jar [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mspring-boot-maven-plugin:2.1.0.RELEASE:repackage[m [1m(repackage)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Layout: ZIP [[1;34mINFO[m] Replacing main artifact /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0.jar [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mspring-boot-maven-plugin:2.1.0.RELEASE:repackage[m [1m(default)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] Layout: ZIP [[1;34mINFO[m] Replacing main artifact /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0.jar [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [1;32mBUILD SUCCESS[m [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] Total time: 9.671 s [[1;34mINFO[m] Finished at: 2019-06-02T13:07:30+08:00 [[1;34mINFO[m] Final Memory: 32M/330M [[1;34mINFO[m] [1m------------------------------------------------------------------------[m Untagged: lgj/webdemo:1.0 [[1;34mINFO[m] Scanning for projects... [[1;34mINFO[m] [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [1mBuilding web 1.0[m [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [[1;34mINFO[m] [1m--- [0;32mdockerfile-maven-plugin:1.4.10:build[m [1m(default-cli)[m @ [36mweb[0;1m ---[m [[1;34mINFO[m] dockerfile: null [[1;34mINFO[m] contextDirectory: /home/lgj/.jenkins/workspace/web-demo-docker [[1;34mINFO[m] Building Docker context /home/lgj/.jenkins/workspace/web-demo-docker [[1;34mINFO[m] Path(dockerfile): null [[1;34mINFO[m] Path(contextDirectory): /home/lgj/.jenkins/workspace/web-demo-docker [[1;34mINFO[m] [[1;34mINFO[m] Image will be built as lgj/webdemo:1.0 [[1;34mINFO[m] [[1;34mINFO[m] Step 1/6 : FROM openjdk:8 [[1;34mINFO[m] [[1;34mINFO[m] Pulling from library/openjdk [[1;34mINFO[m] Digest: sha256:0e25c8428a56e32861fe996b528a107933155c98fb2a9998a4a4e9423aad734d [[1;34mINFO[m] Status: Image is up to date for openjdk:8 [[1;34mINFO[m] ---> 4a0a42e87cf3 [[1;34mINFO[m] Step 2/6 : ARG JAR_FILE [[1;34mINFO[m] [[1;34mINFO[m] ---> Using cache [[1;34mINFO[m] ---> dc2f959e4d9c [[1;34mINFO[m] Step 3/6 : run mkdir /worker [[1;34mINFO[m] [[1;34mINFO[m] ---> Using cache [[1;34mINFO[m] ---> 87e001b16580 [[1;34mINFO[m] Step 4/6 : add ${JAR_FILE} /worker [[1;34mINFO[m] [[1;34mINFO[m] ---> 7d6b791017fd [[1;34mINFO[m] Step 5/6 : expose 8452 [[1;34mINFO[m] [[1;34mINFO[m] ---> Running in f7989737ef59 [[1;34mINFO[m] Removing intermediate container f7989737ef59 [[1;34mINFO[m] ---> aa553eea45de [[1;34mINFO[m] Step 6/6 : entrypoint ["java","-jar","/worker/web-1.0.jar"] [[1;34mINFO[m] [[1;34mINFO[m] ---> Running in 7133f5214111 [[1;34mINFO[m] Removing intermediate container 7133f5214111 [[1;34mINFO[m] ---> 10e0d3d344d6 [[1;34mINFO[m] Successfully built 10e0d3d344d6 [[1;34mINFO[m] Successfully tagged lgj/webdemo:1.0 [[1;34mINFO[m] [[1;34mINFO[m] Detected build of image with id 10e0d3d344d6 [[1;34mINFO[m] Building jar: /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0-docker-info.jar [[1;34mINFO[m] Successfully built lgj/webdemo:1.0 [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] [1;32mBUILD SUCCESS[m [[1;34mINFO[m] [1m------------------------------------------------------------------------[m [[1;34mINFO[m] Total time: 57.257 s [[1;34mINFO[m] Finished at: 2019-06-02T13:08:31+08:00 [[1;34mINFO[m] Final Memory: 25M/362M [[1;34mINFO[m] [1m------------------------------------------------------------------------[m REPOSITORY TAG IMAGE ID CREATED SIZE lgj/webdemo 1.0 10e0d3d344d6 2 seconds ago 504MB <none> <none> 67b2eee0f0b6 2 hours ago 504MB <none> <none> 88b1d5b63784 2 hours ago 504MB <none> <none> e60203504301 2 hours ago 504MB <none> <none> 11f593fd9537 2 hours ago 504MB openjdk 8 4a0a42e87cf3 3 days ago 488MB + ./run.sh CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1a4fdf8f230 67b2eee0f0b6 "java -jar /worker/w���" 2 hours ago Up 2 hours 0.0.0.0:8452->8452/tcp webdemo-8452 webdemo-8452 7fe8d8d9cdff88f8281e8b0f6c8ff5e010844dd40b82829f5952d589c6d183b2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7fe8d8d9cdff lgj/webdemo:1.0 "java -jar /worker/w���" 2 seconds ago Up Less than a second 0.0.0.0:8452->8452/tcp webdemo-8452 Finished: SUCCESS
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!