文章目錄
1.Dockerfile的指令
1.FROM
格式1:
FROM <image> #
格式2:
FROM <image>:<tag>
注意:
1.必須是已存在的鏡像
2.必須是第一個非註釋的指令
2.MAINTAINER
1.指定鏡像的作者信息,包含鏡像的所有者和聯繫信息
2.如:
MAINTAINER ywk "[email protected]"
3.RUN
3.1 方式一:RUN (shell模式)
3.3 方式二:RUN [] (exec模式)
4.EXPOSE
此處暴露的端口,docker並不會自動配置,還是需要run的時候手動指定
5.CMD和ENTRYPOINT
CMD指令
1.CMD 是在容器運行時運行的,如果run是指定了容器執行後的指令,則cmd的指令不會執行
CMD ["executable","param1","parma2"] # exec模式
CMD command parma1 param2 # shell模式
CMD ["parma1","parma2"] # 作爲ENTRYPOINT指令的默認參數
2.如
---1. vi Dockerfile
# first dockerfile content
FROM ubuntu:16.04
MAINTAINER ywk "[email protected]"
RUN apt-get update && apt-get install nginx
EXPOSE 80
CMD ["/user/sbin/nginx","-g","daemon off"]
---2. docker build -t="ywk/test"
---3.docker run -p 80 --name cmd_test -d ywk/test
---4.docker top ywk/test # 查看docker容器運行了哪些服務
ENTRYPOINT指令
ENTRYPOINT ["executable","param1","parma2"] # exec模式
ENTRYPOINT command parma1 param2 # shell模式
即使docker run 指定了命令,如
docker run -p 80 --name cmd_test -d ywk/test /bin/bash
/bin/bash也不會執行
6.ADD和COPY
ADD <src> <dest>
ADD ['<src>"...."<dest>"](適用於文件路徑中有空格的情況)
COPY <src> <dest>
COPY ['<src>"...."<dest>"](適用於文件路徑中有空格的情況)
注意1:都是將文件複製到docker構建的鏡像中
注意2:src:必須是構建鏡像的相對地址
dest:鏡像中的絕對地址
注意3:
ADD:包含類似tar的解壓功能
如果是單純的複製文件,Docker推薦使用COPY
如:
# first dockerfile content
FROM ubuntu:16.04
MAINTAINER ywk "[email protected]"
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["/user/sbin/nginx","-g","daemon off"]
--------------------------------------------------------
docker build......
-------------------------------------------------------
docker run -d -p 80 --name copy_test ywk/test3
--------------------------------------------------------
訪問nginx
cul http://127.0.0.1:49168
結果:nginx的頁面被替換
7.VOLUME
用來基於鏡像文件的卷,實現數據持久化
點擊這裏查看使用方法:Docker的數據卷容器
8.WORKDIR ENV 和USER
WORKDIR /path/to/workdir # 容器內部的工作目錄
ENV <key><value> # 設置環境變量
ENV <key>=<value>
USER daemon # 指定鏡像以 何用戶的身份 來運行
如 USER nginx
如果不指定用戶,則以root用戶的方式運行
9.ONBUILD
ONBUILD [INSTRUCTION]
鏡像觸發器
當 這個鏡像(有ONBUILD指令) 被其他鏡像作爲基礎鏡像時執行
會在構建過程中插入指令
如:
# first dockerfile content
FROM ubuntu:16.04
MAINTAINER ywk "[email protected]"
RUN apt-get update && apt-get install -y nginx
ONBUILD COPY index.html /usr/share/nginx/html/ # 修改了這裏
EXPOSE 80
CMD ["/user/sbin/nginx","-g","daemon off"]
--------------------------------------------------------
docker build......
-------------------------------------------------------
docker run -d -p 80 --name copy_test ywk/test4
--------------------------------------------------------
訪問nginx
cul http://127.0.0.1:49168
結果:nginx的頁面沒有被替換
-----------------------------------------------------------
構建第二個鏡像,構建後頁面會被替換
FROM
xxx ywk/test4
xxx
xxx