Docker(四)——Dockerfile

Dockerfile指令

FROM

第一個指令必須是FROM了,用于指定一個構(gòu)建鏡像的基礎(chǔ)源鏡像,鏡像必須是已經(jīng)存在的,如果本地沒有就會從公共庫中拉取,沒有指定鏡像的標簽會使用默認的latest標簽。

FROM<image>:<tag>
MAITAINER

指定鏡像的作者信息,包含鏡像的所有者和聯(lián)系信息

MAINTAINER<name>
RUN

指定當前鏡像中運行的命令,一句RUN就是一層,也相當于一個版本。這就是之前說的緩存的原理。我們知道docker是鏡像層是只讀的,所以你如果第一句安裝了軟件,用完在后面一句刪除是不可能的。所以這種情況要在一句RUN命令中完成,可以通過&符號連接多個RUN語句。
對于復雜的RUN請用反斜線換行,避免無用分分層,合并多條命令成一層。

RUN <command>#shell 模式
RUN ["executable","param1","param2"] #exec模式
EXPOSE

對外映射的容器端口號,在docker run -p的時候生效

EXPOSE <port> [<port>...]
CMD

CMD在Dockerfile中只能出現(xiàn)一次,有多個,只有最后一個會有效。其作用是在容器啟動的時候提供默認的命令和參數(shù)。如果用戶執(zhí)行docker run的時候提供了命令項,就會覆蓋掉這個命令。沒提供就會使用構(gòu)建時的命令。

CMD <command> param1 param2 #shell 模式
CMD ["executable","param1","param2"] #exec模式
CMD ["param1","param2"] # 作為ENTRYPOINT指令的默認參數(shù)

ENTRYPOINT

ENTRYPOINT的指令不會被docker run 運行的命令項所覆蓋。如果需要覆蓋ENTRYPOINT的指令,需要使用docker run --entrypoint

ENTRYPOINT <command> param1 param2 #shell 模式
ENTRYPOINT ["executable","param1","param2"] #exec模式
ENV

設(shè)置容器的環(huán)境變量

EVN <key> <value> #只能設(shè)置一個
EVN <key>=<value>#允許一次設(shè)置多個
USER

命令用于設(shè)置運行容器的UID。

# Usage: USER [UID]
USER 750
ADD

復制本機文件或目錄或遠程文件,添加到指定的容器目錄,支持GO的正則模糊匹配。路徑是絕對路徑,不存在會自動創(chuàng)建。如果源是一個目錄,只會復制目錄下的內(nèi)容,目錄本身不會復制。如果是URL或壓縮包會自動下載或自動解壓。

ADD <src>   <dest>
COPY

COPY除了不能自動解壓,也不能復制網(wǎng)絡文件。其它功能和ADD相同。

COPY <src> <dest>
VOLUME

VOLUME命令用于讓你的容器訪問宿主機上的目錄

VOLUME["宿主機目錄地址"]
WORKDIR

為RUN、CMD、ENTRYPOINT、COPY和ADD設(shè)置工作目錄,如果當前目錄不存在會自動創(chuàng)建

ONBUILD

ONBUILD 是一個特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等,而這些指令,在當前鏡像構(gòu)建時并不會被執(zhí)行。只有當以當前鏡像為基礎(chǔ)鏡像,去構(gòu)建下一級鏡像的時候才會被執(zhí)行。

創(chuàng)建簡單的nginx服務

創(chuàng)建文件名是Dockerfile的文本

FROM ubuntu:16.04
MAINTAINER baxiang "yangyucug@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]

修改當前nginx首頁,copy到nginx 首頁目錄下面

<html>
        <head><title>hello docker</title></head>
        <body>
                <h1>welcome to baxiang webside</h1>
        </body>
</html>

當前目錄下執(zhí)行docker build

docker build -t='baxiang/nginx' .

運行當前鏡像

docker run -d --name nginx_web -p 80 baxiang/nginx 

查看當前鏡像

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
97df2b9ff4a1        baxiang/nginx       "nginx '-gdaemon off…"   7 seconds ago       Up 6 seconds        0.0.0.0:32768->80/tcp   nginx_web

執(zhí)行curl

curl 127.0.0.1:32768
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容