Dockerfile使用教程

一、什麼是Dockerfile

Dockerfile是創建自定義Docker鏡像的描述文件,我們可以在Dockerfile中寫出一條條指令來控制鏡像需要執行什麼操作,下面具體講講Dockerfile中的指令。

二、Dockerfile四大功能分區

1. 基礎鏡像

聲明自定義鏡像的基礎鏡像

FROM centos

2. 描述信息

此處可以聲明鏡像的負責人、版本、構建時間、描述等一系列信息,此處可以聲明任何信息

LABEL [email protected]
LABEL version="1.0"
LABEL date="2020/03/08"
LABEL description="RPM軟件包製作"

3. 安裝鏡像執行指令

3.1 USER

執行Dockerfile中shell指令時指定的用戶,包括:RUN、CMD、ENTRYPOINT

USER <user>[:<usergroup>]
USER root

3.2 EXPOSE

指定容器運行時的服務端口

EXPOSE 80 443

3.3 WORKDIR

爲Dockerfile中執行的指令設置工作目錄,包括:ADD、COPY、RUN、CMD、ENTRYPOINT

WORKDIR /root

3.4 ADD

拷貝文件/目錄到鏡像中

ADD <src>...<dest>
ADD rpmbuild.tar.gz /root/
ADD https://xxx.com/rpmbuild.tar.gz /root/

3.5 COPY

拷貝文件/目錄到鏡像中,用法與ADD相同,但是不支持自動下載和解壓

ADD /home/mysql_cron /etc/cron.d/

3.6 VOLUME

把主機的目錄掛載到docker中,類似nfs文件共享,一般很少用,大多在docker run中用-v來進行掛載

VOLUME ["/usr/local/"]

3.7 ARG

在構建鏡像時指定的參數

ARG user
USER $user

只需要在docker build時帶上user參數即可

docker build --build-arg user=root -f dockerfile_rpmbuild .

3.8 RUN

構建鏡像時運行的指令

RUN ["yum", "install", "net-tools", "-y"]
RUN yum install net-tools -y

3.9 ENV

設置當前系統內環境變量

ENV JAVA_HOME /usr/local/jdk1.8.0_231

3.10 HEALTHCHECK

檢查容器是否在仍在工作

HEALTHCHECK --interval=5m --timeout=3s --retries=3 \
    CMD curl -f http:/localhost/ || exit 1
  • 選項說明:
    --interval=DURATION (default: 30s):每隔多長時間探測一次,默認30秒

-- timeout= DURATION (default: 30s):服務響應超時時長,默認30秒
--start-period= DURATION (default: 0s):服務啓動多久後開始探測,默認0秒
--retries=N (default: 3):認爲檢測失敗幾次爲宕機,默認3次

  • 返回值說明:
    0:容器成功是健康的,隨時可以使用

1:不健康的容器無法正常工作
2:保留不使用此退出代碼

4. 容器啓動執行指令

4.1 CMD方式

可以編輯多條,每條指令按順序執行。

CMD ["-C", "/start.sh"] 
CMD ["/usr/sbin/sshd", "-D"] 
CMD /usr/sbin/sshd -D

4.2 ENTRYPOINT方式

同CMD類似,但這種方式執行的命令不會被docker run執行的參數所覆蓋,同時docker run執行的參數會傳到此方式執行的腳本中。

ENTRYPOINT [ "rpmbuild", "-bb" , "/root/rpmbuild/SPEC/mysql-install.spec"]
ENTRYPOINT [ "dpkg", "-b", "mysql-install", "mysql-install.deb"]

重要提示:ENTRYPOINT可以有多行,但是執行時只有最後一行生效,切記!

三、Dockerfile實例

# 基礎鏡像
FROM centos

# 描述信息
LABEL [email protected]
LABEL version="1.0"
LABEL date="2020/03/08"
LABEL description="RPM軟件包製作"

# 安裝鏡像執行指令
WORKDIR /root
USER root

RUN rpm -ivh net-tools-2.0-0.51.20160912git.el8.x86_64.rpm
RUN yum install rpm-build-4.14.2-25.el8.x86_64 -y

# 啓動容器執行指令
ENTRYPOINT [ "rpmbuild", "-bb", "rpmbuild/SPEC/*.spec"]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章