iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Software Development

燃燒大三的成果發表系列 第 23

燃燒大三的成果發表第二十三天 - dockerfile

  • 分享至 

  • xImage
  •  

大家好,前兩日我們已經將簡單的範例都串起來,接下來我想將分享我試著將flask這個單一的服務,打包成一個dockerfile,有了dockerfile就能夠做成image。

這邊先附上幾條常用指令的功能說明

功能說明
FROM 基本環境的IMAGE
RUN build image 時運行的指令
CMD run container 時運行的指令
ENTRYPOINT run container 固定一定會執行的指令
COPY 複製文件到容器資料夾內
ADD 複製文件到容器資料夾內,支援tar和url,複製 tar 壓縮文件時會自動解壓縮
VOLUME 可以將容器中的資料夾掛載到本地資料夾中,可用來容器刪除時不想刪除的資料
EXPOSE 開放服務的port,這邊只是寫出來讓人知道,實際上服務要開啟對外port還是要靠run -P的參數
ENV 設定容器環境變數
WORKDIR 設定工作目錄
USER 指定執行命令的用戶,預設是root

這是我要把flask的服務打包的dockfile

FROM python:3.6.8-alpine3.8

WORKDIR /2022IThome_env

COPY * .

RUN apk --update add python py-pip openssl ca-certificates py-openssl wget
RUN apk --update add --virtual build-dependencies libffi-dev openssl-dev python-dev py-pip build-base \
  && pip install --upgrade pip \
  && pip install -r requirements.txt \
  && apk del build-dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 5000

CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app", "--preload"]

這邊我「FROM」使用是3.6.8版本的python環境,那這邊安裝的環境也有再細分版本,這裡我使用的是較為輕量的alpine,然後透過「WORKDIR」將工作目錄設定為/2022IThome_env,將本機當下目錄的全部檔案「COPY」到前面設定容器中工作目錄的底下。

接著「RUN」build image前的一些指令,像是先安裝服務所需要的套件庫,「EXPOSE」告知我的服務對外的port,但只是一個聲明並未有真正效果,要開啟對外的port,在容器啟動時還是要用-p的參數,最後使用「CMD」下啟動服務的指令,這樣在啟動容器時啟動服務的指令也會執行。

以上是dockfile的一個流程以及大致內容,接下來我們來看看實際操作。

首先我們將寫好的dockerfile,透過docker build --no-cache -t flask .build一個名稱叫做flask的image


可以在docker-desktop的images裡查看,當然也可以使用dokcer image ls的指令

docker run -it --rm -p 5000:5000 flask把flask這個image run起來,透過-p將container的5000port對到外部5000port

容器啟動之後可以在這邊,直接用網頁打開,或者直接在網頁上打上url也可以

今天是透過dockerfile把flask包成image給run起來,明天我要將redis & celery & flask 包成一個image,裡面有3個容器組成一組。


上一篇
燃燒大三的成果發表第二十二天 - redis & celery & docker(下)
下一篇
燃燒大三的成果發表第二十四天 - docker compose-up
系列文
燃燒大三的成果發表30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言