應用Docker部署
下面就介紹如何將之前的spring Boot項目部署在Docker上,首先,在應用根目錄下建立
Dockerfile 文件,以使用 Maven 構建爲例,選用 maven:3.3.3 官方鏡像,官方維護的 Maven 鏡像依賴於 Java 鏡像構建,所以我們不需要使用
Java 鏡像,具體內容如下:
- FROM maven:3.3.3
- ADD pom.xml /tmp/build/
- RUN cd /tmp/build && mvn -q dependency:resolve
- ADD src /tmp/build/src
- #構建應用
- RUN cd /tmp/build && mvn -q -DskipTests=true package \
- #拷貝編譯結果到指定目錄
- && mv target/*.jar /app.jar \
- #清理編譯痕跡
- && cd / && rm -rf /tmp/build
- VOLUME /tmp
- EXPOSE 8080
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- 因爲 Spring Boot 框架打包的應用是一個包含依賴的 jar 文件,內嵌了 Tomcat 和 Jetty 支持,所以我們只需要使用包含 Java 的 Maven 鏡像即可,不需要 Tomcat 鏡像。
- 爲了減少鏡像大小,在執行 Maven 構建之後,清理了構建痕跡。
- 在 Dockerfile 文件的最後,使用 ENTRYPOINT 指令執行啓動 Java 應用的操作。
構建 Docker 鏡像:
- docker build -t docker-demo-spring-boot . //注意後面的 . 表示當前路徑下
從鏡像啓動容器:
- docker run -d -p 8080:8080 docker-demo-spring-boot
完成部署:
URL訪問,可通過docker ip查看應用的虛擬地址。
Docker Compose編排
Docker Compose是用於定義和組裝運行多容器分佈式應用的工具,它提供一個簡單的基於YAML語言的docker-compose.yml配置文件。 通常,我們使用docker定義和運行復雜的應用,使用docker compose,在一個文件裏定義多容器應用的啓動順序,起到服務編排的作用。
編寫 docker-compose.yaml 文件
- web:
- build: .
- ports:
- - "8080:8080"
- links:
- - mongodb:mongodb
- mongodb:
- image: daocloud.io/library/mongo:latest
- ports:
- - "27017:27017"
- 基於我們應用構建的 docker-demo-java-mongo 鏡像,用來提供 Web 服務
- 基於 DaoCloud 提供的 MongoDB 鏡像,提供存儲服務
- 通過 links 爲 web 關聯 mongo 服務
啓動 Docker Compose
- docker-compose up
瀏覽器訪問
以web應用爲訪問路徑,數據將關聯存儲到MongoDB上。