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

Docker 鏡像結構詳解

 更新時間:2025年10月09日 16:48:24   作者:維爾切(wiltjer)  
Docker鏡像是由一系列層(layers)組成的,理解Docker鏡像的結構對于有效地構建、共享和管理Docker鏡像至關重要,本文給大家介紹Docker鏡像結構的相關知識,感興趣的朋友一起看看吧

Docker 鏡像結構

一、鏡像與容器之間的關系

  • 鏡像:是靜態(tài)的、只讀的文件系統(tǒng),包含運行容器所需的程序、庫、資源、配置等
  • 容器:是鏡像的運行實例,是動態(tài)的進程,擁有自己的文件系統(tǒng)、網(wǎng)絡、進程空間等資源
  • 關系
    • 鏡像是容器的基礎,容器依賴于鏡像。
    • 容器啟動時,會在鏡像之上添加一個可寫的“容器層”,所有修改都發(fā)生在這一層。
    • 鏡像通過 json 文件描述運行時的配置(如啟動命令、環(huán)境變量等),Docker 守護進程解析該文件并啟動容器

二、鏡像結構

1、基礎鏡像(base 鏡像)

  • 不依賴于其他鏡像,從 scratch 開始構建
  • 以此為基礎鏡像,進行擴展
  • 通常是各種 Linux 發(fā)行版(如 CentOS、Ubuntu)的鏡像
  • 不同發(fā)行版的區(qū)別在于 rootfs(用戶空間),而內核共享宿主機的 Kernel

2、鏡像分層

  • 鏡像由多個只讀層組成,每層代表一個修改(如安裝軟件、添加文件)
  • 層次結構示例
| touch /galaxy/cy | Image |
| mkdir /galaxy    | Image |
| CentOS:7         | Base Image |
| Docker Host      | Kernel |

3、容器層

  • 容器啟動時,在鏡像頂部添加一個可寫層
  • 用戶看到的是聯(lián)合文件系統(tǒng),上層文件覆蓋下層同名文件
  • 容器層的寫入操作使用寫時復制機制

三、Docker 鏡像構建

1、三種構建方式對比

方式說明優(yōu)點缺點
docker commit基于運行中的容器創(chuàng)建鏡像簡單快捷容易出錯,效率低且可重復性弱,不安全
基于本地模板導入從模板文件導入鏡像快速導入已有系統(tǒng)不靈活、不易定制
dockerfile通過腳本定義鏡像層次透明、可重復、易于維護推薦方式

2、docker commit

通過在運行的容器內安裝軟件、配置環(huán)境,再將容器的“當前狀態(tài)”打包為新鏡像,本質是“快照式構建”

centos:7中安裝vim-common

先基于centos7運行容器,容器名為cy,并使用-it生成終端進入容器

[root@docker ~]# docker run --name dc -it centos:7 /bin/bash

在容器中安裝vim-common

[root@8f3a60b20edb /]# yum -y install vim-common

退出容器后,使用docker commit將v1容器打包為鏡像

[root@docker ~]# docker commit dc centosdc:7
[root@docker ~]# docker images | grep centosdc

3、基于本地模板導入

直接從操作系統(tǒng)模板文件(如OpenVZ模板)導入鏡像,模板文件通常為壓縮包(如tar.gz),包含完整的rootfs和基礎配置

導入ubuntu:12.04模板

下載模板

從OpenVZ官方地址(http://openvz.org/Download/templates/precreated)下載ubuntu-12.04-x86-minimal.tar.gz

導入為鏡像

[root@docker ~]# cat ubuntu-12.04-x86-minimal.tar.gz | docker import - ubuntu:12.04

驗證鏡像

[root@docker ~]# docker images

4、Dockerfile構建

Dockerfile是一個文本文件,包含一系列“指令(Instruction)”,每一條指令對應鏡像的一層——指令描述了該層的構建操作(如安裝軟件、復制文件、配置環(huán)境)。通過docker build命令執(zhí)行Dockerfile,可自動化、可重復地構建鏡像,解決了docker commit的“不透明、不可追溯”問題

編寫 Dockerfile

[root@docker ~]# vim Dockerfile

Dockerfile 內容

# 第一行必須指定,基礎鏡像信息
FROM centos:7
# 維護者信息
MAINTAINER docker@example.com
# 鏡像操作指令
RUN yum install -y httpd
EXPOSE 80
# 容器啟動執(zhí)行指令
CMD ["/usr/sbin/httpd"]

執(zhí)行構建命令

[root@docker ~]# docker build -t httpd:wil /root/

構建過程:

  1. 下載centos7鏡像
  2. 添加鏡像構建者信息
  3. 基于centos7鏡像啟動容器,安裝httpd軟件,安裝完畢后將容器打包為鏡像
  4. 基于上一步生成的鏡像啟動容器,將80端口打開,打開后將容器打包為鏡像
  5. 基于上一步生成的鏡像啟動容器,添加容器啟動后需要執(zhí)行的指令,再打包為鏡像

查看構建歷史

[root@docker ~]# docker history httpd:wil

使用DockerFile文件構建完鏡像以后,Docker會把構建過程中的每一層臨時鏡像進行緩存。在構建新鏡像時,可以直接使用之前緩存的鏡像層,這樣能加速鏡像的構建

四、Dockerfile 語法詳解

指令說明示例
FROM指定基礎鏡像FROM centos:7
MAINTAINER維護者信息(已逐漸被 LABEL 替代)MAINTAINER cy@example.com
LABEL元數(shù)據(jù)鍵值對LABEL version="1.0"
RUN構建過程中執(zhí)行命令RUN yum install -y httpd
COPY復制宿主機文件到鏡像COPY app.py /app/
ADD類似 COPY,支持 URL 和自動解壓ADD app.tar.gz /app/
WORKDIR設置工作目錄WORKDIR /app
VOLUME創(chuàng)建掛載點VOLUME /data
EXPOSE聲明容器端口EXPOSE 80
ENV設置環(huán)境變量ENV APP_HOME /app
CMD容器啟動命令(可被覆蓋)CMD ["/bin/bash"]
ENTRYPOINT容器啟動命令(不可被覆蓋)ENTRYPOINT ["/app/start.sh"]
USER指定運行用戶USER nobody

五、總結

要點說明
鏡像與容器鏡像是靜態(tài)的模板,容器是運行實例
分層結構鏡像由多個只讀層組成,容器層可寫
基礎鏡像從 scratch 構建,提供 rootfs
構建方式推薦使用 Dockerfile,透明、可重復
Dockerfile 指令每條指令對應一層,支持緩存
緩存機制加速構建,可通過 --no-cache 禁用

到此這篇關于Docker 鏡像結構的文章就介紹到這了,更多相關Docker 鏡像結構內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Docker打包一個Python腳本的實現(xiàn)方法

    Docker打包一個Python腳本的實現(xiàn)方法

    本文主要介紹了Docker打包一個Python腳本的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • docker的卷映射手動指定位置的操作方法

    docker的卷映射手動指定位置的操作方法

    Docker中手動指定卷映射位置通過綁定掛載實現(xiàn),使用-v或--mount參數(shù),語法清晰,支持更多選項,注意宿主機目錄存在性、權限和SELinux限制,本文介紹docker的卷映射手動指定位置的操作方法,感興趣的朋友一起看看吧
    2025-02-02
  • docker集群Error response from daemon: rpc error問題

    docker集群Error response from daemon: rpc&

    文章描述了在Docker集群中遇到的錯誤信息,并提供了解決辦法,解決辦法包括配置安全組,將Docker Swarm的所有節(jié)點IP添加到安全組中
    2025-01-01
  • docker安裝的mysql修改配置文件方式

    docker安裝的mysql修改配置文件方式

    本文描述了在修改MySQL容器配置文件后遇到的異常問題,并給出了解決方法,原來是因為iptables規(guī)則沖突導致,重啟docker后問題解決
    2026-04-04
  • Docker安裝kafka并創(chuàng)建topic進行消息通信過程

    Docker安裝kafka并創(chuàng)建topic進行消息通信過程

    本文介紹了如何使用Docker容器化技術來安裝和配置Apache?Kafka,并詳細介紹了如何創(chuàng)建topic進行消息通信,通過Docker和Docker?Compose兩種方式,可以方便地搭建Kafka集群,并進行消息的發(fā)布和訂閱
    2025-12-12
  • docker-compose network名稱定義解讀

    docker-compose network名稱定義解讀

    文章詳細介紹了Docker Compose網(wǎng)絡名稱的生成規(guī)則,包括沒有自定義網(wǎng)絡名、定義后綴和定義前綴的情況,通過設置環(huán)境變量`COMPOSE_PROJECT_NAME`,可以更友好的命名網(wǎng)絡
    2026-03-03
  • docker?save與docker?export的區(qū)別

    docker?save與docker?export的區(qū)別

    docker?save和docker?export都能導出鏡像包,本文主要介紹了docker?save與docker?export的區(qū)別,試圖搞清楚docker?save和docker?export的功能是什么?適用于什么應用場景?感興趣的可以了解一下
    2022-03-03
  • Docker中編碼和時區(qū)設置不生效問題排查小結

    Docker中編碼和時區(qū)設置不生效問題排查小結

    本文主要介紹了在Docker容器中排查編碼和時區(qū)設置不生效的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • Docker執(zhí)行(進入)鏡像實踐

    Docker執(zhí)行(進入)鏡像實踐

    本文介紹了如何使用Docker命令查看、安裝、刪除鏡像,以及如何運行鏡像并設置自動重啟,還詳細介紹了如何進入Docker容器并進行一些常見操作,如設置MySQL事務超時時間,最后,文章鼓勵大家參考并支持腳本之家
    2025-12-12
  • Docker案例分析:搭建Redis服務

    Docker案例分析:搭建Redis服務

    這篇文章主要介紹了Docker案例分析:搭建Redis服務方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

永顺县| 浏阳市| 句容市| 阿荣旗| 南平市| 文昌市| 英德市| 太和县| 丽水市| 海兴县| 兴海县| 桐梓县| 合山市| 唐海县| 绥江县| 九台市| 潞城市| 柞水县| 汉源县| 新巴尔虎右旗| 大英县| 荣昌县| 南木林县| 瑞金市| 平南县| 孝感市| 宣威市| 江西省| 西吉县| 巴南区| 满洲里市| 灵川县| 集贤县| 邻水| 玛纳斯县| 始兴县| 闻喜县| 河北区| 鸡西市| 廊坊市| 南和县|