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


5. ENV 指令
ENV <key1>=<value1> <key2>=<value2> ...
其中 <key> 是環(huán)境變量的名稱,<value> 是環(huán)境變量的值。這種格式用于設(shè)置單個(gè)環(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ù)命令的默認(rèn)目錄。
WORKDIR <directory>
其中 <directory> 是要設(shè)置為工作目錄的路徑。可以使用絕對(duì)路徑或相對(duì)路徑。如果指定的路徑不存在,WORKDIR 指令將創(chuàng)建該目錄。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" # 指定工作目錄 WORKDIR /data/src
構(gòu)建這個(gè)鏡像,并啟動(dòng)。


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


也可以再進(jìn)行解壓(過程就不展示了)。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" WORKDIR /data/src # 將nginx的源代碼下載到當(dāng)前目錄(/data/src) ADD https://nginx.org/download/nginx-1.24.0.tar.gz . # 解壓到當(dāng)前目錄(/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 命令,例如安裝軟件包、運(yùn)行腳本、創(chuàng)建目錄等。
FROM ubuntu:22.04 as demo1 LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1" WORKDIR /data/src # 將nginx的源代碼下載到當(dāng)前目錄(/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è)置容器啟動(dòng)時(shí)默認(rèn)執(zhí)行的命令。它定義了容器啟動(dòng)時(shí)執(zhí)行的主要命令,但是可以被 Docker 命令行中的 docker run 中的參數(shù)覆蓋。
CMD command param1 param2
10. EXPOSE
EXPOSE 是 Dockerfile 中的一條指令,用于聲明容器運(yùn)行時(shí)要監(jiān)聽的端口。這個(gè)指令并不會(huì)實(shí)際打開端口或者創(chuàng)建端口映射,它只是告訴 Docker 容器內(nèi)部運(yùn)行的應(yīng)用程序應(yīng)該監(jiān)聽哪些端口。
EXPOSE <port> [<port>/<protocol>...]
其中 <port> 是要暴露的端口號(hào),<protocol> 是要使用的網(wǎng)絡(luò)協(xié)議,通常是 tcp 或 udp。如果未指定協(xié)議,則默認(rèn)為 tcp。
11. ENTRYPOINT
ENTRYPOINT 是 Dockerfile 中的一條指令,用于配置容器啟動(dòng)時(shí)執(zhí)行的命令。與 CMD 不同,ENTRYPOINT 指令設(shè)置的命令不會(huì)被 Docker 命令行中的 docker run 中的命令覆蓋,而是會(huì)作為容器的主要命令執(zhí)行。
ENTRYPOINT ["executable", "param1", "param2"]
比如:
ENTRYPOINT nginx -g 'daemon off;'
12. VOLUME
用于創(chuàng)建一個(gè)掛載點(diǎn),并將該掛載點(diǎn)中的數(shù)據(jù)持久化保存。
VOLUME ["<路徑>","<路徑>","<路徑>"……]
其中 <路徑> 是要掛載的目錄路徑。該目錄路徑可以是絕對(duì)路徑,也可以是相對(duì)于容器內(nèi)文件系統(tǒng)的路徑。
比如:
VOLUME ["/var/log", "/var/db"]
到此這篇關(guān)于Dockerfile制作鏡像的常用指令詳解的文章就介紹到這了,更多相關(guān)Dockerfile制作鏡像指令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker下安裝ElasticSearch和Kibana的示例代碼
這篇文章主要介紹了Docker下安裝ElasticSearch和Kibana的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
docker compose和docker-compose的區(qū)別及使用說明
Docker Compose V2 是 Docker Compose V1 的替代品,使用 Go 語言編譯,性能更好,資源占用更低,新特性包括 Watch 模式、等待服務(wù)就緒、環(huán)境隔離、更好的依賴控制、并行構(gòu)建和 DryRun 模式,V2 兼容 V1 的 compose 文件格式,遷移簡單2026-01-01
關(guān)于docker清理Overlay2占用磁盤空間的問題(親測(cè)有效)
使用Docker過程中,長時(shí)間運(yùn)行服務(wù)容器,導(dǎo)致不能進(jìn)行上傳文件等操作,今天通過本文給大家詳細(xì)介紹下docker清理Overlay2占用磁盤空間的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-03-03
LINUX中Docker?Swarm的介紹和詳細(xì)使用教程
Docker?Swarm是Docker的集群管理工具,將多個(gè)節(jié)點(diǎn)統(tǒng)一管理,支持服務(wù)部署、擴(kuò)縮容與滾動(dòng)更新,適用于高可用分布式應(yīng)用,本文給大家介紹LINUX中Docker?Swarm的介紹和詳細(xì)使用教程,感興趣的朋友一起看看吧2025-09-09
Docker Compose和直接使用docker run的區(qū)別及說明
DockerRun用于單個(gè)容器的啟動(dòng)和運(yùn)行,適合快速測(cè)試和學(xué)習(xí),DockerCompose用于定義和運(yùn)行多容器應(yīng)用,通過YAML文件配置并自動(dòng)管理服務(wù)依賴和網(wǎng)絡(luò),適合開發(fā)環(huán)境和微服務(wù)架構(gòu)2025-12-12
Docker通過容器生成鏡像提交DockerCommit詳解
這篇文章主要介紹了Docker通過容器生成鏡像提交DockerCommit的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-09-09
docker-compose安裝RabbitMQ及插件操作步驟
這篇文章主要為大家介紹了docker-compose安裝RabbitMQ及插件操作步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Docker Compose 與 Harbor 私有倉庫詳解
本文將探討Docker Compose多容器編排工具與Harbor企業(yè)級(jí)私有倉庫的核心技術(shù),幫助讀者掌握從容器管理到鏡像安全存儲(chǔ)的完整解決方案,感興趣的朋友一起看看吧2025-06-06

