Saki's 研究记录

逆向生成 Dockerfile

字数统计: 517阅读时长: 2 min
2023/04/12

背景

最近有个需求,使用到了一个第三方的docker镜像,但实际使用中发现并不适用,需要进行定制化处理重新生成一个自己的镜像。
以下是两种逆向docker镜像的可用方法。

由 docker history 逆向生成 Dockerfile

执行命令逆向生成dockerfile,命令格式如下:

docker history [OPTIONS] IMAGE

OPTIONS说明:

  • -H :以可读的格式打印镜像大小和日期,默认为true;
  • –no-trunc :显示完整的提交记录;
  • -q :仅列出提交记录ID

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker history --format {{.CreatedBy}} --no-trunc=true jutze/kubectl:v1.0.1 |
sed "s,/bin/\(ba\)\?sh[ ]-c[ ]\#(nop)[ ][ ]*,,g" |
sed "s,/bin/\(ba\)\?sh[ ]-c,RUN,g" |
sed 's, *&& *, \\\n \&\& ,g' |
tac

/bin/sh -c #(nop) ADD file:2a949686d9886ac7c10582a6c29116fd29d3077d02755e87e111870d63607725 in /
/bin/sh -c #(nop) CMD ["/bin/sh"]
/bin/sh -c apk add --no-cache curl bash
/bin/sh -c #(nop) ENV VERIFY_CHECKSUM=false
&& helm repo add bitnami https://charts.bitnami.com/bitnami
&& helm repo add stable https://charts.helm.sh/stable \
&& rm get_helm.sh \
&& ./get_helm.sh \
&& chmod 700 get_helm.sh \
/bin/sh -c curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 \
&& mv ./kubectl /usr/local/bin/kubectl
&& chmod +x ./kubectl \
/bin/sh -c curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \

使用 image2df 逆向生成 Dockerfile

URL: https://github.com/cucker0/dockerimage2df
拉取镜像:

1
docker pull cucker/image2df

执行命令逆向生成Dockerfile, 命令格式如下:

docker run –rm -v /var/run/docker.sock:/var/run/docker.sock cucker/image2df IMAGE

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/image2df jutze/kubectl:v1.0.1
# ========== Dockerfile ==========
FROM jutze/kubectl:v1.0.1
ADD file:2a949686d9886ac7c10582a6c29116fd29d3077d02755e87e111870d63607725 in /
CMD ["/bin/sh"]
RUN apk add --no-cache curl bash
ENV VERIFY_CHECKSUM=false
RUN curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 &&\
chmod 700 get_helm.sh &&\
./get_helm.sh && rm get_helm.sh &&\
helm repo add stable https://charts.helm.sh/stable &&\
helm repo add bitnami https://charts.bitnami.com/bitnami
RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" &&\
chmod +x ./kubectl &&\
mv ./kubectl /usr/local/bin/kubectl

参考

以上。

CATALOG
  1. 1. 背景
  2. 2. 由 docker history 逆向生成 Dockerfile
  3. 3. 使用 image2df 逆向生成 Dockerfile
  4. 4. 参考