Dockerfile是甚麼?
Dockerfile是一個簡單的文字檔,其中包含使用者可以呼叫組裝映像檔的指令。
也就是說,如果要撰寫Dockerfile,是需要對系統指令、dockerfile 語法、作業系統目錄及相關步驟非常熟悉,才能夠撰寫。
使用方式
# This is a comment FROM debian:buster USER root RUN apt-get -qq update \ && DEBIAN_FRONTEND=noninteractive apt-get -qqy --no-install-recommends install dialog apt-utils tzdata \ && TZ=Asia/Taipei \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone \ && dpkg-reconfigure -f noninteractive tzdata \ && apt-get -qqy --no-install-recommends install dialog debhelper git cmake build-essential \ libboost-thread-dev python3-dev libz3-dev libsnmp-dev\ ca-certificates ninja-build clang vim wget apt-utils ENV CC=/usr/bin/clang CXX=/usr/bin/clang++ RUN cd /tmp \ && git clone https://github.com/open-source-parsers/jsoncpp --branch 1.9.2 \ && cd jsoncpp \ && mkdir Build \ && cd Build \ && cmake .. \ && make install -j 4
- dockerfile
- 使用dockerfile建置image
docker build --force-rm -f debian_tsn_builder.dockerfile -t local/debian_tsn_builder:buster . docker run -itd --name debian_tsn_builder --hostname debian_tsn_builder -p 18443:8443 local/debian_tsn_builder:buster
Dockerfile常用進階用法
- 將檔案copy至image中,需要注意arm-linux-gnueabihf.zip必須存在於執行指令的電腦中
COPY arm-linux-gnueabihf.zip /root
- apt-get 安裝檔案時,跳過時區設定
RUN apt-get -qq update \ && DEBIAN_FRONTEND=noninteractive apt-get -qqy --no-install-recommends install tzdata \ && TZ=Asia/Taipei \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone
- 設定環境變數
ENV CC=/usr/bin/clang CXX=/usr/bin/clang++
- 將互動式input傳給程式,有的程式執行時,會需要使用者用鍵盤輸入一些內容,可是在image製作的時候,docker並沒有提供鍵盤輸入的方式,故我們會需要yes這個指令來代替鍵盤
RUN yes "1" | ./arm-linux-gnueabihf_6.3_Build_amd64_18011210.sh
使用心得
- 如果是使用 Ubuntu 等開源 Linux 的話,需要注意這些作業系統的安裝程式往往都是使用官方所 repository server 提供,可是某些開源項目可能在更版到某個程度之後就不會維護舊版的 repository server,甚至是 repository server 失連,故建議如果可以的話,使用舊版作業系統的docker image還是存起來比較好。
- 同上點,若是在常常需要變動 image 製作方式的情況下,使用 dockerfile 會滿方便的
- dockerfile 製作成 image 的時候,一個指令會被製作成一個 history image,如果想節省 history image 數量的話,建議盡量透過 shell 的 pip or && or ; 減少指令數量
參考文獻
- https://docs.docker.com/engine/reference/builder/
推薦文章
Docker
⭐️ 全民寫程式 | 好用的 Docker 容器 | Docker Desktop 使用教學 | 程式開發最佳輔助工具
⭐️ 全民寫程式 | Dockerfile 使用方式 | Dockerfile usage
⭐️ 全民寫程式 | Docker | Compose 介紹 安裝
⭐️ 全民寫程式 | Docker | Compose | docker compose 指令 | docker compose vs docker-compose
全民寫程式:初學者天堂
⭐️ 全民寫程式 | 這不是必要,但學會 Linux 絕對會讓您更有競爭力
⭐️ 全民寫程式|小網址大學問|IP、Port 介紹|網際網路和區域網路|常用本地網址
⭐️ 全民寫程式|小網址大學問|DNS|域名系統|頂級域名、一級域名是什麼?
全民寫程式:進階
⭐️ 全民寫程式|Oh My Zsh|安裝、主題、插件|終端機優化|終端機美化
⭐️ 全民寫程式 | Python | pyenv-virtualenv 教學(安裝篇)
⭐️ 全民寫程式 | Python | pyenv-virtualenv 教學(介紹篇)
⭐️ WordPress 網站架設大補帖 | 自動化備份系統 | 營運網站實際備份案例分享 | 資料庫備份 | 異地備援
⭐️ WordPress 網站架設大補帖 | WordPress 網站搬移基礎步驟 | WordPress 網站切換域名的方法
⭐️ 【法務】全民寫程式 | 專案管理 | 授權很重要 | 不可不知的 Open Source License | 安全地在巨人肩膀上寫程式
⭐️ 網頁開發 | 降低 Youtube 載入時間 | 提升痞客邦網頁載入速度
留言列表