What is Dockerfile and How to Create a Docker Image?

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常用進階用法

  1. 將檔案copy至image中,需要注意arm-linux-gnueabihf.zip必須存在於執行指令的電腦中
    COPY arm-linux-gnueabihf.zip /root
    
  2. 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
  3. 設定環境變數
    ENV CC=/usr/bin/clang CXX=/usr/bin/clang++
    
  4. 將互動式input傳給程式,有的程式執行時,會需要使用者用鍵盤輸入一些內容,可是在image製作的時候,docker並沒有提供鍵盤輸入的方式,故我們會需要yes這個指令來代替鍵盤
    RUN yes "1" | ./arm-linux-gnueabihf_6.3_Build_amd64_18011210.sh

使用心得

  1. 如果是使用 Ubuntu 等開源 Linux 的話,需要注意這些作業系統的安裝程式往往都是使用官方所 repository server 提供,可是某些開源項目可能在更版到某個程度之後就不會維護舊版的 repository server,甚至是 repository server 失連,故建議如果可以的話,使用舊版作業系統的docker image還是存起來比較好。
  2. 同上點,若是在常常需要變動 image 製作方式的情況下,使用 dockerfile 會滿方便的
  3. dockerfile 製作成 image 的時候,一個指令會被製作成一個 history image,如果想節省 history image 數量的話,建議盡量透過 shell 的 pip or && or ; 減少指令數量

參考文獻

  1. 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 教學(介紹篇)

⭐️ 全民寫程式|Python|PSD 圖層逐一輸出成圖片

⭐️ WordPress 網站架設大補帖 | 自動化備份系統 | 營運網站實際備份案例分享 | 資料庫備份 | 異地備援

⭐️ WordPress 網站架設大補帖 | WordPress 網站搬移基礎步驟 | WordPress 網站切換域名的方法

⭐️ 【法務】全民寫程式 | 專案管理 | 授權很重要 | 不可不知的 Open Source License | 安全地在巨人肩膀上寫程式

⭐️ 網頁開發 | 降低 Youtube 載入時間 | 提升痞客邦網頁載入速度

⭐️ 網頁開發 | 閱讀進度條實作 | jQuery精簡版

⭐️ 如何把 Google 相簿的圖片鑲嵌在網頁上?|用 Google 相簿做網頁外部圖片

⭐️ 如何在痞客邦文章使用畫質更高的圖片?

⭐️ 痞客邦語法 設定雙欄式列表

arrow
arrow

    採 藥 發表在 痞客邦 留言(3) 人氣()