(3)一步步掌握基礎 Docker - 小試身手

前言

這些來這一篇算是延續前一篇 Dockerfile 章節的小作業,主要是確保自己對於 Dockerfile 的理解,並且熟悉 Dockerfile 的撰寫方式。

參考範本來源

首先這邊我提供一段 Dockerfile 的範本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
FROM debian:bullseye as builder

ARG NODE_VERSION=16.15.0

RUN apt-get update; apt install -y curl
RUN curl https://get.volta.sh | bash
ENV VOLTA_HOME /root/.volta
ENV PATH /root/.volta/bin:$PATH
RUN volta install node@${NODE_VERSION}

RUN mkdir /app
WORKDIR /app

ENV NODE_ENV production

COPY . .

RUN npm install
FROM debian:bullseye

LABEL fly_launch_runtime="nodejs"

COPY --from=builder /root/.volta /root/.volta
COPY --from=builder /app /app

WORKDIR /app
ENV NODE_ENV production
ENV PATH /root/.volta/bin:$PATH

CMD [ "npm", "run", "start" ]

這一份來源是我先前分享的開源專案 妙麗·格蘭傑 的範例,如果你好奇的話,可以參考這一篇文章 用 OpenAI GPT-3 建立一個 Discord 聊天機器人

那麼拉回正題,這邊我們要做的事情就是去替這些指令增加註解描述說明,底下我也會附上答案,所以你可以自己嘗試補上註解描述一下每一行在做的行為,當然你可能會看不懂部分指令,因為這一份 Dockerfile 有使用到一些我們之前沒有提過的指令,而且這事由 fly.io 自動生成的,所以部分指令可能看不懂是正常的。

如果沒有問題的話,你就來試試看吧!

底下這邊我也附上我的解答

作業解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 指定使用環境基底為 Debian,並將環境名稱指定為 builder
FROM debian:bullseye as builder

# 建立一個 Docker 變數名稱為 NODE_VERSION 並版本是 16.15.0
ARG NODE_VERSION=16.15.0

# 執行更新套件並安裝 CURL
RUN apt-get update; apt install -y curl

# 執行 CURL 指令下載 Volta 安裝腳本
RUN curl https://get.volta.sh | bash

# 建立一個環境變數名稱為 VOLTA_HOME 並指定為 /root/.volta
ENV VOLTA_HOME /root/.volta

# 建立一個環境變數名稱為 PATH 並指定為 /root/.volta/bin:$PATH
ENV PATH /root/.volta/bin:$PATH

# 執行 Volta 安裝 Node.js 版本為 16.15.0
RUN volta install node@${NODE_VERSION}

# 建立一個目錄名稱為 /app
RUN mkdir /app

# 指定工作目錄為 /app
WORKDIR /app

# 建立一個環境變數名稱為 NODE_ENV 並指定為 production
ENV NODE_ENV production

# 複製當前目錄下的所有檔案到 /app
COPY . .

# 執行 npm install
RUN npm install

# 指定使用環境基底為 Debian
FROM debian:bullseye

# 建立一個 LABEL 名稱為 fly_launch_runtime 並指定為 nodejs
LABEL fly_launch_runtime="nodejs"

# 複製 builder 環境下的 /root/.volta 到 /root/.volta
COPY --from=builder /root/.volta /root/.volta

# 複製 builder 環境下的 /app 到 /app
COPY --from=builder /app /app

# 指定工作目錄為 /app
WORKDIR /app

# 建立一個環境變數名稱為 NODE_ENV 並指定為 production
ENV NODE_ENV production

# 建立一個環境變數名稱為 PATH 並指定為 /root/.volta/bin:$PATH
ENV PATH /root/.volta/bin:$PATH

# 執行 npm run start
CMD [ "npm", "run", "start" ]

有些地方看不懂沒關係,因為這是由 fly.io 自動生成的,所以你可以先跳過,重點核心在於有沒有熟悉前面介紹的那些語法而已。

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你可以也可以請我「喝一杯咖啡(Donate)」。

Buy Me A Coffee Buy Me A Coffee

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ