zshuangyan / blog

我的个人博客
2 stars 0 forks source link

查看本地构建的镜像版本的迭代历程 #11

Open zshuangyan opened 6 years ago

zshuangyan commented 6 years ago

有时候构建镜像可能是一个逐步优化逐步迭代的过程,我们会以之前构建的镜像为基础镜像,然后再在上面添加一些操作或者文件。但是恰好我们又忘记对镜像文件的代码进行版本管理,而最新版本的镜像文件Dockerfile里边只能看到依赖的老镜像和寥寥的几个命令,那么怎样还原出这个镜像完整的操作命令呢? 我们可以通过逆向迭代查找到镜像的母镜像链,然后查看这个链上的每个镜像对它的母镜像做了哪些修改,下面这个shell脚本可以满足我们的需求: trace_cmd.sh

function dc_trace_cmd() {
  local parent=`docker inspect -f '{{ .Parent }}' $1` 2>/dev/null
  declare -i level=$2
  echo ${level}: `docker inspect -f '{{ .ContainerConfig.Cmd }}' $1 2>/dev/null`
  level=level+1
  if [ "${parent}" != "" ]; then
    echo ${level}: $parent 
    dc_trace_cmd $parent $level
  fi
}

dc_trace_cmd $1

然后我们执行下面的命令就可以看到迭代的过程了

./trace_cmd.sh <image_name:version>

例如,查看我的memory-predict:0.9镜像的迭代过程

[zhangshuangyan@gs-server-3238 ~]$ ./trace_cmd.sh memory-predict:0.9
0: [/bin/sh -c #(nop) CMD ["root/run.sh"]]
1: sha256:3e511d07e45703d74561e233f23ff537f9683503f793d23384d86b1be3de5a1d
1: [/bin/sh -c #(nop) COPY dir:8368956cf32bdd81375211d1084c9ab35cd22b8ffec16bcf2d796bf4ee1cf42c in /root/memory ]
2: sha256:e49bd77647a401c038536b116fa9c99758d4aa52bff646c30933bfafcf4b0959
2: [/bin/sh -c mkdir -p /var/log/gslogs/gdp/memory/info && mkdir -p /var/log/gslogs/gdp/memory/error && mkdir -p /var/log/gslogs/gdp/model_build/info && mkdir -p /var/log/gdp/model_build/error]
3: sha256:bb930d11c8a453e635fc7258978ea3a18c33e81440c94335a204870aa3279d45
3: [/bin/sh -c #(nop) COPY file:61325ce5f794a14777b1400229417bd9cb17145565aa9eb7568a0e47fe5d8717 in /root/ ]
4: sha256:96fec49b6a2b242c339ef4ca69d67a8f37d12ab8a7143e357016284affb545fb
4: [/bin/sh -c #(nop) COPY file:9a6cf89dc229b62ca8bc553e4223036a5e949ce9f9d16ab1ad736bb42e658c78 in /etc/nxlog/nxlog.conf ]
5: sha256:5c8d30b626de68fd7db97e9eb7e542d23beba22629ab8817c542dc598954e8e0
5: [/bin/sh -c #(nop) COPY file:f8bebfc3a3cf94e7bc28416d7ee090c011719ea9edcbefa92652b5f274e36b75 in /root/ ]
6: sha256:74df8cb53015ec169552df5ea73d75613783decc8f385123eb335f13332901c7
6: [/bin/sh -c #(nop) COPY file:6da6f2b6420f347ce600823cb433afdd2b3371f69720ac100ee48dbd295a4688 in /root/ ]
7: sha256:eeca83861660f1b99b3ec4aea1ddc0bcd84b55dcd414c542e065177b03e5f5f5
7: [/bin/sh -c #(nop) COPY file:a6c5b2e34dd38325770c5a635aa5c3d021d3800d7275a755756c6fa94e0aa20d in /etc/ ]
8: sha256:329fdc1e9022fe805066b4c10c470a5bc9ebfb993fe1e147dcdddcc682b1a675
8: [/bin/sh -c #(nop) COPY file:18522c0551499a5aee8e786566e3cbf7154fabe99125cae7c394df54ddb3126b in /etc/localtime ]
9: sha256:edc362dedb539ff494732deea92b552dfb954a93ad0611f3eab74e53d60e7b04
9: [/bin/sh -c #(nop) ENV LC_ALL=C.UTF-8]
10: sha256:ee5629e8cc755f2015bdce23f9e8329167e7cd02b28d82efc6006e7ef7a82953
10: [/bin/sh -c pip3 --no-cache-dir --timeout 3600 --trusted-host repository.gridsum.com install -i https://repository.gridsum.com/repository/pypi-public/simple `cat /root/depend_pip3`]
11: sha256:96d658a53ed76636bb5d07b9bc9cbaab3cad20406c7f4ba17abac1a83ad7fde7
11: [/bin/sh -c pip3 --no-cache-dir --timeout 3600 --trusted-host repository.gridsum.com install --upgrade -i https://repository.gridsum.com/repository/pypi-public/simple Cython]
12: sha256:c81a9d5651e2eb1c7bfe93a72052e620005df0485fa88624d9a43ee64b7c5539
12: [/bin/sh -c #(nop) COPY file:3748ebb6c0b55f42ee0c3f4b38c97ac17df94f56a5ccc140fbccd583f1f53bb5 in /root/ ]
13: sha256:8878cb6ff2a175ae4d9200e9eca203be78b43e2b141177b2def9724c086ed2aa
13: [/bin/sh -c cd /root/ && wget -q https://nxlog.co/system/files/products/files/348/nxlog-ce_2.9.1716_ubuntu_1604_amd64.deb --no-check-certificate && dpkg -i nxlog-ce_2.9.1716_ubuntu_1604_amd64.deb && rm nxlog-ce_2.9.1716_ubuntu_1604_amd64.deb]
14: sha256:4ec81a6df9cc8305c1643d60398f1e78243253e39b9bb73b2ccc3c9ded224ba3
14: [/bin/sh -c apt-get -y update && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends `cat /root/depend_ubuntu16.04` && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends libapr1 libdbi1 libexpat1 libperl5.22 && apt-get clean && rm -rf /var/lib/apt/lists/*]
15: sha256:dd68b1ee537a0d638eab8342c68f37fa3a10311884aa0bcfec27bc5ecb0e4bec
15: [/bin/sh -c #(nop) COPY file:2835abe77876ddc832140365f9d45e2f6066f80c1c8bb7918e565a0e82a94dd2 in /root/ ]
16: sha256:41c7a9325f68df244ca6d68d76ebf59525d98b5fb2e19cc65effd38839be4d1e
16: [/bin/sh -c echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list]
17: sha256:e1100cf1f531504d60a615eb68838bc2170433ef145757ccf4588817a0192013
17: [/bin/sh -c #(nop) MAINTAINER zhangshuangyan]
18: sha256:ccc7a11d65b1b5874b65adb4b2387034582d08d65ac1817ebc5fb9be1baa5f88
18: [/bin/sh -c #(nop) CMD ["/bin/bash"]]

参考:https://forums.docker.com/t/how-can-i-view-the-dockerfile-in-an-image/5687/3