iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

剛入職軟體工程師會需要知道的常見工具篇系列 第 19

[Day19] 簡單搞懂Dockerfile / Docker-Compose Python實作範例

  • 分享至 

  • xImage
  •  

剛開始接觸Docker的朋友,一定會常常看到範例寫到dockerfile docker-compose 那這兩個到底有什麼差別呢?

簡單用蛋糕店來舉例,一家店會有常備的蛋糕要每天賣,由於是每天都要產的,當然就有一套相同SOP流程及相同的模具可以做出蛋糕,以確保每天的蛋糕都一樣吧!好啦,這家店就像是Repository,可以有好多蛋糕模具,模具就像是Image,讓你可以重複生產相同的蛋糕,製造出來的蛋糕就是Container,每個蛋糕都是獨立且不會互相敢擾!!

  • Dockerfile: 是建立Docker Image
    • 主要描述如何創造及建立Docker Image
## 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)

    • 主要是用來設定像是分配多少Memory, 設置Network, 開哪個Port, 在機器哪裡儲存Volumne, 重啟設定Restart, 讀寫Limit等
## 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 docker-compose up -d (-d 背景執行)
  • 查看是否有起來 docker ps -a

上一篇
[Day18] 簡單搞懂SIT / UAT 名詞解釋
下一篇
[Day20] 簡單搞懂Docker Network / Volume設定
系列文
剛入職軟體工程師會需要知道的常見工具篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言