最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker利用dockerfile構(gòu)建鏡像

 更新時間:2024年10月05日 16:22:59   作者:肖哥彈架構(gòu)  
dockerfile是一種用于定義和構(gòu)建docker鏡像的文本文件,由一行行指令和參數(shù)組成,用于描述鏡像的構(gòu)建和配置過程;由基礎(chǔ)映像、軟件包安裝、文件拷貝、環(huán)境變量設(shè)置等組成

dockerfile是一種用于定義和構(gòu)建docker鏡像的文本文件,由一行行指令和參數(shù)組成,用于描述鏡像的構(gòu)建和配置過程;由基礎(chǔ)映像、軟件包安裝、文件拷貝、環(huán)境變量設(shè)置等組成;

基于dockerfile構(gòu)建鏡像可以使用docker build命令,使用 -f 可以指定具體的dockerfile文件;

使用dockerfile構(gòu)建鏡像的步驟如下:編寫dockerfile文件-->docker build構(gòu)建鏡像-->docker run運(yùn)行鏡像;

Dockerfile概述

Dockerfile文件需放置在一個目錄中,這個目錄中有構(gòu)建鏡像的所有文件,是本次執(zhí)行的上下文路目錄(可以理解為docker根目錄),可以創(chuàng)建子目錄。
在Dockerfile文件中,"#“號開頭表示注釋,每行為"INSTRUCTION arguments”,習(xí)慣大寫表示關(guān)鍵字(但并不區(qū)分大小寫),后面小寫表示值。
每個Dockerfile的第一行(注釋行除外),必須使用"FROM"關(guān)鍵字。
當(dāng)使用docker build構(gòu)建鏡像時,會將我們指定的上下文目錄打包傳遞給docker引擎。這個上下文目錄中并非所有文件都會在Dockerfile中使用,傳送給docker引擎的目錄過大會影響構(gòu)建速度,可以在此目錄中定義.dockerignore文件,將不使用的文件的文件名寫入到.dockerignore文件屏蔽掉,且支持通配符。
最小化鏡像的層數(shù),Dockerfile中每一行命令就是一層,層數(shù)過多影響構(gòu)建效率。
Dockerfile文件中命令從上往下逐行執(zhí)行。

DockerFile鏡像的指令和參數(shù)

Dockerfile 是一個文本文件,它包含了用于構(gòu)建 Docker 鏡像的一系列指令和參數(shù)。以下是 Dockerfile 的常見結(jié)構(gòu)和組成部分:

指令說明
FROM指定基礎(chǔ)鏡像,開始構(gòu)建新鏡像
RUN執(zhí)行命令并創(chuàng)建新的鏡像層
CMD提供容器啟動時執(zhí)行的默認(rèn)命令
ENTRYPOINT設(shè)置容器啟動時的入口點
COPY從構(gòu)建上下文復(fù)制新文件或目錄到鏡像中
ADD類似于 COPY,但可以解壓縮歸檔文件并添加執(zhí)行權(quán)限
ENV設(shè)置環(huán)境變量
ARG定義構(gòu)建時使用的變量
VOLUME定義一個掛載點,用于數(shù)據(jù)持久化或共享
EXPOSE聲明容器運(yùn)行時監(jiān)聽的端口
WORKDIR設(shè)置工作目錄
USER指定運(yùn)行命令的用戶
HEALTHCHECK定義容器的健康檢查命令
ONBUILD指定當(dāng)所創(chuàng)建的鏡像作為其他鏡像的基礎(chǔ)鏡像時執(zhí)行的命令
STOPSIGNAL配置停止容器的信號
LABEL為鏡像添加元數(shù)據(jù)
SHELL指定用于執(zhí)行 RUN、CMD、ENTRYPOINT 和 SCRIPT 指令的 shell
MAINTAINER指定維護(hù)者的姓名和一個可選的電子郵件地址(已廢棄)

DockerFile鏡像案例

# 使用基礎(chǔ)鏡像,這是構(gòu)建新鏡像的起點
FROM ubuntu:20.04 AS base

# 維護(hù)者信息(使用 LABEL 替代 MAINTAINER)
LABEL maintainer="Name <email>"

# 設(shè)置環(huán)境變量,這會影響后續(xù)的RUN指令以及容器運(yùn)行時的環(huán)境
ENV MY_ENV_VAR="my_value"
ENV PATH="/usr/local/bin:${PATH}"

# RUN 指令執(zhí)行命令并創(chuàng)建一個新的鏡像層,用于安裝軟件包
RUN apt-get update && apt-get install -y \
    curl \
    git \
    vim

# 工作目錄 :WORKDIR 設(shè)置工作目錄,后續(xù)的RUN、CMD、ENTRYPOINT指令都會基于這個工作目錄
WORKDIR /app

# 復(fù)制當(dāng)前目錄內(nèi)容到容器內(nèi)的 /app 目錄下,COPY 從構(gòu)建上下文(通常為Dockerfile所在的目錄)復(fù)制新文件或目錄到鏡像中
COPY . /app

# 添加額外的文件到鏡像中:ADD 與COPY類似,但可以處理tar壓縮文件,并且可以執(zhí)行一些特殊操作
ADD ./files/* /app/files/

# 定義一個掛載點:VOLUME 定義一個掛載點,用于數(shù)據(jù)持久化或容器間數(shù)據(jù)共享
VOLUME /var/log/myapp

# EXPOSE 聲明容器運(yùn)行時監(jiān)聽的端口
EXPOSE 8000

# 指定容器啟動時執(zhí)行的命令:CMD 指令提供容器啟動時執(zhí)行的默認(rèn)命令,可以被docker run的參數(shù)覆蓋
CMD ["python", "/app/main.py"]

# 構(gòu)建階段:編譯應(yīng)用,使用多階段構(gòu)建來減小最終鏡像的大小
FROM base AS builder
RUN apt-get update && apt-get install -y build-essential
COPY --from=base /app /app
RUN make /app

# 生產(chǎn)階段:運(yùn)行應(yīng)用,使用基礎(chǔ)鏡像作為構(gòu)建產(chǎn)物的運(yùn)行環(huán)境
FROM base AS production
COPY --from=builder /app/bin /app/bin
CMD ["/app/bin/myapp"]

# 健康檢查: HEALTHCHECK 定義容器的健康檢查命令,提高容器的可靠性
HEALTHCHECK --interval=30s --timeout=30s --retries=3 \
  CMD curl -f http://localhost:8000 || exit 1

# 用戶:USER 指定運(yùn)行命令的用戶和用戶組,提高安全性
USER 1000:1000

# 構(gòu)建緩存:ARG 定義構(gòu)建緩存的變量,可以用于構(gòu)建過程中的參數(shù)傳遞
ARG BUILD_DATE
LABEL org.label-schema.build-date=$BUILD_DATE

# 停止信號:STOPSIGNAL 配置停止容器的信號,可以是任何POSIX停止信號或數(shù)字
STOPSIGNAL SIGTERM

# 使用 SHELL 指令 :SHELL 指定用于執(zhí)行指令的shell,可以是bash、sh等
SHELL ["/bin/bash", "-c"]

解釋

基礎(chǔ)鏡像: 使用 ubuntu:20.04 作為基礎(chǔ)鏡像。

維護(hù)者信息: 使用 LABEL 替代已廢棄的 MAINTAINER。

環(huán)境變量: 設(shè)置環(huán)境變量 MY_ENV_VAR 和更新 PATH

更新和安裝軟件: 使用 RUN 安裝軟件包。

工作目錄: 設(shè)置工作目錄為 /app。

復(fù)制文件: 使用 COPYADD 將文件添加到鏡像中。

掛載點: 定義一個掛載點。

暴露端口: 聲明容器運(yùn)行時監(jiān)聽的端口。

默認(rèn)命令: 設(shè)置容器啟動時執(zhí)行的默認(rèn)命令。

構(gòu)建階段: 使用 builder 階段編譯應(yīng)用。

生產(chǎn)階段: 使用 production 階段運(yùn)行應(yīng)用。

健康檢查: 定義容器的健康檢查命令。

用戶: 指定運(yùn)行命令的用戶。

構(gòu)建緩存: 使用 ARG 定義構(gòu)建時的變量。

停止信號: 配置停止容器的信號。

SHELL: 指定用于執(zhí)行指令的 shell。

命令詳細(xì)說明

基礎(chǔ)鏡像指令 (FROM)

FROM ubuntu:20.04

FROM 指令指定了基礎(chǔ)鏡像,這是構(gòu)建新鏡像的基礎(chǔ)。

維護(hù)者指令 (MAINTAINER) (可選,已廢棄,建議使用 LABEL)

LABEL maintainer="name <email>"

LABEL 用于添加元數(shù)據(jù),替代了以前的 MAINTAINER 指令。

環(huán)境變量指令 (ENV)

ENV PATH /usr/local/bin:$PATH

 ENV 用于設(shè)置環(huán)境變量。

工作目錄指令 (WORKDIR)

WORKDIR /app

 WORKDIR 設(shè)置容器內(nèi)的當(dāng)前工作目錄。

復(fù)制指令 (COPYADD)

COPY . /app

COPY 從構(gòu)建上下文復(fù)制新文件或目錄到容器的文件系統(tǒng)。

ADDCOPY 類似,但處理歸檔文件時有額外的功能。

 運(yùn)行指令 (RUN)

RUN apt-get update && apt-get install -y nginx

 RUN 指令用于執(zhí)行命令,并將其結(jié)果(如安裝的軟件)作為新的鏡像層保存。

暴露指令 (EXPOSE)

EXPOSE 80

EXPOSE 指令通知 Docker 守護(hù)進(jìn)程容器運(yùn)行時監(jiān)聽的端口。

啟動命令指令 (CMD)

CMD ["nginx", "-g", "daemon off;"]

CMD 指令指定了容器啟動時執(zhí)行的默認(rèn)命令。

健康檢查指令 (HEALTHCHECK)

HEALTHCHECK --interval=30s --timeout=30s --retries=3 CMD curl -f http://localhost || exit 1

HEALTHCHECK 指令用于指定如何檢查容器健康狀況。

構(gòu)建緩存指令 (ARG)

ARG VERSION=latest

ARG 指令用于定義構(gòu)建過程中的變量。

多階段構(gòu)建 (FROM 在 Dockerfile 中多次使用)

# 第一階段: 構(gòu)建階段
FROM golang:1.16 AS builder
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY . .
RUN go build -o /my-go-app

# 第二階段: 生產(chǎn)環(huán)境
FROM alpine:latest
RUN apk add --no-cache ca-certificates
WORKDIR /root
COPY --from=builder /my-go-app .
CMD ["./my-go-app"]

使用多階段構(gòu)建可以減小最終鏡像的大小,將構(gòu)建產(chǎn)物從構(gòu)建階段復(fù)制到生產(chǎn)環(huán)境鏡像。

DockerFile實戰(zhàn)案例1:Spring Boot應(yīng)用

項目結(jié)構(gòu)

假設(shè)我們的Spring Boot應(yīng)用結(jié)構(gòu)如下:

springbootapp/
├── src/
│   ├── main/
│   │   ├── java/com/
│   │   │   └── example/
│   │   │       ├── controller/
│   │   │       │   └── HelloController.java
│   │   │       └── Application.java
│   │   └── resources/
│   │       └── application.properties
├── pom.xml
└── Dockerfile

HelloController.java 是Spring Boot控制器。

Application.java 是Spring Boot應(yīng)用的主程序。

application.properties 包含應(yīng)用配置。

pom.xml 是Maven構(gòu)建配置文件。

Dockerfile

# 使用官方Java基礎(chǔ)鏡像,帶有Maven環(huán)境,用于構(gòu)建項目
FROM maven:3.8.1-jdk-11 AS build
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制項目文件到容器中
COPY src ./src
COPY pom.xml .
# 使用Maven構(gòu)建項目
RUN mvn -f pom.xml clean package

# 使用官方Java基礎(chǔ)鏡像,用于運(yùn)行應(yīng)用
FROM openjdk:11-jre-slim
# 設(shè)置工作目錄
WORKDIR /app
# 從構(gòu)建階段復(fù)制已構(gòu)建的jar文件到運(yùn)行階段
COPY --from=build /app/target/*.jar ./app.jar
# 暴露端口
EXPOSE 8080
# 運(yùn)行Spring Boot應(yīng)用
CMD ["java", "-jar", "app.jar"]

構(gòu)建和運(yùn)行Docker鏡像

構(gòu)建鏡像

docker build -t springbootapp .

運(yùn)行容器:

docker run -p 8080:8080 springbootapp

DockerFile實戰(zhàn)案例2:Spring Boot和MyBatis多模塊項目

項目結(jié)構(gòu)

多模塊Spring Boot和MyBatis應(yīng)用結(jié)構(gòu)如下:

multimoduleapp/
├── pom.xml
├── Dockerfile
└── app/
    ├── common/
    │   ├── pom.xml
    │   └── src/
    │       ├── main/
    │       └── java/
    │           └── com/
    │               └── example/
    │                   └── common/
    │                       └── CommonService.java
    ├── api/
    │   ├── pom.xml
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── example/
    │       │   │           └── api/
    │       │   │               └── ApiController.java
    │       │   └── resources/
    │       └── application.properties
    └── service/
        ├── pom.xml
        ├── src/
        │   ├── main/
        │   │   ├── java/
        │   │   │   └── com/
        │   │   │       └── example/
        │   │   │           └── service/
        │   │   │               └── BusinessService.java
        │   │   └── resources/
        └── src/
            └── main/
                └── resources/
                    └── mapper/
                        └── UserMapper.xml

CommonService.java 是一個通用服務(wù)。

ApiController.java 是Spring Boot控制器。

BusinessService.java 是業(yè)務(wù)邏輯服務(wù)。

UserMapper.xml 是MyBatis映射文件。

pom.xml 是Maven構(gòu)建配置文件。

Dockerfile

# 使用官方Java基礎(chǔ)鏡像,帶有Maven環(huán)境,用于構(gòu)建項目
FROM maven:3.8.1-jdk-11 AS build
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制項目文件到容器中
COPY . .
# 使用Maven構(gòu)建項目
RUN mvn -f pom.xml clean package

# 使用官方Java基礎(chǔ)鏡像,用于運(yùn)行應(yīng)用
FROM openjdk:11-jre-slim
# 設(shè)置工作目錄
WORKDIR /app
# 從構(gòu)建階段復(fù)制已構(gòu)建的jar文件到運(yùn)行階段
COPY --from=build /app/api/target/*.jar ./app.jar
# 暴露端口
EXPOSE 8080
# 運(yùn)行Spring Boot應(yīng)用
CMD ["java", "-jar", "app.jar"]

構(gòu)建和運(yùn)行Docker鏡像

構(gòu)建鏡像

docker build -t multimoduleapp .

運(yùn)行容器:

docker run -p 8080:8080 multimoduleapp

總結(jié)

到此這篇關(guān)于docker利用dockerfile構(gòu)建鏡像的文章就介紹到這了,更多相關(guān)dockerfile構(gòu)建docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker創(chuàng)建mongodb數(shù)據(jù)庫容器的方法

    docker創(chuàng)建mongodb數(shù)據(jù)庫容器的方法

    本文將通過docker創(chuàng)建一個mongodb數(shù)據(jù)庫容器,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • docker執(zhí)行roslaunch顯示錯誤的問題

    docker執(zhí)行roslaunch顯示錯誤的問題

    本文主要介紹了docker執(zhí)行roslaunch顯示錯誤的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Docker搭建私有倉庫(registry與Harbor)的實現(xiàn)

    Docker搭建私有倉庫(registry與Harbor)的實現(xiàn)

    這篇文章主要介紹了Docker搭建私有倉庫(registry與Harbor)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Docker安裝mysql并解決中文亂碼問題

    Docker安裝mysql并解決中文亂碼問題

    本文主要介紹了Docker安裝mysql并解決中文亂碼問題本人親自測試,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Docker跨平臺和環(huán)境部署的過程詳解

    Docker跨平臺和環(huán)境部署的過程詳解

    Docker是一個開放源代碼的容器化平臺,它能夠?qū)崿F(xiàn)應(yīng)用及其依賴的打包,從而實現(xiàn)跨平臺和環(huán)境的快速部署,本文介紹了Docker的基本概念、優(yōu)勢和基本使用方法,包括安裝、啟動、構(gòu)建鏡像和部署應(yīng)用等步驟
    2024-11-11
  • idea?+?Docker?+?阿里鏡像服務(wù)打包部署的過程

    idea?+?Docker?+?阿里鏡像服務(wù)打包部署的過程

    本文介紹了如何在IDEA中使用Docker打包鏡像,并將鏡像推送到阿里云鏡像服務(wù),同時,還詳細(xì)說明了如何在ECS服務(wù)器上安裝和配置Docker,并提供了常用的Docker命令和操作技巧,感興趣的朋友一起看看吧
    2025-02-02
  • docker搭建dnsmasq服務(wù)的實現(xiàn)

    docker搭建dnsmasq服務(wù)的實現(xiàn)

    本文將指導(dǎo)讀者如何使用Docker搭建DNSmasq服務(wù),通過簡單的步驟和詳細(xì)的說明,幫助讀者快速在Docker環(huán)境中部署DNSmasq,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 不重啟docker進(jìn)程,重新reload加載配置過程

    不重啟docker進(jìn)程,重新reload加載配置過程

    這篇文章主要介紹了不重啟docker進(jìn)程,重新reload加載配置過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-09-09
  • 詳解使用 Docker 構(gòu)建 LNMP 環(huán)境

    詳解使用 Docker 構(gòu)建 LNMP 環(huán)境

    本篇文章主要介紹了使用 Docker 構(gòu)建 LNMP 環(huán)境,詳細(xì)的介紹了配置LNMP 環(huán)境的步驟。具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • docker搭建memcached的詳細(xì)步驟

    docker搭建memcached的詳細(xì)步驟

    Memcached?是一個通用的分布式內(nèi)存緩存系統(tǒng),它通常用于通過在?RAM?中緩存數(shù)據(jù)和對象來加速動態(tài)數(shù)據(jù)庫驅(qū)動的網(wǎng)站,以減少必須讀取外部數(shù)據(jù)源(例如數(shù)據(jù)庫或?API)的次數(shù),這篇文章主要介紹了docker搭建memcache,需要的朋友可以參考下
    2022-07-07

最新評論

杭州市| 台中市| 娱乐| 尼勒克县| 万州区| 泰顺县| 松溪县| 新源县| 新野县| 田林县| 宜兰县| 蓝田县| 临夏市| 寿阳县| 平泉县| 赞皇县| 静安区| 深泽县| 永靖县| 麻城市| 屏南县| 靖州| 襄汾县| 堆龙德庆县| 石台县| 建德市| 石河子市| 筠连县| 绥棱县| 马关县| 宁波市| 惠水县| 瑞安市| 南岸区| 乐东| 玉山县| 巴南区| 阿克陶县| 泰宁县| 岳阳县| 宁陵县|