日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 精通之 Dockerfile

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 精通之 Dockerfile 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Docker 精通系列

  • Docker 精通之入門
  • Docker 精通之微服務
  • Docker 精通之常用命令
  • Docker 精通之 Dockerfile

1.基本說明

  Dockfile 是一個用于編寫 docker 鏡像生成過程的文件,其有特定的語法。在一個文件夾中,如果有一個名字為 Dockfile 的文件,其內容滿足語法要求,在這個文件夾路徑下執行命令,就可以按照描述構建一個鏡像了。

docker build --tag name:tag . # name是鏡像的名稱,tag是鏡像的版本或者是標簽號,不寫就是lastest。注意后面有一個空格和點。

dockerfile 簡單文件實例

FROM node:8.4COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000 CMD node demos/01.js
  • FROM node:8.4:該 image 文件繼承官方的 node image,冒號表示標簽,這里標簽是8.4,即8.4版本的 node。
  • COPY . /app:將當前目錄下的所有文件(除了.dockerignore排除的路徑),都拷貝進入 image 文件的/app目錄。
  • WORKDIR /app:指定接下來的工作路徑為/app。
  • RUN npm install:在/app目錄下,運行npm install命令安裝依賴。注意,安裝后所有的依賴,都將打包進入 image 文件。
  • EXPOSE 3000:將容器 3000 端口暴露出來, 允許外部連接這個端口。
  • CMD node demos/01.js:它表示容器啟動后自動執行node demos/01.js

RUN命令在 image 文件的構建階段執行,執行結果都會打包進入 image 文件;CMD命令則是在容器啟動后執行。另外,一個 Dockerfile 可以包含多個RUN命令,但是只能有一個CMD命令。

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否則它會覆蓋CMD命令。下面詳細介紹。

2.Dockfile 語法

  Dockerfile的基本指令有十三個,分別是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。下面對這些指令的用法一一說明。

2.1 FROM

  用法:FROM <image>

  說明:第一個指令必須是FROM了,其指定一個構建鏡像的基礎源鏡像,如果本地沒有就會從公共庫中拉取,沒有指定鏡像的標簽會使用默認的latest標簽,可以出現多次,如果需要在一個 Dockerfile 中構建多個鏡像。

2.2?MAINTAINER

  用法:MAINTAINER <name> <email>

  說明:描述鏡像的創建者,名稱和郵箱

2.3 RUN

  用法:RUN "command" "param1" "param2"

  說明:RUN 命令是一個常用的命令,執行完成之后會成為一個新的鏡像,這里也是指鏡像的分層構建。一句RUN就是一層,也相當于一個版本。這就是之前說的緩存的原理。我們知道docker是鏡像層是只讀的,所以你如果第一句安裝了軟件,用完在后面一句刪除是不可能的。所以這種情況要在一句RUN命令中完成,可以通過&符號連接多個RUN語句。RUN后面的必須是雙引號不能是單引號(沒引號貌似也不要緊),command是不會調用shell的,所以也不會繼承相應變量,要查看輸入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。

2.4 CMD

  用法:CMD command param1 param2

  說明:CMD 在 Dockerfile 中只能出現一次,有多個,只有最后一個會有效。其作用是在啟動容器的時候提供一個默認的命令項。如果用戶執行docker run的時候提供了命令項,就會覆蓋掉這個命令。沒提供就會使用構建時的命令。

2.5 EXPOSE

  用法:EXPOSE <port> [<port>...]

  說明:告訴Docker服務器容器對外映射的容器端口號,在 docker run -p 的時候生效。

2.6 ENV

  用法:EVN <key> <value> 只能設置一個

     ? EVN <key>=<value>允許一次設置多個

  說明:設置容器的環境變量,可以讓其后面的RUN命令使用,容器運行的時候這個變量也會保留。

定義環境變量的同時,可以引用已經定義的環境變量。在ENV指令中,可以直接引用如下環境變量:

  • HOME,用戶主目錄
  • HOSTNAME,默認容器的主機名
  • PATH,
  • TERM,默認xterm
  • ENV PATH /usr/local/bin:$PATH ENV LANG C.UTF-8 ENV TERM xterm ENV PYTHON_VERSION 3.5.3 ENV name1=ping name2=on_ip

    2.7 ADD

      用法:ADD <src> ? <dest>

      說明:復制本機文件或目錄或遠程文件,添加到指定的容器目錄,支持GO的正則模糊匹配。路徑是絕對路徑,不存在會自動創建。如果源是一個目錄,只會復制目錄下的內容,目錄本身不會復制。ADD命令會將復制的壓縮文件夾自動解壓,這也是與COPY命令最大的不同。

    2.8 COPY

      用法:COPY <src> <dest>

      說明:COPY除了不能自動解壓,也不能復制網絡文件。其它功能和ADD相同。

    2.9 ENTRYPOINT

      用法:ENTRYPOINT "command" "param1" "param2"

      說明:這個命令和CMD命令一樣,唯一的區別是不能被docker run命令的執行命令覆蓋,如果要覆蓋需要帶上選項--entrypoint,如果有多個選項,只有最后一個會生效。

    2.10 VOLUME

      用法:VOLUME ["path"]

      說明:在主機上創建一個掛載,掛載到容器的指定路徑。docker run -v命令也能完成這個操作,而且更強大。這個命令不能指定主機的需要掛載到容器的文件夾路徑。但docker run -v可以,而且其還可以掛載數據容器。

    2.11 USER

      用法:USER daemon

      說明:指定運行容器時的用戶名或UID,后續的RUN、CMD、ENTRYPOINT也會使用指定的用戶運行命令。

    2.12 WORKDIR

      用法:WORKDIR path

      說明:為RUN、CMD、ENTRYPOINT指令配置工作目錄。可以使用多個WORKDIR指令,后續參數如果是相對路徑,則會基于之前的命令指定的路徑。如:WORKDIR ?/home  WORKDIR test 。最終的路徑就是/home/test。path路徑也可以是環境變量,比如有環境變量HOME=/home,WORKDIR $HOME/test也就是/home/test。

    2.13 ONBUILD

      用法:ONBUILD [INSTRUCTION]

      說明:配置當前所創建的鏡像作為其它新創建鏡像的基礎鏡像時,所執行的操作指令。意思就是,這個鏡像創建后,如果其它鏡像以這個鏡像為基礎,會先執行這個鏡像的ONBUILD命令。

    3.Dockerfile例子

      一個使用安裝包安裝的tomcat例子:

    FROM centosMAINTAINER nobody?"xx@qq.com" RUN mkdir -p /opt/jdk/ RUN mkdir -p /opt/tomcat/ ADD jdk1.7.0_79 /opt/jdk/ ADD tomcat? /opt/tomcat/ ENV CATALINA_HOME /opt/tomcat ENV JAVA_HOME /opt/jdk EXPOSE?8080 ENV PATH $PATH:$JAVA_HOME/bin CMD ["/opt/tomcat/bin/catalina.sh","run"]

    總結

    以上是生活随笔為你收集整理的Docker 精通之 Dockerfile的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。