day055-Dockerfile與常用指令

文章目錄

  • 0. 老男孩思想-女性的第一需求
  • 1. Dockerfile
    • 1.1 Dockerfile的基本結構
    • 1.2 案例-制作小鳥飛飛鏡像
      • 1.2.1 編寫Dockerfile文件
      • 1.2.2 構建鏡像
      • 1.2.3 啟動容器
    • 1.3 Dockerfile常用指令
    • 1.4 面試題:Dockerfile中CMD和ENTRYPOINT的區別?
    • 1.5 案例-制作zrlog鏡像
      • 1.5.1 編寫Dockerfile文件
      • 1.5.2 生成鏡像并啟動容器
    • 1.6 案例-制作后端考試系統鏡像
      • 1.6.1 編寫Dockerfile文件和啟動腳本
      • 1.6.2 制作鏡像并啟動容器
  • 2. 思維導圖

0. 老男孩思想-女性的第一需求

女性永遠的第一需求,就是做一個精致的女人。

在這里插入圖片描述

1. Dockerfile

Dockerfile 是構建 Docker 鏡像的核心配置文件,它通過一系列指令定義了如何自動化構建容器鏡像。Docker 在構建鏡像時會按照 Dockerfile 中的指令逐步執行,每一行指令都會生成一個新的鏡像層(layer)。

1.1 Dockerfile的基本結構

  1. 基礎鏡像:指定構建鏡像的初始鏡像
  2. 元數據定義:添加鏡像的元數據(如作者、版本、說明等)
  3. 構建過程指令:安裝依賴、復制文件、端口暴露等
  4. 啟動指令:定義容器啟動時的默認命令,這是容器生命周期的起點

在這里插入圖片描述

1.2 案例-制作小鳥飛飛鏡像

1.2.1 編寫Dockerfile文件

[root@docker01 /server/dockerfile/01-bird]# ll
總用量 104
-rw-r--r-- 1 root root 91622  715 09:21 bird.tar.gz
-rw-r--r-- 1 root root   237  717 11:09 default.conf
-rw-r--r-- 1 root root   450  717 11:13 Dockerfile
[root@docker01 /server/dockerfile/01-bird]# cat Dockerfile
# 如果本地有該鏡像,會直接使用;若沒有,會下載該鏡像
FROM nginx:alpine 
LABEL author=skx desc="自定義小鳥飛飛鏡像"# 容器創建代碼目錄
RUN mkdir -p /app/code/bird# 上傳代碼文件到容器;ADD可以自動解壓tar.gz壓縮包
ADD bird.tar.gz /app/code/bird
# 上傳配置文件到容器
ADD default.conf /etc/nginx/conf.d/# 開啟端口
EXPOSE 80 443# 入口指令
CMD ["nginx","-g","daemon off;"]

1.2.2 構建鏡像

  • docker build -t 鏡像名稱 Dockerfile路徑
    • -t:tag,指定構建的鏡像名稱
    • 后面需要指定Dockerfile文件路徑
[root@docker01 /server/dockerfile/01-bird]# docker build -t web:bird .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.Install the buildx component to build images with BuildKit:https://docs.docker.com/go/buildx/Sending build context to Docker daemon  96.26kB
Step 1/7 : FROM nginx:alpine---> 77656422f700
Step 2/7 : LABEL author=skx desc="自定義小鳥飛飛鏡像"---> Running in f6a20089714f---> Removed intermediate container f6a20089714f---> bdb9f0ceead5
Step 3/7 : RUN mkdir -p /app/code/bird---> Running in 19c6f0992aca---> Removed intermediate container 19c6f0992aca---> 0cdbb83e054b
Step 4/7 : ADD bird.tar.gz /app/code/bird---> fb92ef13621a
Step 5/7 : ADD default.conf /etc/nginx/conf.d/---> b9bafb4882be
Step 6/7 : EXPOSE 80 443---> Running in aa49a8352257---> Removed intermediate container aa49a8352257---> c54940012cd8
Step 7/7 : CMD ["nginx","-g","daemon off;"]---> Running in 3fcfb8f96078---> Removed intermediate container 3fcfb8f96078---> 7c619a551ab3
Successfully built 7c619a551ab3
Successfully tagged web:bird
[root@docker01 /server/dockerfile/01-bird]# docker images |grep web
web          bird          7c619a551ab3   38 seconds ago   52.6MB

1.2.3 啟動容器

[root@docker01 /server/dockerfile/01-bird]# docker images |grep web
web          bird          7c619a551ab3   6 minutes ago   52.6MB
web_nginx    1.29          77656422f700   3 weeks ago     52.5MB
[root@docker01 /server/dockerfile/01-bird]# docker run -d --name web_bird -p 80:80 web:bird
0ab75085d0e81e694b9bc94633e75b583d2556b23f29300cf305a6130720f212
[root@docker01 /server/dockerfile/01-bird]# docker ps
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                                        NAMES
0ab75085d0e8   web:bird   "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   web_bird
  • 瀏覽器訪問:

在這里插入圖片描述

1.3 Dockerfile常用指令

指令說明
FROM指定基礎鏡像
LABEL指定容器的屬性信息
ENV創建容器的環境變量
RUN創建鏡像過程中執行的命令;
推薦多個命令結合成一個RUN命令
ADD把文件或目錄復制到容器;
會自解壓tar.gz壓縮包;
支持多階構建
COPY把文件或目錄復制到容器;
沒有自動解壓功能;
支持多階構建
WORKDIR指定容器的默認工作目錄
VOLUME掛載數據卷
EXPOSE指定鏡像對外暴露的端口
CMD指定容器的入口命令;
可在docker run時替換
ENTRYPOINT容器的入口命令;
無法被docker run時被替換;
docker run的命令僅被作為ENTRYPONIT命令的參數

1.4 面試題:Dockerfile中CMD和ENTRYPOINT的區別?

  • 相同點:都是容器啟動命令
  • 不同點:
    • CMD指定的命令,可以被docker run指定的命令替換
    • ENTRYPOINT的命令不會被替換,docker run指定的命令會作為ENTRYPOINT命令的參數
  • 同時使用時,CMD的命令作為ENTRYPOINT的參數

1.5 案例-制作zrlog鏡像

  • 基礎鏡像:tomcat+war包

1.5.1 編寫Dockerfile文件

# 查看tomcat鏡像
[root@docker01 /server/dockerfile/02-zrlog]# docker images |grep tomcat
tomcat                                    9.0-jdk8      56d6933de864   2 years ago     285MB
# Dockerfile文件
[root@docker01 /server/dockerfile/02-zrlog]# cat Dockerfile 
FROM tomcat:9.0-jdk8
LABEL author:skx app="zrlog,tomcat"# env
ENV WAR=ROOT.war
ENV WEBAPP=/usr/local/tomcat/webapps
# 復制zrlog
WORKDIR ${WEBAPP} 
ADD ${WAR} .
# 端口
EXPOSE 8080
CMD ["catalina.sh","run"]# 容器監控檢查指令
#通過指定命令對容器中的服務進行檢查
#用于檢查容器運行中(服務運行)但是用戶無法訪問
HEALTHCHECK --interval=5s --timeout=20s --retries=2 \
CMD curl 127.0.0.1:8080
[root@docker01 /server/dockerfile/02-zrlog]# ll
總用量 10984
-rw-r--r-- 1 root root      438  717 20:05 Dockerfile
-rw-r--r-- 1 root root 11243048  522  2023 ROOT.war # 將zrlog.war改成ROOT.war

1.5.2 生成鏡像并啟動容器

[root@docker01 /server/dockerfile/02-zrlog]# docker build -t web:zrlog .
……
Successfully built 968858ee0784
Successfully tagged web:zrlog
[root@docker01 /server/dockerfile/02-zrlog]# docker images |grep zrlog
web                                       zrlog         968858ee0784   54 seconds ago   296MB
[root@docker01 /server/dockerfile/02-zrlog]# docker run -d --name web_zrlog -p 8080:8080 web:zrlog
2a0aae02d1d3efd10712c32745aae057c6a9cdd2cfef4dd502aff692b5f60185
[root@docker01 /server/dockerfile/02-zrlog]# docker ps |grep zrlog
2a0aae02d1d3   web:zrlog         "catalina.sh run"         24 seconds ago   Up 23 seconds (healthy)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp    web_zrlog
  • 瀏覽器訪問:

在這里插入圖片描述

1.6 案例-制作后端考試系統鏡像

  • 基礎鏡像:jdk+jar包

1.6.1 編寫Dockerfile文件和啟動腳本

[root@docker01 /server/dockerfile/03-exam]# docker images |grep jdk
tomcat                                    9.0-jdk8      56d6933de864   2 years ago      285MB
java                                      8u111-jdk     d23bdf5b1b1b   8 years ago      643MB
[root@docker01 /server/dockerfile/03-exam]# cat Dockerfile 
FROM java:8u111-jdk
LABEL author=skx desc="exam 后端"
ENV VER 3.9.0
ENV ENVIR prod
ENV CONF application-${ENVIR}.yml
ENV CODE xzs-${VER}.jar
ENV DIR /app/code/exam/
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
ADD ${CONF} ${CODE} ./
ADD entry.sh /
EXPOSE 8000
# 腳本放在容器根目錄下;有執行權限
CMD ["/entry.sh"]
[root@docker01 /server/dockerfile/03-exam]# chmod +x entry.sh 
[root@docker01 /server/dockerfile/03-exam]# cat entry.sh 
#!/bin/bash
##############################################################
# File Name:entry.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=${ENVIR} ${CODE}

1.6.2 制作鏡像并啟動容器

[root@docker01 /server/dockerfile/03-exam]# docker build -t web:exam .
……
Successfully built 5570229b9466
Successfully tagged web:exam
[root@docker01 /server/dockerfile/03-exam]# docker images |grep exam
web                                       exam          5570229b9466   24 seconds ago   684MB
[root@docker01 /server/dockerfile/03-exam]# docker run -d --name web_exam -p 8000:8000 web:exam
b0249e77608a32c3225c3bbacc7a9d3c5f89ba226f8d3380c2e25d7f99bdb9c7
[root@docker01 /server/dockerfile/03-exam]# docker ps |grep exam
b0249e77608a   web:exam          "/entry.sh"               7 seconds ago    Up 6 seconds              0.0.0.0:8000->8000/tcp, :::8000->8000/tcp    web_exam
  • 瀏覽器訪問

在這里插入圖片描述

2. 思維導圖

https://kdocs.cn/join/gpuxq6r?f=101\r\n邀請你加入共享群「老男孩教育Linux運維99期-孫克旭」一起進行文檔協作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91750.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 應用優雅停機與資源清理:深入理解關閉鉤子

在開發和部署 Spring Boot 應用程序時,除了關注其啟動和運行,理解如何實現**優雅停機(Graceful Shutdown)**也同樣至關重要。優雅停機意味著在應用程序關閉時,能夠有序地釋放資源、完成正在進行的任務,并避…

淘寶扭蛋機小程序開發:重構電商娛樂化體驗的新范式

在電商行業同質化競爭加劇的當下,消費者對購物體驗的期待已從“功能滿足”轉向“情感共鳴”。淘寶扭蛋機小程序憑借“盲盒式隨機獎勵游戲化交互”的創新模式,成為撬動年輕用戶消費力的新支點。其開發邏輯不僅是對傳統電商的升級,更是對“娛樂…

YOLO演變史(一)

在YOLOV1發布后,作者并沒有滿足于此,而是持續對YOLO進行了改進。 YOLOV2:Better, Faster, Stronger YOLOv2(又稱YOLO9000)發表于2017年CVPR,是YOLO系列的第二代版本。其論文標題“Better, Faster, Stronger…

專題:2025智能體研究報告|附70份報告PDF、原數據表匯總下載

原文鏈接:https://tecdat.cn/?p43035 智能體正在改寫商業規則:某城商行的智能客服用公有云部署,把單筆交互成本從5.7元砍到1.2元,投訴率直降42%(《賽迪智庫:2025全球智能體進展報告》P24)&…

Axios 完整功能介紹和完整示例演示

Axios 是一個基于 Promise 的現代化 HTTP 客戶端庫,用于瀏覽器和 Node.js 環境。它提供了簡潔的 API 和強大的功能,是前端開發中最常用的網絡請求工具之一。核心功能 瀏覽器 & Node.js 雙平臺支持 瀏覽器中使用 XMLHttpRequestNode.js 中使用 http 模…

math.h函數

math.c函數作用 1. 基本三角函數(參數為弧度) sin(double x):計算正弦值。cos(double x):計算余弦值。tan(double x):計算正切值。asin(double x):反正弦(返回值范圍:[-π/2, π/2]&…

在Next.js里玩轉pdf預覽

1.背景在項目開發中,pdf預覽是一個很常見的業務。各大公司為了保護自己的知識產權,也會對pdf預覽進行限制,比如:不允許下載、打印,不允許提取文字等等。要想在實現預覽功能的基礎上還要附加這些限制,有很多…

算法競賽備賽——【圖論】求最短路徑——Floyd算法

floyd算法 基于動態規劃 應用:求多源最短路 時間復雜度:n^3 dijkstra:不能解決負邊權 floyd:能解決負邊權 不能解決負邊權回路問題 求最短路徑:dijkstra bfs floyd 思路 1.讓任意兩點之間的距離變短:引入…

雙指針(滑動窗口)相關算法題

雙指針算法有時候也叫尺取法或者滑動窗口,是?種優化暴力枚舉策略的手段:當我們發現在兩層 for 循環的暴力枚舉過程中,兩個指針是可以不回退的,此時我們就可以利用兩個指針不回退的性質來優化時間復雜度。因為雙指針算法中&#x…

ScratchCard刮刮卡交互元素的實現

效果展示 刮刮卡是?種常見的網頁交互元素,通過模擬物理世界的刮涂層來揭示下方的內容。這種效果主要依賴于HTML5的 元素來實現。以下是?個基于TypeScript的刮刮卡實現示例,包括配置項、初始化方法和核心的刮開邏輯。下面是展示的效果部分刮開效果&…

【Python LeetCode 專題】熱題 100,重在思路

哈希1. 兩數之和49. 字母異位詞分組128. 最長連續序列雙指針283. 移動零11. 盛最多水的容器15. 三數之和42. 接雨水滑動窗口3. 無重復字符的最長子串438. 找到字符串中所有字母異位詞子串560. 和為 K 的子數組239. 滑動窗口最大值普通數組53. 最大子數組和56. 合并區間189. 輪轉…

openEuler 22.03 LTS Rootless Docker 安裝指南

openEuler 22.03 LTS Rootless Docker 安裝指南 1.創建普通用戶(用于無根模式) sudo useradd -m docker-user sudo passwd docker-user # 設置密碼 sudo usermod --add-subuids 100000-165535 docker-user sudo usermod --add-subgids 100000-165535 do…

CMake指令:常見內置命令行工具( CMake -E )

目錄 1.簡介 2.核心作用 3.常用命令介紹 3.1.文件操作命令 3.2.系統命令執行 3.3.校驗與哈希 3.4.流程控制與等待 3.5.路徑與文件處理 3.6.歸檔與壓縮 3.7.網絡與下載 3.8.實用工具 4.使用示例 5.與 shell 命令的對比 6.在 CMake 腳本中使用 7.總結 相關鏈接 1…

YOLO融合CAF-YOLO中的ACFM模塊

YOLOv11v10v8使用教程: YOLOv11入門到入土使用教程 YOLOv11改進匯總貼:YOLOv11及自研模型更新匯總 《CAF-YOLO: A Robust Framework for Multi-Scale Lesion Detection in Biomedical Imagery》 一、 模塊介紹 論文鏈接:https://arxiv.org…

Webpack 項目構建優化詳解

1. 相關面試題 1.1. 做過哪些Webpack打包構建優化? 代碼分割:使用 Webpack 的 SplitChunksPlugin 進行代碼分割,將第三方庫、公共代碼與業務代碼分離,提高緩存利用率和加載速度。 Tree Shaking:通過配置 mode: production 或使用 TerserPlugin,移除未引用的代碼,減少…

【深度學習基礎】張量與Tensor的區別?從標量到深度學習的多維世界

目錄引言一、張量(Tensor)的定義與特性1. 數學中的張量2. 深度學習中的Tensor二、標量(Scalar)是什么?三、深度學習中的其他核心量1. 向量(Vector)2. 矩陣(Matrix)3. 高階…

設計模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一種行為設計模式,它通過定義一個算法的骨架,而將一些步驟延遲到子類中實現。Template Method 使得子類可以不改變(復用)一個算法結構 即可重定義(override 重寫)該算法的某些特定步驟。基本…

Linux驅動學習day24(UART子系統)

一、UART硬件理論1.1 作用及功能UART:通用異步收發傳輸器,簡稱串口。功能:移植u-boot、內核時,主要使用串口查看打印信息。外接各種模塊,比如藍牙GPS模塊。使用UART的時候,要注意1. 波特率 2. 格式&#xf…

NFS共享服務器

目錄 任務要求 思路總結 1.NFS共享服務 服務端 (ip 192.168.48.128) 客戶端 (ip 192.168.48.130) 2.配置autofs自動掛載 任務要求 1.NFS服務器,可以讓PC將網絡中的NFS服務器共享的目錄掛載到本地端的文件系統中,而在本地端的系統中看來,那個遠程主機的目…

FreeRTOS學習筆記之隊列

小編正在學習嵌入式軟件,目前建立了一個交流群,可以留下你的評論,我拉你進群一、簡介隊列是為了任務與任務、任務與中斷之間的通信而準備的,可以在任務與任務、任務與中斷之間消息傳遞,隊列中可以存儲有限的、大小固定…