2017年3月14日星期二

Docker_018:查看镜像的 Dockerfile 的脚本程序

环境:Docker 1.13.1

有时我们拿到一个 Docker Image,想知道这个镜像是如何构造出来的,在没有提供 Dockerfile 的前提下,如何知道 Dockerfile 大概是怎样的?

以下这个脚本可以帮我们查看镜像的 Dockerfile 大概内容:

#!/bin/bash

docker history --no-trunc "$1" | \
sed -n -e 's,.*/bin/sh -c #(nop) \(MAINTAINER .*[^ ]\) *0 B,\1,p' | \
head -1
docker inspect --format='{{range $e := .Config.Env}}
ENV {{$e}}
{{end}}{{range $e,$v := .Config.ExposedPorts}}
EXPOSE {{$e}}
{{end}}{{range $e,$v := .Config.Volumes}}
VOLUME {{$e}}
{{end}}{{with .Config.User}}USER {{.}}{{end}}
{{with .Config.WorkingDir}}WORKDIR {{.}}{{end}}
{{with .Config.Entrypoint}}ENTRYPOINT {{json .}}{{end}}
{{with .Config.Cmd}}CMD {{json .}}{{end}}
{{with .Config.OnBuild}}ONBUILD {{json .}}{{end}}' "$1"

存储该脚本为 dockerImage2file.sh,然后执行

./dockerImage2file.sh jboss/base-jdk:8
输出如下:
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ENV JAVA_HOME=/usr/lib/jvm/java
USER jboss
WORKDIR /opt/jboss

CMD ["/bin/bash"]

没有评论: