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

Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像)

 更新時間:2021年03月03日 10:35:51   投稿:mrr  
這篇文章主要介紹了Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在devops流程里面 構(gòu)建鏡像是一個非常重要的過程,一般構(gòu)建鏡像是寫dockerfile文件然后通過docker client來構(gòu)建的image。

docker client 會先檢查本地有沒有image,如果沒有幫你 從鏡像倉庫 pull 下來

然后解析你寫的dockerfile構(gòu)建新的image。

本文帶你了解

  • pull 命令 背后是怎么做的?
  •  build 命令 背后是怎么做的?

下篇文章帶你解析:

如果我不用docker 我如何構(gòu)建一個鏡像?

我們以微軟的aspnet2.2為基礎(chǔ)構(gòu)建一個aspnetcore項目的鏡像為例子

mcr.microsoft.com/dotnet/core/aspnet:2.2

根據(jù)基礎(chǔ)鏡像REGISTRY去獲取mainfest信息

https://mcr.microsoft.com/v2/dotnet/core/aspnet/manifests/2.2
Accept:
application/vnd.oci.image.manifest.v1+json,application/vnd.docker.distribution.manifest.v2+json,application/vnd.docker.distribution.manifest.v1+json

獲取到的內(nèi)容如下:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 4039,
    "digest": "sha256:e7e3b238011ce0f2b9350153535fe273caa01f0e7188d0b91f965b3802ddc600"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 22524609,
      "digest": "sha256:804555ee037604c40de144f9f8da0d826d38db82f15d74cded32790fe279a8f6"
    },
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 17692725,
      "digest": "sha256:970251047358aea56ba6db6975b14ff12470b75de0c2477f4445240ddd727fd4"
    },
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 2978257,
      "digest": "sha256:f3d4c41a4fd13f35c0b46f19a4e27845f4695163cc7174d908ff84836bbc2f5a"
    },
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 62145592,
      "digest": "sha256:bd391c46585f9f8d84992bbaa9087189148c1601968eaaf097d5b3ed60840e5e"
    }
  ]
}

mainfest文件里面都是摘要(digest)記錄

  • config信息摘要
  • 每個layer的摘要 (上面的例子有4個)

根據(jù)上面的config信息摘要獲取config詳情

GET:https://mcr.microsoft.com/v2/dotnet/core/aspnet/blobs/sha256:e7e3b238011ce0f2b9350153535fe273caa01f0e7188d0b91f965b3802ddc600
{
  "architecture": "amd64",
  "config": {
    "Hostname": "",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
      "ASPNETCORE_URLS=http://+:80",
      "DOTNET_RUNNING_IN_CONTAINER=true",
      "ASPNETCORE_VERSION=2.2.8"
    ],
    "Cmd": [
      "bash"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:5ecfe4016ac8e911a94aa601a675f7204e9ccab00cbb08e7067c184ad40f34e9",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": null
  },
  "container": "14196c2f9c327d41e26682d32c7c89c4e7c78aa32f8b7501a23192035a9f4844",
  "container_config": {
    "Hostname": "",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
      "ASPNETCORE_URLS=http://+:80",
      "DOTNET_RUNNING_IN_CONTAINER=true",
      "ASPNETCORE_VERSION=2.2.8"
    ],
    "Cmd": [
      "/bin/sh",
      "-c",
      "curl -SL --output aspnetcore.tar.gz https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/$ASPNETCORE_VERSION/aspnetcore-runtime-$ASPNETCORE_VERSION-linux-x64.tar.gz   && aspnetcore_sha512='954072376698be69acb7e277df2c243f931e10529def21dcbf9ce277609b30d462126bf8b8b3cab36476bec3d63a927b8e44e59e4d4cade23eef45956fba1ffd'   && echo \"$aspnetcore_sha512 aspnetcore.tar.gz\" | sha512sum -c -   && mkdir -p /usr/share/dotnet   && tar -zxf aspnetcore.tar.gz -C /usr/share/dotnet   && rm aspnetcore.tar.gz   && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet"
    ],
    "Image": "sha256:5ecfe4016ac8e911a94aa601a675f7204e9ccab00cbb08e7067c184ad40f34e9",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": null
  },
  "created": "2019-12-28T08:12:05.676492579Z",
  "docker_version": "3.0.8",
  "history": [
    {
      "created": "2019-12-28T04:23:47.4966447Z",
      "created_by": "/bin/sh -c #(nop) ADD file:90a2c81769a336bed3f731f44a385f2a65b0916f517a0b77c06c224579bf9a9a in / "
    },
    {
      "created": "2019-12-28T04:23:47.719507596Z",
      "created_by": "/bin/sh -c #(nop) CMD [\"bash\"]",
      "empty_layer": true
    },
    {
      "created": "2019-12-28T08:11:05.607009582Z",
      "created_by": "/bin/sh -c apt-get update   && apt-get install -y --no-install-recommends     ca-certificates         libc6     libgcc1     libgssapi-krb5-2     libicu57     liblttng-ust0     libssl1.0.2     libstdc++6     zlib1g   && rm -rf /var/lib/apt/lists/*"
    },
    {
      "created": "2019-12-28T08:11:07.64336022Z",
      "created_by": "/bin/sh -c #(nop) ENV ASPNETCORE_URLS=http://+:80 DOTNET_RUNNING_IN_CONTAINER=true",
      "empty_layer": true
    },
    {
      "created": "2019-12-28T08:11:16.475068844Z",
      "created_by": "/bin/sh -c apt-get update   && apt-get install -y --no-install-recommends     curl   && rm -rf /var/lib/apt/lists/*"
    },
    {
      "created": "2019-12-28T08:11:43.814078508Z",
      "created_by": "/bin/sh -c #(nop) ENV ASPNETCORE_VERSION=2.2.8",
      "empty_layer": true
    },
    {
      "created": "2019-12-28T08:12:05.676492579Z",
      "created_by": "/bin/sh -c curl -SL --output aspnetcore.tar.gz https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/$ASPNETCORE_VERSION/aspnetcore-runtime-$ASPNETCORE_VERSION-linux-x64.tar.gz   && aspnetcore_sha512='954072376698be69acb7e277df2c243f931e10529def21dcbf9ce277609b30d462126bf8b8b3cab36476bec3d63a927b8e44e59e4d4cade23eef45956fba1ffd'   && echo \"$aspnetcore_sha512 aspnetcore.tar.gz\" | sha512sum -c -   && mkdir -p /usr/share/dotnet   && tar -zxf aspnetcore.tar.gz -C /usr/share/dotnet   && rm aspnetcore.tar.gz   && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet"
    }
  ],
  "os": "linux",
  "rootfs": {
    "type": "layers",
    "diff_ids": [
      "sha256:814c70fdae62bc26c603bfae861f00fb1c77fc0b1ee8d565717846f4df24ae5d",
      "sha256:0cf75cb98eb2e0a82631d4aff71b40ba79ff7f83e0361f696875e592a1a4cefc",
      "sha256:15e45d99c92686fb1fd61a41431d8400d7a0e8381595d09d666b0809c4f5d993",
      "sha256:579a8f1d6a123f98095c0b1a1395079f7504391fd2a8bc529dede305a2072a36"
    ]
  }
}

根據(jù)diff_ids里面去下載對應(yīng)layers

下載完后對比摘要一致,確保鏡像文件合法性

路徑規(guī)則:

https://mcr.microsoft.com/v2/dotnet/core/aspnet/blobs/sha256:XXXXXX

構(gòu)建我們的鏡像

在基礎(chǔ)鏡像的配置基礎(chǔ)上加入我們的自定義配置

  • Entrypoint
  • Cmd
  • Ports
  • Environment
  • ImageWorkingDirectory
  • Volumes
  • Labels

在基礎(chǔ)鏡像的所有的layers把我們要打包到鏡像也做成一個layer

生成的鏡像tar包解壓出來

多了一個 tar.gz文件,解壓之后 就是我們打包放進(jìn)去的文件

  • 原來基礎(chǔ)鏡像有4個layer 加上我們的 共5個
  • config.json
  • manifest.json

config.json對比與基礎(chǔ)鏡像

 

我們來復(fù)習(xí)下構(gòu)建鏡像的過程 根據(jù)鏡像名稱拉取mainfest

  • 根據(jù)mainfest拉取config
  • 根據(jù)config拉取layers
  • 下載各個layer
  • 修改到基礎(chǔ)鏡像的配置(config.json和mainfest.json)
  • 加入我們要加入的文件layer

知道原理后我們可以自己寫一個工具來實現(xiàn)整個過程

我開源的docker鏡像構(gòu)建,讓你不用裝docker也能快速構(gòu)建容器鏡像

支持以下鏡像倉庫作為基礎(chǔ)鏡像構(gòu)建

  • docker hub
  • aliyun
  • 騰訊云

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

相關(guān)文章

  • Docker compose配置文件寫法及命令使用示例

    Docker compose配置文件寫法及命令使用示例

    這篇文章主要介紹了Docker compose配置文件寫法及命令總結(jié)使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03
  • 如何完全清理你的Docker數(shù)據(jù)

    如何完全清理你的Docker數(shù)據(jù)

    Docker 不會對你的系統(tǒng)進(jìn)行任何配置更改……但是它會占用大量的磁盤空間,那么如何完全清理你的數(shù)據(jù),本文就詳細(xì)的來介紹一下,感興趣的可以了解一下
    2021-07-07
  • docker配置修改阿里云鏡像倉庫的實現(xiàn)

    docker配置修改阿里云鏡像倉庫的實現(xiàn)

    這篇文章主要介紹了docker配置修改阿里云鏡像倉庫的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Docker安裝Elasticsearch?8.x的實現(xiàn)示例

    Docker安裝Elasticsearch?8.x的實現(xiàn)示例

    本文主要介紹了Docker安裝Elasticsearch8.x,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • linux中無make命令的問題(make: *** 沒有指明目標(biāo)并且找不到 makefile及make命令安裝方法)

    linux中無make命令的問題(make: *** 沒有指明目標(biāo)并且找不到 makefile及make命令安裝方法)

    這篇文章主要介紹了linux中無make命令的問題(make: *** 沒有指明目標(biāo)并且找不到 makefile及make命令安裝方法),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • nexus搭建私有docker倉庫的方法

    nexus搭建私有docker倉庫的方法

    Nexus之前已支持了maven/npm/composer,由于docker倉庫和前面幾個存在比較大的差異,所以我特此記錄下走過的坑,本文重點介紹nexus搭建私有docker倉庫的相關(guān)知識,感興趣的朋友一起看看吧
    2024-03-03
  • 兩小時入門Docker教程實踐

    兩小時入門Docker教程實踐

    這篇文章主要介紹了兩小時入門Docker教程實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 理解Docker(1):Docker安裝和基礎(chǔ)用法詳細(xì)介紹

    理解Docker(1):Docker安裝和基礎(chǔ)用法詳細(xì)介紹

    本篇文章主要是介紹了Docker 安裝和基礎(chǔ)用法,對于想要需要的Docker的同學(xué)可以了解一下。
    2016-11-11
  • 在Docker容器中部署Django的時區(qū)問題

    在Docker容器中部署Django的時區(qū)問題

    本文主要介紹了在Docker容器中部署Django的時區(qū)問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Docker底層技術(shù)Namespace Cgroup應(yīng)用詳解

    Docker底層技術(shù)Namespace Cgroup應(yīng)用詳解

    在本篇文章里小編給大家整理的是關(guān)于Docker底層技術(shù)Namespace Cgroup應(yīng)用的相關(guān)知識點,需要的朋友們學(xué)習(xí)下。
    2019-10-10

最新評論

廊坊市| 盐亭县| 阜新市| 日照市| 梨树县| 鄢陵县| 赫章县| 正安县| 贵德县| 灵丘县| 辉南县| 涿鹿县| 大悟县| 天祝| 祁阳县| 龙江县| 错那县| 呼和浩特市| 鄂温| 军事| 武邑县| 东乡县| 达尔| 安达市| 永春县| 循化| 松潘县| 吉隆县| 萍乡市| 赤峰市| 桂平市| 乌拉特后旗| 建平县| 浮梁县| 华坪县| 乌兰县| 桐梓县| 临江市| 鹤岗市| 石棉县| 隆尧县|