Dockerfile 小記之FROM

村望老弟發表於2021-11-28

參考資料

1.FROM語法的使用

回顧之前專案寫的dockerfile檔案

FROM golang:latest AS builder
#維護者資訊
# MAINTAINER Dong Lei
# MAINTAINER 2781897595@qq.com
LABEL Dong Lei <2781897595@qq.com>
# 為我們的映象設定必要的環境變數
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64\
    GOPROXY="https://goproxy.cn,direct"

# 類似於cd命令 cd 到工作目錄:/build
WORKDIR /build

# 將程式碼複製到容器中 /build目錄
COPY . .

# 將我們的程式碼編譯成二進位制可執行檔案 app
RUN go build -o app .

###################
# 接下來建立一個小映象
###################
FROM scratch

# 從builder映象中把/dist/app 拷貝到當前目錄
COPY ./config /conf

COPY --from=builder /build/app /

# 需要執行的命令
ENTRYPOINT ["/app","/conf"]

第一句就是FROM golang:latest , 它的意思是選擇一個基礎映象,我這裡選擇的是golang系統的最新版。

幾乎所有的Dockerfile檔案,要做的第一件事就是要選擇一個基礎映象。但可能出乎意料,上面的這句FROM golang:latest並不是一個最優寫法。

先來看有選擇映象的三個基本原則。

  • 官方映象優於非官方的映象;

    image-20211127100217119

  • 固定版本的Tag,而不是每次都使用latest;

    image-20211127100322494

  • 功能滿足,選擇體積小的映象;

    Golang映象為例,有些是帶alpine環境的,有些是不帶的。他們的映象體積大小相差 一半。

    這個原則不好把握,需要些經驗。前提是滿足你需求的情況下,所以這就要對映象有充分的瞭解,然後再根據需求選擇小的。(alpine (Alpine Linux)是一款獨立的非商業性的通用Linux發行版、關注安全性、簡單性和資源效率。它小巧的特點受廣大IT人士的喜愛。)

    image-20211127100434794

注意這是基礎映象,在這個基礎上,你還會加入很多自己的東西和應用。當你再次build時,映象體積就會很大,越大的映象,代表複雜度越高。所以讓自己的映象變的簡潔,是我們的責任。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
CunWang@Ch

相關文章