認識 Dockerfile 文件之鏡像構建

【Dockerfile核心命令】

1、FROM 指定基礎鏡像構建
    寫法:
    FROM 指定基礎鏡像

2、COPY 複製命令。從上下文目錄中複製文件或者目錄到容器裏指定路徑。

    寫法:

    COPY 源路徑,目標路徑

    COPY ["源路徑","目標路徑"]    

3、RUN運行指令。構建的時候運行的指令

    主要在於鏡像構建的時候運行,運行build命令的時候 

    後面接的命令就是shell輸入的命令

    寫法

    RUN  shell命令 參數1 參數2

    RUN ["shell命令 ","參數1"," 參數2"]

    例如:

    RUN ["echo",">"," /usr/share/index.html"]

 4、CMD運行指令。運行容器時候運行的指令

    主要在於鏡像運行容器的時候生成,運行run的時候運行

    寫法

    CMD <shell 命令> 
    CMD ["<可執行文件或命令>","<param1>","<param2>",...] 

    例如:

    CMD ["dotnet","netcore.dll"]

    缺點:在run 命令後面可以進行覆蓋

    docker run -d -P  netcore dotnet netcore.dll 進行覆蓋掉

5、ENTRYPOINT運行指令。運行容器時候運行的指令(不會被覆蓋)

    寫法

    ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

    可以和CMD動態結合,設置動態的配置參數

    例如 

    ENTRYPOINT ["nginx", "-c"] 定參

    CMD ["/etc/nginx/nginx.conf"]變參

6、EXPOSE暴露端口指令

    僅僅聲明端口,就是指定鏡像暴露的端口

    在run 的時候,通過docker run -p 會自動隨機映射到EXPOSE端口

    寫法

    EXPOSE 端口

    EXPOSE 端口

    例如 

    EXPOSE 5000

    EXPOSE 5001

7、WORKDIR工作目錄指令
    用於應用在容器內的工作目錄,就好比:netcore目錄

    寫法

    WORKDIR <工作目錄路徑>

    例如

    WORKDIR /netcore

    或者

    WORKDIR /nginx

 

【Ubuntu 中 Nginx 原始配置】

  1. 安裝 nginx 所需工具 =》apt -y install gcc make pcre-devel zlib-devel tar zlib
  2. 下載 nginx =》wget  http://nginx.org/download/nginx-1.16.1.tar.gz
  3. nginx 解壓/nginx 目錄 =》tar -zxvf  nginx-1.16.1.tar.gz
  4. 切換到/nginx/nginx-1.16.1 執行 ./configure , make ,make install =》cd nginx-1.16.1 && ./configure && make && make install
  5. 切換到/usr/local/nginx/sbin,執行 ./nginx 啓動nginx =》=》cd /usr/local/nginx/sbin && ./nginx

【配置nginx的Dockerfile文件】

FROM ubuntu
RUN apt -y install gcc make pcre-devel zlib-devel tar zlib
WORKDIR /nginx
COPY nginx-1.16.1.tar.gz /nginx
RUN tar -zxvf  nginx-1.16.1.tar.gz
RUN cd nginx-1.16.1 && ./configure && make && make install
EXPOSE 80
CMD /bin/bash
  • 運行Dockerfile配置構建 nginx =》docker build -t nginx .
  • 耐心等待,最後一步提示:

    Successfully built [image-id]
    Successfully tagged nginx:latest

【啓動 nginx 命令】

  • 運行 nginx =》 docker run -itd -P nginx 參數 -it 交互式命令,d後臺運行,-P暴露端口
  • 查看運行的容器信息 =》docker ps / docker container ls 查看所有,添加參數 -a
  • 進入 nginx =》docker exec -it nginx /bin/bash 參數 -it 交互式命令,bash 是 Bash Shell (Linux 默認)
  • 切換到 nginx 安裝路徑 =》cd /usr/local
  • 查看當前目錄列表 =》ls 顯示 conf html logs sbin
  • 進入 sbin 文件夾 =》cd sbin
  • 再次查看當前目錄列表 =》ls 顯示 nginx
  • 直接啓動 nginx =》./nginx

 

【Dockerfile 指令詳解】

指令 說明
FORM 指定基礎鏡像(FROM是必備的指令,並且必須爲第一條指令)。
RUN

用來執行命令行命令。其基本格式:

shell格式: RUN  <命令>  ,輸入在bash環境中的命令即可,一個dockerfile允許使用RUN不得超過127層,所以,使用一次RUN, 使用 ‘ \ ’ 換行,使用‘ && ’執行下一條命令。一般使用此種格式;

exec格式: RUN  <"可執行文件", "參數1", "參數2">,此種方式像是函數調用中的格式;

COPY

複製文件。 其基本格式:

格式1:COPY <源路徑>...<目標路徑>

格式2:COPY [“<源路徑1>”,....."<目標路徑>"]

ADD 更高級的複製文件,在COPY的基礎上增加了一些功能,如果複製的是壓縮包的話,會直接解壓,而不需要在使用RUN解壓;
CMD

容器啓動命令。其基本格式:

shell格式: CMD <命令>

exec格式: CMD ["可執行文件", "參數1", "參數2"...]

參數列表格式: CMD [“參數1”, “參數2”...],在指定了ENTRYPOINT指令後,用CMD指定具體的參數

ENTRYPOINT 入口點。其基本格式分爲exec和shell,ENTRYPOINT的目的和CMD一樣,都是在指定容器啓動程序及參數。ENTRYPOINT在運行中可以替代,不過比CMD繁瑣,需要通過docker run 的參數--entrypoint 來指定。當指定了ENTRYPOINT後,CMD的含義就發生了改變,不在是直接運行其命令,而是將CMD的內容作爲參數傳遞給ENTRYPOINT指令。其執行時就變成了:  <ENTRYPOINT> "<CMD>"
ENV

設置環境變量。(都可以使用這裏使用的變量)其基本格式:

格式1:ENV <key> <value>

格式2:ENV <key1>=<value1> <key2>=<value>...

ARG

構建參數。構建參數和ENV的效果一樣,都是設置環境變量,所不同的是ARG所構建的環境變量在將來容器運行時是不存在的。其基本格式:

格式1: ARG <參數名> [=<默認值>]

格式2: 該默認值可以在構建命令 docker build  中用 --build-arg <參數名>=<值> 來覆蓋

VOLUME

定義匿名卷。 其基本格式:

格式1: VOLUME ["<路徑1>", "<路徑2>"...]

格式2: VOLUME <路徑>

EXPOSE

暴露端口。EXPOSE指令是聲明運行時容器所提供的端口,在啓動容器時不會在因爲這個聲明而開啓端口。 其基本格式:

格式1: EXPOSE <端口1> [<端口2>...]

WORKDIR

指定工作目錄。其基本格式:

格式1: WORKDIR <工作目錄路徑>

USER

指定當前用戶。USER是幫助你切換到指定用戶。 其基本格式:

格式1: USER <用戶名>

HEALTCHECK

健康檢查,判斷容器的狀態是否正常。 其基本格式:

格式1: HEALTCHECK [選項] CMD <命令> :設置檢查容器健康狀況的命令

格式2: HEALTCHECK NONE: 如果基礎鏡像有健康檢查指令,使用此格式可以屏蔽掉其健康檢查指令

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章