Spring Boot + MongoDB 應用的 Docker 化實踐

本文旨在經過將一個具體的 Spring Boot + MongoDB 項目進行 Docker 化處理,從而對 Docker 的基本用法進行一次實踐。該項目 Docker 化後,後端服務訪問數據庫正常,仍然能夠打開後端服務託管的單頁 Web 應用,總之項目運行狀態符合預期。具體使用的項目見 這個 GitHub 倉庫html

學習 Docker 的基本原理、基本用法能夠參考這本開源電子書《Docker — 從入門到實踐》,我以爲這本書寫的算是目前最好的了,至少比一些同類出版書刊好。java

Docker 的基本原理、基本用法均不在這篇文章介紹,想學習 Docker 請參考上面這本開源書,本文進記錄一次項目的 Docker 化實踐。git

1. 環境準備

  • java: JDK 1.8
  • Linux: Ubuntu 17.10.1
  • Docker CE: 17.12.0

2. 官方 Docker 鏡像的獲取

在 Docker Store 中,搜索想要獲取的 Docker 鏡像,而後按照說明獲取便可。github

從 Docker Store 中獲取官方鏡像

2.1 獲取 Java JRE

docker pull store/oracle/serverjre:8

2.2 獲取 Java JRE

docker pull mongo

3. 構建自定義 Docker 容器

Java 項目構建爲 Docker 容器須要以下文件:spring

  • Jar 文件
  • 本地配置文件
  • Dockerfile 文件

Dockerfile 的內容以下所示:docker

# 基礎 JRE 鏡像
FROM store/oracle/serverjre:8

# 修改時區,使得容器時間爲北京時間
RUN echo "Asia/Shanghai" > /etc/timezone

# 將所需項目文件複製進入容器中
WORKDIR /app
ADD ./ClusterDevicePlatform-server-1.8.9-release.jar /app
ADD ./setting /app

# 暴露容器的端口
EXPOSE 30232 8080

# 運行項目
CMD ["java", "-jar", "-Dfile.encoding=UTF-8", "ClusterDevicePlatform-server-1.8.9-release.jar"]

Dockerfile 文件編寫完成後,該 Java 服務器目錄下會有三個文件,其中 setting 文件和 Jar 包爲原始項目的組成部分,需配套使用,setting 必須放在 Jar 包的同級目錄下,示意以下:數據庫

Java 服務器目錄

以後執行以下命令:segmentfault

docker build -t ky-server .

便可開始構建 Java 服務端應用的 Docker 鏡像,生成的鏡像命名爲「ky-server」。後端

Java 服務端應用的 Docker 鏡像構建完成後,執行 docker images 命令,便可獲取本機保存的全部 Docker 鏡像,以下所示:瀏覽器

本機的四個 Docker 鏡像

4. 運行已容器化的 Java 服務端應用

4.1 建立 Docker Network

隨着 Docker 網絡的完善,官方建議將容器加入自定義的 Docker 網絡來鏈接多個容器,下面先建立一個新的 Docker 網絡,並命名爲 bitky

docker network create -d bridge bitky

打開兩個 Shell,分別執行以下兩條指令:

docker run --rm --name kylinked-mongo  -p 27017:27017 --network bitky mongo:latest

docker run --rm --name kylinked-server -p 80:8080 -p 30232:30232 --network bitky ky-server:latest

便可分別打開在兩個 Shell 前臺打開 MongoDB 和 Java 服務端應用,其中 MongoDB 容器的 27017 映射到了操做系統的同名端口,Java 服務器的 8080 端口映射到了操做系統的 80 端口,方便瀏覽器訪問。MongoDB 鏡像直接經過常規方式 pull 便可,本文再也不贅述。

打開一個新的終端查看容器的狀態信息:

docker container ls

從圖中能夠直觀看到端口映射狀態及容器運行狀態。

Docker 容器運行狀態

4.2 Docker 中設置時區爲東八區「北京時間」

容器中的默認時區是 UTC,若是要修改自制 Docker 鏡像的時區,只須要在 Dockerfile 中加入下面兩句就能夠了:

RUN echo "Asia/Shanghai" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata

須要注意的是,本文給出的 Dockerfile 已添加了如上的語句,不須要重複添加該語句。 RUN dpkg-reconfigure -f noninteractive tzdata 是 Ubuntu 修改時區的命令。若是你的自定義鏡像使用的是其餘發行版,那麼這裏的命令也要改變。本文采用的是 JRE 做爲基礎鏡像,通過實驗發現,只須要執行指令的第一句便可。

參考連接

  1. Docker Documentation
  2. Docker 部署 SpringBoot 項目整合 Redis 鏡像作訪問計數 Demo
  3. Spring Boot 應用發佈到 Docker
  4. 一步步帶你構建 Spring Boot + Docker 應用
  5. Docker 中如何設置 container 的時區
相關文章
相關標籤/搜索