最近在自學寫dockerfile
目前是在centos上裝docker練習
看了很多網路解釋還是看不太懂
請各位高手白話點醒我
指令問題
FROM 基底映像指的是我目前操作的環境嗎
RUN 到底是指跑docker build還是docker run做的動作呢
CMD和ENTRYPOINT,我看了很多教學最看不懂這個作用
剛開始試著寫
FROM centos
RUN yum -y install httpd
跑docker build就會顯示 RUN這行錯誤
有點混亂
FROM 基底映像指的是我目前操作的環境嗎
是 告訴 docker 你現在要在哪個 container 操作
RUN 到底是指跑docker build還是docker run做的動作呢
RUN 就是要在此 container 內執行的指令
跟 docker 無關
另外既然你是 dockerfile 就是在執行 build 的動作
CMD 和 ENTRYPOINT,我看了很多教學最看不懂這個作用
CMD 會被 append 在 ENTRYPOINT 後
隨便找個範例應該不難理解 https://www.educative.io/answers/how-are-cmd-and-entrypoint-different-in-a-dockerfile
剛開始試著寫
FROM centos
RUN yum -y install httpd
跑docker build就會顯示 RUN這行錯誤
建議你提昇一下發問技巧
遇到 error 就把 error 貼出來
不然你光說遇到 error
error 有百百種情況, 誰知道你遇到什麼?
如果你遇到的 error 跟我一樣
=> ERROR [centos 2/2] RUN yum -y install httpd 1.8s
> [centos 2/2] RUN yum -y install httpd:
1.626 CentOS Linux 8 - AppStream 32 B/s | 38 B 00:01
1.630 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
其實把訊息拿去丟 google 就有答案了
https://techglimpse.com/failed-metadata-repo-appstream-centos-8/
基本上就是 centos 已死
請換別的 container
可用 rockylinux
or centos-stream
FROM
是指你要從 docker hub 上抓哪一個 image 下來使用
RUN
是指你 image build 的過程你要跑那些東西,像是你可以 build 一個屬於自己的 ffmpeg 工具包,因此你的 base image ready 好後就可以下一系列的 RUN 指令裝好你想要的套件
CMD
跟 ENTRYPOINT
這點蠻重要的,你可去看很多大 Image 裡面有很多 entrypoint.sh 的做法,最常見的作用應該就是 hang 住服務,你的 container 沒有 daemon 的話執行完會自動關閉,通常可以這樣理解,entrypoint 用在 build image,cmd 用在 image build 好後複寫或延伸 entrypoint 指令用
你自己無法憑空建立產生一個 Docker Container 的 Base Image,
FROM 就是指定你要當基底的 Image
RUN 則是指,你要在基底 Image 裡面,執行那些動作、安裝那些程式,把這些程式、資料一併打包到新的 Container Image 裡(包含你要 Container 執行的程式)
CMD 跟 ENTRYPOINT 差別在於,CMD 在 Run Container 時的命令可以被更換成使用者指定的指令,而ENTRYPOINT 不行