欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)置容器啟動時的入口點(diǎn)
COPY從構(gòu)建上下文復(fù)制新文件或目錄到鏡像中
ADD類似于 COPY,但可以解壓縮歸檔文件并添加執(zhí)行權(quán)限
ENV設(shè)置環(huán)境變量
ARG定義構(gòu)建時使用的變量
VOLUME定義一個掛載點(diǎn),用于數(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)建新鏡像的起點(diǎn)
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/

# 定義一個掛載點(diǎn):VOLUME 定義一個掛載點(diǎn),用于數(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 將文件添加到鏡像中。

掛載點(diǎn): 定義一個掛載點(diǎn)。

暴露端口: 聲明容器運(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實(shí)戰(zhàn)案例1:Spring Boot應(yīng)用

項(xià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)建項(xiàng)目
FROM maven:3.8.1-jdk-11 AS build
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制項(xiàng)目文件到容器中
COPY src ./src
COPY pom.xml .
# 使用Maven構(gòu)建項(xiàng)目
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實(shí)戰(zhàn)案例2:Spring Boot和MyBatis多模塊項(xiàng)目

項(xiàng)目結(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)建項(xiàng)目
FROM maven:3.8.1-jdk-11 AS build
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制項(xiàng)目文件到容器中
COPY . .
# 使用Maven構(gòu)建項(xiàng)目
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格式化輸出命令:"docker?inspect?--format"?學(xué)習(xí)記錄

    Docker格式化輸出命令:"docker?inspect?--format"?學(xué)習(xí)記錄

    Docker?--format?參數(shù)提供了基于?Go模板?的日志格式化輸出輔助功能,并提供了一些內(nèi)置的增強(qiáng)函數(shù),這篇文章主要介紹了Docker格式化輸出命令:"docker?inspect?--format"?學(xué)習(xí)筆記,需要的朋友可以參考下
    2023-01-01
  • 使用docker部署spring boot并接入skywalking的方法

    使用docker部署spring boot并接入skywalking的方法

    這篇文章給大家介紹如何使用手動和docker的方式使用 skywalking的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • docker安裝nginx容器的方法

    docker安裝nginx容器的方法

    Nginx也是一款服務(wù)器,我們常用它做如:反向代理、負(fù)載均衡、動態(tài)與靜態(tài)資源的分離的工作,這篇文章主要介紹了docker安裝nginx,需要的朋友可以參考下
    2023-01-01
  • 兩種方式創(chuàng)建docker鏡像的啟動容器時區(qū)別介紹(總結(jié)篇)

    兩種方式創(chuàng)建docker鏡像的啟動容器時區(qū)別介紹(總結(jié)篇)

    這篇文章主要介紹了基于兩種創(chuàng)建docker鏡像的啟動容器時區(qū)別總結(jié),第一種凡是用docker commit生成的鏡像啟動的時候可以加載一個啟動自己應(yīng)用的腳本,第二種用Docfile文件生成的鏡像時,來啟動容器就不用再加這個腳本了,具體詳情一起通過本文學(xué)習(xí)吧
    2016-10-10
  • Docker安裝配置RabbitMQ的實(shí)現(xiàn)步驟

    Docker安裝配置RabbitMQ的實(shí)現(xiàn)步驟

    RabbitMQ是基于AMQP的一款消息管理系統(tǒng)。AMQP(Advanced?Message?Queuing?Protocol),是一個提供消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級消息隊(duì)列協(xié)議,其中RabbitMQ就是基于這種協(xié)議的一種實(shí)現(xiàn)
    2021-11-11
  • 解決docker訪問外部https數(shù)字證書問題

    解決docker訪問外部https數(shù)字證書問題

    這篇文章主要介紹了docker訪問外部https數(shù)字證書問題,為了解決證書驗(yàn)證的問題,我們需要在構(gòu)建 docker 鏡像的時候?qū)?nbsp;ca-certificates 根證書裝上,需要的朋友可以參考下
    2022-09-09
  • Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法

    Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法

    這篇文章主要介紹了Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Docker實(shí)現(xiàn)分布式應(yīng)用功能教程

    Docker實(shí)現(xiàn)分布式應(yīng)用功能教程

    這篇文章主要介紹了Docker實(shí)現(xiàn)分布式應(yīng)用功能,涉及docker分布式應(yīng)用、負(fù)載均衡相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • docker鏡像拉取速度過慢的解決方案

    docker鏡像拉取速度過慢的解決方案

    這篇文章主要介紹了docker鏡像拉取速度過慢的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 如何將Docker的構(gòu)建時間減少40%(推薦)

    如何將Docker的構(gòu)建時間減少40%(推薦)

    這篇文章主要介紹了如何將Docker的構(gòu)建時間減少40%,本文描述了我們在優(yōu)化CI管道后獲得的一些新見解,需要的朋友可以參考下
    2023-11-11

最新評論