windows環境 springboot+docker開發環境搭建與hello word
1,下載安裝 docker toolbox
下載地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
docker toolbox 是一個工具集,它主要包含以下一些內容:
Docker CLI 客戶端,用來執行docker引擎建立映象和容器 Docker Machine. 可以讓你在windows的命令列中執行docker引擎命令 Docker Compose. 用來執行docker-compose命令 Kitematic. 這是Docker的GUI版本 Docker QuickStart shell. 這是一個已經配置好Docker的命令列環境 Oracle VM Virtualbox. 虛擬機器
下載完成之後直接點選安裝,安裝成功後,桌邊會出現三個圖示,入下圖所示:
點選 Docker QuickStart 圖示來啟動 Docker Toolbox 終端。
2,新建一個springboot專案
新增一個預設的controller
@RestController public class DefaultController { @RequestMapping("/") public String home() { return "Hello Docker World "; } }
啟動這個專案檢查是否在我docker情況下正常訪問
3,修改pox.xml改為docker編譯
properties屬性節點加入:
<!--properties節點中設定docker映象的字首“springboot”--> <docker.image.prefix>springio</docker.image.prefix>
build節點修改為
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin --> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.war</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin --> </plugins> </build>
4,新增DockerFile
目錄結構
檔案內容
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD demo-docker-0.0.1-SNAPSHOT.war app.war RUN sh -c 'touch /app.war' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.war" ]
解釋下這個配置檔案:
VOLUME 指定了臨時檔案目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,並連結到容器的/tmp。改步驟是可選的,如果涉及到檔案系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 資料資料夾,因為 Spring Boot 使用的內嵌 Tomcat 容器預設使用/tmp作為工作目錄
專案的 jar 檔案作為 "app.war" 新增到容器的
ENTRYPOINT 執行專案 app.war。為了縮短 Tomcat 啟動時間,新增一個系統屬性指向 "/dev/urandom" 作為 Entropy Source
5,新增maven編輯命令進行編輯
mvn package docker:build
點選execute開始執行編譯成docker image,正常情況下,會看到下面的步驟資訊
[INFO] Building image springio/demo-docker Step 1/6 : FROM openjdk:8-jdk-alpine ---> 2cfb1dc1f0c8 Step 2/6 : VOLUME /tmp ---> Using cache ---> 0641ab6474fc Step 3/6 : ADD demo-docker-0.0.1-SNAPSHOT.war app.war ---> c01da61fbe6d Step 4/6 : RUN sh -c 'touch /app.war' ---> Running in c8946506f292 Removing intermediate container c8946506f292 ---> 12383d2f8329 Step 5/6 : ENV JAVA_OPTS="" ---> Running in 07d5bebe9e00 Removing intermediate container 07d5bebe9e00 ---> e8f8f4242553 Step 6/6 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.war" ] ---> Running in 39ce4bf989ba Removing intermediate container 39ce4bf989ba ---> dca2a0984c5d ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null} Successfully built dca2a0984c5d Successfully tagged springio/demo-docker:latest [INFO] Built springio/demo-docker [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.386 s [INFO] Finished at: 2019-01-23T16:56:36+08:00 [INFO] Final Memory: 57M/470M [INFO] ------------------------------------------------------------------------ Process finished with exit code 0
6, 執行專案
直接從"Oracle VM VirtualBox"介面進入default虛擬機器,不需要輸入密碼即可進入root環境
輸入下列命令檢視已存在的image
docker images
得到結果
輸入下面命令啟動專案
docker run -p 8080:8080 -t springio/demo-docker
啟動資訊如下:
._______ _ _ /\\ / ___'_ __ _ _(_)_ ____ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/___)| |_)| | | | | || (_| |) ) ) ) '|____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::(v2.1.1.RELEASE) 2019-01-23 09:02:49.987INFO 1 --- [main] c.e.demodocker.DemoDockerApplication: Starting DemoDockerApplication v0.0.1-SNAPSHOT on 740b53e853e9 with PID 1 (/app.war started by root in /) 2019-01-23 09:02:50.001INFO 1 --- [main] c.e.demodocker.DemoDockerApplication: No active profile set, falling back to default profiles: default 2019-01-23 09:02:53.582INFO 1 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat initialized with port(s): 8080 (http) 2019-01-23 09:02:53.685INFO 1 --- [main] o.apache.catalina.core.StandardService: Starting service [Tomcat] 2019-01-23 09:02:53.692INFO 1 --- [main] org.apache.catalina.core.StandardEngine: Starting Servlet Engine: Apache Tomcat/9.0.13 2019-01-23 09:02:53.722INFO 1 --- [main] o.a.catalina.core.AprLifecycleListener: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] 2019-01-23 09:02:54.560INFO 1 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]: Initializing Spring embedded WebApplicationContext 2019-01-23 09:02:54.561INFO 1 --- [main] o.s.web.context.ContextLoader: Root WebApplicationContext: initialization completed in 4389 ms 2019-01-23 09:02:55.178INFO 1 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor: Initializing ExecutorService 'applicationTaskExecutor' 2019-01-23 09:02:55.671INFO 1 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat started on port(s): 8080 (http) with context path '' 2019-01-23 09:02:55.681INFO 1 --- [main] c.e.demodocker.DemoDockerApplication: Started DemoDockerApplication in 6.796 seconds (JVM running for 7.909)
使用 docker ps 檢視已執行的容器程序
表格欄位說明
CONTAINER_ID表示容器ID IMAGE表示映象名稱 COMMAND表示啟動容器時執行的命令 CREATED表示容器的建立時間 STATUS表示容器執行的狀態。UP表示執行中,EXITED表示已停止 PORTS表示容器對外的埠號 NAMES表示容器名稱,該名稱預設由Docker自動生成,也可使用docker run 命令的 -name 選項自行指定
幾個docker命令
docker start [CONTAINER_ID] :啟動一個或多個已經被停止的容器 docker stop [CONTAINER_ID] :停止一個執行中的容器 docker restart [CONTAINER_ID]:重啟容器
7,測試:
訪問你虛擬就ip地址+啟動時指定的埠號訪問spring boot專案
可以在虛擬機器中通過 ifconfig檢視
輸入ifconfig命令可以看到default有三個網段的IP地址,分別為:
docker0: 172.17.0.1,這個是docker的網橋。 eth0:10.0.2.15,這個網段在Ubuntu環境中是沒有的,暫不知道為什麼會多這一個。 eth1:192.168.99.100,這個數宿主機的IP地址。
另外也可以在本地cmd中,使用 docker-machine env 或 docker info 檢視docker環境