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