全站文章索引 📚📚📚

展開全部 | 收合全部

全站文章索引 📚📚📚

展開全部 | 收合全部

【Dockerfile #1】撰寫第一個自己的 Dockerfile ! dockerfile 學習整理筆記

前言

dockerfile 算是用來「文件」式的管理環境最好用的方法,
當然我自己之前也用過 docker image 來管理環境過,
但畢竟一個是「文字檔」,一個是「image」自然檔案大小也差了 N 倍,
這次把握了一點時間來學習並整理一下 dockerfile 該怎麼寫!

以下依照「常見的撰寫 dockerfile 順序排列」

變數介紹

FROM

通常寫在最開頭,如果不想完全從 0 開始建立,
可以透過 FROM 表示要從哪一個已經有的 image,去疊加自己的東西

FROM ubuntu:20.04

ARGS

用來設定一些變數,經常與 ENV 搭配使用

ARGS MY_PATH="/mypath/"

ENV

設定環境變數,也就是說,當 container 經由 dockerfile 建立的時候,
會一開始就設定好的環境變數。

搭配 ARGS 使用可能會長這樣

注意與 ARGS 差別就是在,「ARGS 沒有設定環境變數,只有設定變數而已

ARGS MY_PATH="/mypath/"
ENV MY_HOME="${MY_PATH}"

RUN

建立 container 階段就執行的指令
常見的安裝

RUN apt-get update -y
RUN apt-get upgrade -y

或例如我一開始就想安裝 python3 的 numpy package

RUN pip3 install numpy

COPY

因為 container 內部的檔案可能與外面的 Host (也就是你本身的電腦)獨立,
我們可以在建立階段就從外部 copy 一份資料進來,
這樣就不怕 container 內拿不到外面的檔案

如果不懂概念的話,可以想像 container 是電腦中的電腦,但兩者資料存放的位置沒辦法互相溝通。

COPY <外部路徑> <目標 continer 內的檔案路徑>

CMD

RUN 跟 CMD 感覺很像,也很容易弄混,但其實搞清楚很簡單,
思考下面的關係

dockerfile -> docker image -> container

  • 從 dockerfile -> docker image,是 docker build,也就是 RUN 作用的時間
  • 從 docker image -> container,是 docker run,也就是 CMD 作用的時間

(optional) MAINTAINER

就是作個紀錄,紀錄誰在維護這份檔案

MAINTAINER Howard Weng

隨便寫一個 ubuntu 20.04 的範例

建立 Dockerfile (注意大小寫)

預設會要建立一個乾淨的資料夾,
在裡面放上一個檔案名稱為 Dockerfile (注意大小寫)

然後這邊我們就單純直接去拉乾淨的別人寫好的 image

FROM ubuntu:20.04

docker build

在同一個資料夾下,去建立一個新的 docker image

docker build -t ubuntu_2004 . --no-cache

就完成了,結果類似以下這樣,我們建立了一個新的 docker image

Reference

Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「🥱只寫到一半😴」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好🙏

文章: 817

★留個言吧!內容有誤或想要補充也歡迎與我討論!