首頁>技術>

Dockerfile: 是一個用來構建映象的文字檔案,文字內容包含了一條條構建映象所需的指令和說明。

應用: 將部署過程中涉及到的所有步驟全部寫入到 Dockerfile 中,到時只需要執行 Dockerfile 就可以自動完成相應的操作

快速入門編輯Dockerfile

在當前目錄下建立 Dockerfile 並進行編輯

vim Dockerfile

操作:啟動 ubuntu 映象,在啟動起來後去更新 ubuntu 容器下的軟體資源 內容如下

# From: 啟動執行一個映象資源From ubuntu# Run: 在啟動起來的容器中執行指令RUN apt-get update
執行Dockerfile

構建映象命令

docker build -t [映象名]:[版本號] [Dockerfile所在目錄]

指定在當前目錄下去查詢 Dockerfile 檔案,並將 Dockerfile 自動化處理後的(更新了軟體資源)容器打成名為 lxf 的映象資源

docker build -t lxf .

執行效果:

待執行完成後,當前擁有的映象資源就多出了 lxf 這一個,可以看到 lxf 這個映象的大小是要比 ubuntu 的映象要大一點的

基礎指令詳解FROM

格式:

FROM <image>FROM <image>:<tag>

說明:

FROM 是 Dockerfile 裡的第一條而且只能是除了首行註釋之外的第一條指令RUN

格式:

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

說明:

表示當前映象構建時候執行的命令

註釋:

# shell 模式:類似於 /bin/bash -c command RUN echo hello # exec 模式:類似於 RUN ["/bin/bash", "-c", "command"] RUN ["echo", "hello"]

執行多條指令

一條條指令寫
RUN echo helloRUN echo world
將指令用 && 連線起來
RUN echo hello && echo world
MAINTAINER

格式:

MAINTAINER <name>

說明:

指定該 Dockerfile 檔案的維護者資訊EXPOSE

設定容器對外開放的埠

格式:

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

解釋:

設定 Docker 容器對外暴露的埠號, Docker 為了安全,不會自動對外開啟埠,如果需要外部提供訪問,還需要啟動容器時增加 -p 或者 -P 引數對容器的埠進行分配。ENTRYPOINT

設定容器在啟動後去執行一個命令

格式:

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

解釋:

每個 Dockerfile 中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效。

EXPOSE 和 ENTRYPOINT 結合使用的例子,可以全文看完後再回到這裡看該例子

# 使用django映象資源From django# 切換目錄WORKDIR /home# 建立一個名為lxf的django專案RUN django-admin startproject lxf# 切換目錄WORKDIR /home/lxf# 對外開放8000埠EXPOSE 8000# 容器啟動後,將django服務開啟,並指定埠號為8000ENTRYPOINT python3 manage.py runserver 0.0.0.0:8000

執行構建映象命令

docker build -t lxf .

現在我們將構建好的 lxf 容器執行起來,並隨機分配埠

docker run -dit -P lxf

可以看到, Docker 為我們隨機分配了 55001 埠對映到容器的 8000 埠,並且可以正常訪問到容器的 django 服務

檔案指令詳解ADD

格式:

ADD <src>... <dest>ADD ["<src>",... "<dest>"]

說明:

將指定的 <src> 檔案複製到容器檔案系統中的 <dest>src 指的是宿主機,dest 指的是容器如果原始檔是個壓縮檔案,則 Docker 會自動幫解壓到指定的容器中(無論目標是檔案還是目錄,都會當成目錄處理)。

如:將宿主機下的 ./data 目錄下的所有檔案(夾),全部複製到容器的 /home 目錄下

From ubuntuADD ./data /home

注:目錄本身即 data 目錄並不會複製到容器中,只複製 data 目錄下的檔案(夾),如果想連同 data 資料夾也複製過去,可以修改為如下指令

From ubuntuADD ./data /home/data
COPY

格式:

COPY <src>... <dest>COPY ["<src>",... "<dest>"]

解釋:

單純複製檔案場景, Docker 推薦使用 COPY如果原始檔是個壓縮檔案, Docker 會直接將壓縮檔案複製進容器內,不會像 ADD 那樣先解壓再複製

注: COPY 與 ADD 基本上是一樣的,只是面對原始檔是壓縮檔案時處理方式不同而已, ADD 會先解壓再將解壓後的內容複製到容器, COPY 不會進行解壓,而是直接將壓縮包複製過去

環境指令詳解ENV

設定環境變數

格式:

ENV <key> <value>ENV <key>=<value> ...

解釋:

設定環境變數,可以在 RUN 之前使用,然後 RUN 命令時呼叫,容器啟動時這些環境變數都會被指定

如:設定了環境變數 name ,並賦值為 lxf ,使用 RUN 命令列印 name 變數的值,可以成功打印出來

ENV name=lxfRUN echo $name # 會打印出lxf

並且,當進入容器後也可以正常打印出該變數的值

root@5721971f92e4:/# echo $namelxf
WORKDIR

切換目錄

格式:

WORKDIR /path/to/workdir

解釋:

切換目錄,為後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄。相當於 cd 命令,可以使用多個 WORKDIR 指令進行多次切換,後續命令如果引數是相對路徑,則會基於之前命令指定的路徑如果我們指定切換到一個不存在的目錄, Docker 會幫我們自動建立相應的目錄

舉例:

WORKDIR /aWORKDIR bWORKDIR cRUN pwd

最終路徑為 /a/b/c

如果我們想要容器被執行起來時,自動進入到 /home ,可以按如下指令設定

 From ubuntu WORKDIR /home

執行 Dockerfile 構建映象完成後執行起來,此時容器便會自動進入到 /home 目錄

對比一下之前沒有設定使用過 WORKDIR ,執行起來的容器,會預設進入到根目錄

5
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python 學習 第14篇:資料型別(元組和集合)