Dockerfile制作鏡像的常用指令詳解
1.Dockerfile 指令清單
更多更詳細指令:官網(wǎng) Dockerfile reference | Docker Docs
| Dockerfile 指令 | 功能 |
|---|---|
| FROM | 指定基礎(chǔ)鏡像 |
| RUN | 在鏡像構(gòu)建過程中執(zhí)行命令 |
| COPY | 將文件或目錄從構(gòu)建環(huán)境復制到鏡像中 |
| ADD | 類似于 COPY,但更強大,支持 URL 和解壓縮操作 |
| WORKDIR | 設(shè)置工作目錄 |
| ENV | 設(shè)置環(huán)境變量 |
| ARG | 定義構(gòu)建時的參數(shù) |
| EXPOSE | 聲明容器運行時要監(jiān)聽的端口 |
| VOLUME | 創(chuàng)建掛載點,用于持久化數(shù)據(jù) |
| CMD | 指定容器啟動時要運行的默認命令 |
| ENTRYPOINT | 配置容器啟動時執(zhí)行的命令 |
| LABEL | 添加元數(shù)據(jù),用于標記鏡像 |
| USER | 設(shè)置容器中運行命令的用戶 |
| SHELL | 配置 shell 類型 |
在包含 Dockerfile 文件的目錄中執(zhí)行以下命令:
docker build -t <image_name>:<tag> <path_to_dockerfile_directory>
-t <image_name>:<tag>用于指定構(gòu)建的鏡像名稱及標簽。<path_to_dockerfile_directory>是 Dockerfile 所在的目錄路徑。
2. FROM 指令
FROM 指令初始化一個新的構(gòu)建階段,并為后續(xù)指令設(shè)置基礎(chǔ)鏡像。因此,一個有效的 Dockerfile 必須以 FROM 指令開頭。鏡像可以是任何有效的鏡像。
FROM [--platform=<platform>] <image> [AS <name>]
- 參數(shù)
<platform>: 構(gòu)建的 cpu 架構(gòu),如 Linux/amd 64,Linux/arm 64。<image>: 指定 base image 的名稱。- AS
<name>: 指定構(gòu)建步驟的名稱。
3. LABEL 指令
- 為鏡像添加元數(shù)據(jù),元數(shù)據(jù)為鍵值對的形式。
LABEL <key>=<value> <key>=<value> <key>=<value> ...
比如
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
4. COPY 指令
- 用于從
docker主機復制新文件或者目錄至創(chuàng)建的新鏡像指定路徑中。
COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest> # 或 COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
<src>是構(gòu)建環(huán)境中要復制的文件或目錄的路徑。<dest>是要將文件或目錄復制到容器中的目標路徑。
除了基本的格式之外,COPY 指令還支持一些參數(shù)來指定復制行為:
-chown=<user>:<group>:設(shè)置文件的所有者和組。例如-chown=root:root。--from=<source_stage>:從之前的構(gòu)建階段(指定的構(gòu)建階段或者鏡像)復制文件。這個參數(shù)可以讓你從一個鏡像或者構(gòu)建階段中復制文件到當前的鏡像。這對于多階段構(gòu)建非常有用。
- 案例:
創(chuàng)建一個 Dockerfile 文件,內(nèi)容如下。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" COPY ./index.html /data/web/html/
- 使用
FROM ubuntu:22.04 as demo1指令,表示初始化一個新的構(gòu)建階段,并以ubuntu:22.04鏡像作為基礎(chǔ)鏡像,并將該階段命名為demo1。 - 使用
LABEL指令,添加元數(shù)據(jù)信息。author="xiaoming"表示作者為 "xiaoming";version="1.0"表示版本為 "1.0";desc="create ubuntu demo1"表示描述為 "create ubuntu demo 1"。 - 將主機中的當前目錄下的
index.html文件拷貝到容器的/data/web/html/目錄中。


5. ENV 指令
ENV <key1>=<value1> <key2>=<value2> ...
其中 <key> 是環(huán)境變量的名稱,<value> 是環(huán)境變量的值。這種格式用于設(shè)置單個環(huán)境變量,也可以使用通配符。
FROM ubuntu:22.04 as demo1
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
ENV MYROOTDIR=/data/web/html/
# 使用通配符引用 MYROOTDIR
COPY ./index.html ${MYROOTDIR}
ENV MYTEST=1
6.WORKDIR
WORKDIR 指令用于設(shè)置工作目錄,即在容器中執(zhí)行后續(xù)命令的默認目錄。
WORKDIR <directory>
其中 <directory> 是要設(shè)置為工作目錄的路徑。可以使用絕對路徑或相對路徑。如果指定的路徑不存在,WORKDIR 指令將創(chuàng)建該目錄。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" # 指定工作目錄 WORKDIR /data/src
構(gòu)建這個鏡像,并啟動。


WORKDIR 指令的作用是設(shè)置容器中執(zhí)行后續(xù)命令的默認工作目錄。它影響接下來所有命令執(zhí)行的上下文環(huán)境,使得在Docker 容器中執(zhí)行命令時不必每次都指定完整的路徑。
7. ADD
ADD 指令用于將本地文件、目錄、或遠程文件 URL 添加到鏡像中。它類似于 COPY 指令,但具有更多的功能,比如會它可以解壓和下載。
ADD <source> <destination>
其中 <source> 是要添加到鏡像中的文件、目錄或 URL,而 <destination> 是文件系統(tǒng)中的目標路徑。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" WORKDIR /data/src # 將nginx的源代碼下載到當前目錄(/data/src) ADD https://nginx.org/download/nginx-1.24.0.tar.gz .


也可以再進行解壓(過程就不展示了)。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" WORKDIR /data/src # 將nginx的源代碼下載到當前目錄(/data/src) ADD https://nginx.org/download/nginx-1.24.0.tar.gz . # 解壓到當前目錄(/data/src) ADD ./nginx-1.24.0.tar.gz .
8.RUN
RUN 指令用于在鏡像構(gòu)建過程中執(zhí)行命令。它可以執(zhí)行任何有效的 shell 命令、可執(zhí)行文件或腳本。其基本格式為:
RUN <command> && <command> ……
其中 <command> 是要執(zhí)行的命令。在 Dockerfile 中可以是任何合法的 shell 命令,例如安裝軟件包、運行腳本、創(chuàng)建目錄等。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" WORKDIR /data/src # 將nginx的源代碼下載到當前目錄(/data/src) ADD https://nginx.org/download/nginx-1.24.0.tar.gz . # 執(zhí)行 cd 與 tar 命令 RUN cd /data/src && tar zxvf nginx-1.24.0.tar.gz
9. CMD
CMD 是 Dockerfile 中的一條指令,用于設(shè)置容器啟動時默認執(zhí)行的命令。它定義了容器啟動時執(zhí)行的主要命令,但是可以被 Docker 命令行中的 docker run 中的參數(shù)覆蓋。
CMD command param1 param2
10. EXPOSE
EXPOSE 是 Dockerfile 中的一條指令,用于聲明容器運行時要監(jiān)聽的端口。這個指令并不會實際打開端口或者創(chuàng)建端口映射,它只是告訴 Docker 容器內(nèi)部運行的應用程序應該監(jiān)聽哪些端口。
EXPOSE <port> [<port>/<protocol>...]
其中 <port> 是要暴露的端口號,<protocol> 是要使用的網(wǎng)絡協(xié)議,通常是 tcp 或 udp。如果未指定協(xié)議,則默認為 tcp。
11. ENTRYPOINT
ENTRYPOINT 是 Dockerfile 中的一條指令,用于配置容器啟動時執(zhí)行的命令。與 CMD 不同,ENTRYPOINT 指令設(shè)置的命令不會被 Docker 命令行中的 docker run 中的命令覆蓋,而是會作為容器的主要命令執(zhí)行。
ENTRYPOINT ["executable", "param1", "param2"]
比如:
ENTRYPOINT nginx -g 'daemon off;'
12. VOLUME
用于創(chuàng)建一個掛載點,并將該掛載點中的數(shù)據(jù)持久化保存。
VOLUME ["<路徑>","<路徑>","<路徑>"……]
其中 <路徑> 是要掛載的目錄路徑。該目錄路徑可以是絕對路徑,也可以是相對于容器內(nèi)文件系統(tǒng)的路徑。
比如:
VOLUME ["/var/log", "/var/db"]
到此這篇關(guān)于Dockerfile制作鏡像的常用指令詳解的文章就介紹到這了,更多相關(guān)Dockerfile制作鏡像指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker容器沒有權(quán)限寫入宿主機目錄的解決方案
這篇文章主要介紹了Docker容器沒有權(quán)限寫入宿主機目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
docker-compose+nginx部署前后端分離的項目實踐
本文主要介紹了docker-compose?+?nginx部署前后端分離的項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Spring Boot應用通過Docker發(fā)布部署的流程分析
將Spring Boot項目部署到docker中有兩種方法,手動部署和插件部署,本文通過實例代碼介紹了idea創(chuàng)建spring boot項目的詳細過程,感興趣的朋友一起看看吧2021-09-09
docker compose安裝es+kibana 8.12.2的詳細過程
因云平臺需要改造,es7升級為es8,所以記錄一下,es8需要開啟ssl認證,需要配置證書,全本帶你用docker安裝,便于后面es8的學習,這篇文章主要介紹了docker compose安裝es+kibana 8.12.2的詳細過程,感興趣的朋友跟隨小編一起看看吧2024-05-05

