天天看點

Dockerfile使用教程一、什麼是Dockerfile二、Dockerfile四大功能分區三、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類似,但這種方式執行的指令不會被

執行的參數所覆寫,同時

執行的參數會傳到此方式執行的腳本中。

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"]