咱們以前寫的java微服務部署服務器都比較麻煩,須要先在服務器裝好java,配置好環境變量,而後上傳war,jar包到服務器部署。尤爲是以前沒有使用springboot的時候還要安裝tomact,今天就來講說使用docker部署。
pom文件:java
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mike</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
啓動類:web
package com.mike.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
編寫一個簡單的api接口:spring
package com.mike.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class Hello { @GetMapping("/say/{word}") public String say(@PathVariable("word") String word) { return String.format("heelo,%s", word); } }
Dockerfile:docker
FROM java:8 MAINTAINER mike 342746156@qq.com COPY target/demo-0.0.1-SNAPSHOT.jar hello.jar ENTRYPOINT ["java","-jar","/hello.jar"] EXPOSE 8080
Dockerfile 指定了構建docker鏡像的步驟。apache
FROM:第一層咱們須要一個jdk,咱們申明使用 java:8, docker引擎會幫咱們自動從公共倉庫下載,並當道咱們的運行容器環境中。api
MAINTAINER: 申明瞭做者,能夠不寫springboot
COPY:把maven打包好的jar添加到容器中並重命名爲 hello.jarbash
ENTRYPOINT: 要執行的命令以及參數。 使用java -jar 啓動咱們的應用服務器
EXPOSE:暴漏容器中的8080端口。這樣咱們就能夠映射宿主機的端口到8080端口,從而訪問容器中的應用了app
咱們首先要在工程目錄使用mvn install 生成應用的jar包,在target目錄下會有生成的jar包。本地maven倉庫中也有咱們的jar包。
如今開始製做鏡像。在Dockerfile所在目錄執行docker命令:
docker build -t mike-hello .
注意 . 表示當前目錄,不可少。這樣咱們的鏡像就製做成功了。運行docker 命令:
docker images
就能夠看到咱們構建好的鏡像,可是咱們的應用尚未啓動起來。接下來就用這個鏡像啓動一個容器運行咱們的應用
運行docker命令:
docker run -d -p 127.0.0.1:8080:8080 mike-hello
-d聲明後臺守護進程的方式運行, -p聲明宿主機和容器內部的端口映射,將宿主機本地的8080端口映射到容器內部8080端口,在製做鏡像的時候咱們就將8080端口暴漏出來了。如今運行docker命令:
docker ps
就能夠看到當前啓動的容器,就會看到咱們的應用了。如今測試一下,在宿主機上訪問:http://localhost:8080/api/say/docker
看到返回消息: heelo,docker。測試成功
如今咱們進入容器內部看看:
docker exec -ti 咱們的容器id bash
這樣就能夠查看容器中的目錄,使用curl命令測試下容器內部咱們的應用
curl http://localhost:8080/api/say/docker
同樣能夠看到咱們的消息正常返回,如今若是你想在部署一個,那麼就很簡單了:
docker run -d -p 127.0.0.1:8081:8080 mike-hello docker run -d -p 127.0.0.1:8082:8080 mike-hello docker run -d -p 127.0.0.1:8083:8080 mike-hello
docker簡化了咱們的應用部署,只要製做好了鏡像,你想部署多少,都是一個命令就搞定,不用去在重複配置一次應用環境。並且藉助私有倉庫,你能夠直接在其餘多個服務器也依靠一條命令居立刻啓動一個應用。如今咱們已經簡單掌握瞭如何去使用docker,可是構建部署仍是要本身去輸命令搞,仍是有點麻煩,咱們只想寫完本身的代碼上傳代碼到倉庫,剩下的就一鍵搞定。那麼下節課就來使用jenkins來實現CICD,完全解放你。
歡迎關注個人公中號:mike啥都想搞
,一塊兒交流學習