學習撰寫Dockerfile
當DockerHub無法滿足你的需求,就寫Dockerfile吧
Dockerfile是由一行一行的指令所構成,主要是利用這些指令來完成「映像檔的模樣」,可以參考別人寫好的Dockerfile,自己再稍微加工調整;也可以從無到有,撰寫自己的Dockerfile。
來看一個簡單的Dockerfile:
Dockerfile上常見的指令包括:
FROM
決定你的基底映像檔,例如 FROM python:3.6.8-alpine3.7
、FROM nginx:latest
MAINTAINTER
定義維護者,例如 MAINTERIN Jennifer <cutejaneii@hotmail.com>
COPY
複製檔案至映像檔內,例如 COPY . /app
ADD
複製檔案至映像檔內,與COPY
指令不同處有二個,一個是來源可以是URL(但不建議),第二個是若來源是TAR檔會自動解壓縮
RUN
用來執行你要在映像檔內的任何指令,例如 RUN pip install h5py
、RUN chmod +x entrypoint.sh
ENV
設定環境變數,例如 ENV HDF5_USE_FILE_LOCKING FALSE
、ENV NGINX_MAX_UPLOAD 4m
,這個值也可於docker run時將參數值帶入,進行替換
ARG
docker build時可將參數值帶入,進行替換
WORDDIR
切換目前的工作目錄,例如 WORKDIR /app
EXPOSE
設定要開放的PORT,但要docker run時也要下expose參數,例如 EXPOSE 8080
CMD
啟動Container時要執行的指令,例如 CMD ["python3", "main.py"]
。CMD不一定會被執行,若docker run 有帶指令(docker run [ContainerID] bash),則會執行bash,而不執行CMD指令
ENTRYPOINT
啟動Container時要執行的指令,例如 ENTRYPOINT ["docker-entrypoint.sh"]
,此指令一定會被執行。
ONBUILD
這個指令不會在建立時執行,而是別人將這一個Image設為基底Image時,才會執行的指令。執行的時機在FROM指令之後。指令例如 ONBUILD RUN mkdir my_dir
撰寫完畢後,使用docker build
將目前的Dockerfile建立為Image
同場加映
Dockerfile撰寫完畢後,可連同Image用到的檔案,一併上傳至Github,再透過Github與DockerHub的機制,讓DockerHub自動根據Github上的Dockerfile建立Image,可參考這篇:
連結Docker Hub/GitHub帳號,在Docker Hub自動建立Docker Image
Last updated