https://yq.aliyun.com/articles/749593mysql
1、什麼是Dockerfile
Dockerfile是建立自定義Docker鏡像的描述文件,咱們能夠在Dockerfile中寫出一條條指令來控制鏡像須要執行什麼操做,下面具體講講Dockerfile中的指令。git
2、Dockerfile四大功能分區
1. 基礎鏡像
聲明自定義鏡像的基礎鏡像sql
FROM centos
2. 描述信息
此處能夠聲明鏡像的負責人、版本、構建時間、描述等一系列信息,此處能夠聲明任何信息docker
LABEL maintainer=tingtiandadi@360.cn LABEL version="1.0" LABEL date="2020/03/08" LABEL description="RPM軟件包製做"
3. 安裝鏡像執行指令
3.1 USER
執行Dockerfile中shell指令時指定的用戶,包括:RUN、CMD、ENTRYPOINTshell
USER <user>[:<usergroup>] USER root
3.2 EXPOSE
指定容器運行時的服務端口centos
EXPOSE 80 443
3.3 WORKDIR
爲Dockerfile中執行的指令設置工做目錄,包括:ADD、COPY、RUN、CMD、ENTRYPOINTssh
WORKDIR /root
3.4 ADD
拷貝文件/目錄到鏡像中curl
ADD <src>...<dest> ADD rpmbuild.tar.gz /root/ ADD https://xxx.com/rpmbuild.tar.gz /root/
3.5 COPY
拷貝文件/目錄到鏡像中,用法與ADD相同,可是不支持自動下載和解壓ui
ADD /home/mysql_cron /etc/cron.d/
3.6 VOLUME
把主機的目錄掛載到docker中,相似nfs文件共享,通常不多用,大多在docker run中用-v來進行掛載url
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能夠有多行,可是執行時只有最後一行生效,切記!
3、Dockerfile實例
# 基礎鏡像 FROM centos # 描述信息 LABEL maintainer=tingtiandadi@360.cn 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"]