Dockerfile
dockerfile 是用來構(gòu)建docker鏡像的文件!命令參數(shù)腳本!
構(gòu)建步驟:
- 編寫一個dockerfile文件
- docker build 構(gòu)建為一個鏡像
- docker run 運行鏡像
- docker push 發(fā)布鏡像(DockerHub,阿里云鏡像)
DockerFile構(gòu)建過程
基礎(chǔ)知識:
每個保留關(guān)鍵字都要大寫。
執(zhí)行是從上而下的。
-
# 表示注釋。
每個指令都會創(chuàng)建一個新的鏡像。
Dockerfile的指令

image-20200725190032433.png
FROM #基礎(chǔ)鏡像,一切從這里構(gòu)建
MAINTAINER #鏡像是誰寫的 ,姓名+郵箱
RUN #鏡像構(gòu)建的時候需要的運行命令
ADD #添加額外的鏡像
WORKDIR #工作目錄
VOLUME #掛載的目錄
EXPOSE #暴露端口 和 -p的效果一樣
CMD #指定容器需要啟動的時候運行的命令,只會最后一個生效,可被替代
ENTRYPOINT #指定容器需要啟動的時候運行的命令,可以追加命令
ONBUILD #當(dāng)構(gòu)建一個被繼承DockerFile 這個時候就會運行ONBUILD的指令。觸發(fā)指令。
COPY # 類似于ADD ,將我們文件拷貝到鏡像中。
ENV #構(gòu)建的時候設(shè)置環(huán)境變量
實戰(zhàn)構(gòu)建自己的centos
我們發(fā)現(xiàn)docker鏡像中的centos很多功能被刪減過。
所以我們自己構(gòu)建一個自定義的centos鏡像,添加vim和net-tools
#1. 編寫dockerfile
[root@master-node dockerfile]# cat docker dockerfile
FROM centos
MAINTAINER summer<1260670909@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
# 2.通過dockerfile來構(gòu)建自己的鏡像
[root@master-node dockerfile]# docker build -f dockerfile -t mycentos:1.0 .
# 3.測試運行
擴展:
通過history來查看鏡像組成過程
[root@master-node dockerfile]# docker history tomcat
IMAGE CREATED CREATED BY SIZE COMMENT
b4f6a90c69a4 2 days ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B
<missing> 2 days ago /bin/sh -c #(nop) EXPOSE 8080 0B
<missing> 2 days ago /bin/sh -c set -e && nativeLines="$(catalin… 0B
<missing> 2 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 20MB
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_SHA512=077c3e6… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=9.0.37 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=9 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV GPG_KEYS=05AB33110949… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV TOMCAT_NATIVE_LIBDIR=… 0B
<missing> 2 days ago /bin/sh -c #(nop) WORKDIR /usr/local/tomcat 0B
<missing> 2 days ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomca… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/lo… 0B
<missing> 2 days ago /bin/sh -c #(nop) CMD ["jshell"] 0B
<missing> 2 days ago /bin/sh -c set -eux; dpkgArch="$(dpkg --pr… 323MB
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_URL_VERSION=11.0… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_BASE_URL=https:/… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_VERSION=11.0.8 0B
<missing> 2 days ago /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J… 27B
<missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 days ago /bin/sh -c set -eux; apt-get update; apt-g… 11.1MB
<missing> 3 days ago /bin/sh -c apt-get update && apt-get install… 146MB
<missing> 3 days ago /bin/sh -c set -ex; if ! command -v gpg > /… 17.5MB
<missing> 3 days ago /bin/sh -c apt-get update && apt-get install… 16.5MB
<missing> 3 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 days ago /bin/sh -c #(nop) ADD file:89dfd7d3ed77fd5e0… 114MB
CMD 和 ENTRYPOINT 的區(qū)別
CMD #指定容器需要啟動的時候運行的命令,只會最后一個生效,可被替代
ENTRYPOINT #指定容器需要啟動的時候運行的命令,可以追加命令