环境: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"]
有时我们拿到一个 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"]
没有评论:
发表评论