剛開始接觸Docker的朋友,一定會常常看到範例寫到dockerfile docker-compose 那這兩個到底有什麼差別呢?
簡單用蛋糕店來舉例,一家店會有常備的蛋糕要每天賣,由於是每天都要產的,當然就有一套相同SOP流程及相同的模具可以做出蛋糕,以確保每天的蛋糕都一樣吧!好啦,這家店就像是Repository,可以有好多蛋糕模具,模具就像是Image,讓你可以重複生產相同的蛋糕,製造出來的蛋糕就是Container,每個蛋糕都是獨立且不會互相敢擾!!
## Dockerfile
FROM python:3.8.2
# 建立資料夾
RUN mkdir web_service
# 進去容器及指到該資料夾
WORKDIR web_service
# 複製所有檔案進去該資料夾
COPY . ./
# 更新apt-get
RUN apt-get update -y 
# 改成台北時區
RUN apt-get update \
    &&  DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
RUN TZ=Asia/Taipei \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata 
# 下載套件
RUN pip install -r requirements.txt
# 設權限
RUN chmod -cR 640 *
# 執行python檔
CMD uvicorn main:app --reload --port 5006
ps. [Day15] 簡單搞懂 Gunicorn & Uvicorn 名詞解釋
執行Dockerfile docker build -t name.
查看建立的Docker Image docker image ls
Docker-Compose: 是用於執行Docker Container(s)
## docker-compose.yml
version: '3'
services:
  # 服務的名字
  web_service:
    # docker deamon開啟時該container就會重啟
    restart: always
    # 該路徑底下需要包含Dockerfile
    build: ./
    # image 名稱
    image: web_service
    # 名稱
    container_name: web_service
    # 對應哪個port
    ports:
      - "5006:5006"
    # 容器裡的檔案掛在容器外的哪裡
    # connect at local file HOST:CONTAINER
    volumes:  
      - ./:/web_service
docker-compose up -d (-d 背景執行)docker ps -a