本文旨在經過將一個具體的 Spring Boot + MongoDB 項目進行 Docker 化處理,從而對 Docker 的基本用法進行一次實踐。該項目 Docker 化後,後端服務訪問數據庫正常,仍然能夠打開後端服務託管的單頁 Web 應用,總之項目運行狀態符合預期。具體使用的項目見 這個 GitHub 倉庫。html
學習 Docker 的基本原理、基本用法能夠參考這本開源電子書《Docker — 從入門到實踐》,我以爲這本書寫的算是目前最好的了,至少比一些同類出版書刊好。java
Docker 的基本原理、基本用法均不在這篇文章介紹,想學習 Docker 請參考上面這本開源書,本文進記錄一次項目的 Docker 化實踐。git
在 Docker Store 中,搜索想要獲取的 Docker 鏡像,而後按照說明獲取便可。github
docker pull store/oracle/serverjre:8
docker pull mongo
Java 項目構建爲 Docker 容器須要以下文件:spring
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 包的同級目錄下,示意以下:數據庫
以後執行以下命令:segmentfault
docker build -t ky-server .
便可開始構建 Java 服務端應用的 Docker 鏡像,生成的鏡像命名爲「ky-server」。後端
Java 服務端應用的 Docker 鏡像構建完成後,執行 docker images
命令,便可獲取本機保存的全部 Docker 鏡像,以下所示:瀏覽器
隨着 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
從圖中能夠直觀看到端口映射狀態及容器運行狀態。
容器中的默認時區是 UTC,若是要修改自制 Docker 鏡像的時區,只須要在 Dockerfile 中加入下面兩句就能夠了:
RUN echo "Asia/Shanghai" > /etc/timezone RUN dpkg-reconfigure -f noninteractive tzdata
須要注意的是,本文給出的 Dockerfile 已添加了如上的語句,不須要重複添加該語句。 RUN dpkg-reconfigure -f noninteractive tzdata
是 Ubuntu 修改時區的命令。若是你的自定義鏡像使用的是其餘發行版,那麼這裏的命令也要改變。本文采用的是 JRE 做爲基礎鏡像,通過實驗發現,只須要執行指令的第一句便可。