1. 背景java
將系統拆分紅微服務,一個系統可能拆分紅十幾個服務,服務太多會影響發佈和管理,因此容器話以後易於管理和版本發佈,鑑於此將spring cloud微服無docker容器化。git
2.依賴環境github
Centos7.5,Maven環境 和 Docker環境spring
本人機器不是Windows系統,直接裝的Centos系統,可能系統有差別,Windows下應該也能夠,沒有具體測試。docker
3.編寫demo程序app
@RestController public class ProviderController { private static Logger logger = LoggerFactory.getLogger(ProviderController.class); @RequestMapping("/hello") public String hello(){ logger.info("hello debug world "+new Date()); logger.debug("hello debug world "+new Date()); logger.error("hello debug world "+new Date()); return "Hello World"; } }
4.先用maven編譯maven
在編譯時會下載相應的依賴jar包。ide
# 在模塊下面,具備pom文件的那層,執行如下命令 mvn clean && mvn install
5.編寫Dockerfilespring-boot
FROM openjdk:8-jdk-alpine VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
這是一個簡單的Dockerfile,微服務
From是須要的依賴,
COPY是將target下編譯好的包拷貝到docker虛擬環境的根目錄下
ENTRYPOINT是啓動後要執行的命令
6.docker命令編譯image
docker build -t docker-cloud/provider:1.0 .
編譯完成以後執行查看鏡像命令,會看到編譯出來的鏡像,能夠制定不一樣的tag版本。
# 查看docker鏡像
docker images
7.啓動編譯好的鏡像
docker run --name provider -p 8090:8090 -d doceker-cloud/provider:1.0
--name 指定啓動的容器名稱
-p 8090:8090 將本地的8090端口和docker容器的8090端口作映射
-d 是後臺運行docker程序
最後面根的是要啓動的鏡像,我選擇啓動的是docker-cloud/provider鏡像,而且TAG是1.0的版本。
8.啓動以後查看docker有沒有啓動
#查看docker啓動的進程 docker ps
9. 啓動以後能夠看一下容器裏面的樣子
docker exec -it provider /bin/sh
其中app.jar就是咱們打包鏡像時拷貝過去的jar文件,logs目錄是我打的日誌
10.我想看日誌怎麼辦?
在docker裏面命令是頗有限的,不少命令用不了,像tailf這種命令就無法實時查看日誌,因此咱們就要把日誌文件掛載到磁盤的目錄下面。
docker run --name provider -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:1.0
-v 就是將目錄 /home/zhaowei/docker-provider/logs 掛載到容器的logs目錄下,這樣產生的日誌文件就直接能夠在磁盤目錄下查看了。
11. 個人想改啓動端口怎麼辦?
spring cloud程序通常能夠在applicaiton.properties裏指定啓動的端口號,但這樣有個侷限,就是寫死了,可是也無所謂,命令行能夠指定端口參數,命令行裏的參數優先級比配置文件的高,因此在啓動的時候指定端口參數就能夠了,可是咱們的啓動參數是寫在Dockerfile裏面的,因此這裏要修改Dockerfile文件了。
FROM openjdk:8-jdk-alpine VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar /app.jar ${0} ${@}"]
咱們在啓動docker容器時命令是這樣的:
docker run --name provider2 -p 9090:9090 -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:2.0 --server.port=9090
12. 其餘
demo:https://github.com/liuzwei/docker-app.git
參考:這裏是更詳細的說明 https://github.com/spring-guides/top-spring-boot-docker