內容目錄
前言
最近在研究公司的 dockerfile、docker-compose和相關 config 檔
順手筆記一下,希望在加深印象之餘
也可以讓有同樣初學者有一個大概的藍圖
關係圖
從上圖可以看到
Dockerfile
會生成 Docker Image
所謂的 Image
,就是生產 Container
的模版
而 Container
則是透過 Image
產生隔離的執行環境
是一組利用 Linux 核心提供的技術來達到把程式或軟體「包裹」在一個可隔離且獨立執行環境的工具
(以下也會把 Container
提供的服務描述為 service
)
而 Docker 就是用來管理這些 Container 的工具
Docker-compose
可以想像是一個腳本
作用在於當我們的 project 想要一次運作多個 service 的時候
我們就得一個一個啟動 container
這麼曠日費時的工作 當然要外包出去啊
所以就有 Docker-compose
就像上面所說的,可以把它想像成是一個腳本
原來設定我們的 project 所需的環境,以及它會用到的 service 們
比如說 docker-compose.yml (YAML 檔案格式,使用空格來縮排,附檔名為 .yml)
version: '3' # 目前使用的版本,可以參考官網:
services: # services 關鍵字後面列出 web, redis 兩項專案中的服務
web:
build: . # Build 在同一資料夾的 Dockerfile(描述 Image 要組成的 yaml 檔案)成 container
ports:
- "5000:5000" # 外部露出開放的 port 對應到 docker container 的 port
volumes:
- .:/code # 要從本地資料夾 mount 掛載進去的資料
links:
- redis # 連結到 redis,讓兩個 container 可以互通網路
redis:
image: redis # 從 redis image build 出 container
Dockerfile
在 Docker-compose
裡有寫到 Dockerfile
我們可以說
Docker-compose
提供了環境的設定
而 Dockerfile
就是在完成環境設定後,執行的 "指令"
一個簡單的 Dockerfile 如下
FROM centos:7 # FROM: 使用到的 Docker Image 名稱,今天使用 CentOS
RUN yum install -y wget # RUN 指令後面放 Linux 指令,用來執行安裝和設定這個 Image 需要的東西
RUN cd /
ADD jdk-8u152-linux-x64.tar.gz / # ADD: 把 Local 的檔案複製到 Image 裡,如果是 tar.gz 檔複製進去 Image 時會順便自動解壓縮。
RUN wget http://apache.stu.edu.tw/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.tar.gz
RUN tar zxvf apache-tomcat-7.0.82.tar.gz
ENV JAVA_HOME=/jdk1.8.0_152 # ENV: 用來設定環境變數
ENV PATH=$PATH:/jdk1.8.0_152/bin
CMD ["/apache-tomcat-7.0.82/bin/catalina.sh", "run"] # CMD: 在指行 docker run 的指令時會直接呼叫開啟 Tomcat Service
參考資料
https://philipzheng.gitbook.io/docker_practice/dockerfile/basic_structure
https://hackmd.io/@titangene/docker-lamp
https://blog.techbridge.cc/2018/09/07/docker-compose-tutorial-intro/