Docker 从容器镜像反生成Dockerfile文件

wmsok
  • 93

Docker是否可以实现从容器镜像反生成Dockerfile文件?如何操作?

回复
阅读 10.1k
4 个回答

可以使用 https://hub.docker.com/r/dduvnjak/dockerfile-from-image/

请注意,该脚本仅适用于本地映像存储库中存在的映像(键入docker image 时看到的内容)。如果要为本地仓库中不存在的image生成Dockerfile,首先需要docker pull。

例如,可以运行下面这句,以查看代码

$ docker run --rm -v /run/docker.sock:/run/docker.sock centurylink/dockerfile-from-image ruby
FROM buildpack-deps:latest
RUN useradd -g users user
RUN apt-get update && apt-get install -y bison procps
RUN apt-get update && apt-get install -y ruby
ADD dir:03090a5fdc5feb8b4f1d6a69214c37b5f6d653f5185cddb6bf7fd71e6ded561c in /usr/src/ruby
WORKDIR /usr/src/ruby
RUN chown -R user:users .
USER user
RUN autoconf && ./configure --disable-install-doc
RUN make -j"$(nproc)"
RUN make check
USER root
RUN apt-get purge -y ruby
RUN make install
RUN echo 'gem: --no-rdoc --no-ri' >> /.gemrc
RUN gem install bundler
ONBUILD ADD . /usr/src/app
ONBUILD WORKDIR /usr/src/app
ONBUILD RUN [ ! -e Gemfile ] || bundle install --system

生成的代码与原始的 Dockerfile 肯定是不一样的, 尤其涉及到文件和目录映射时,只能得到一些哈希过的目录/文件, 移植性完全失去了. 所以还要一些手工的编辑工作才能用.

Docker history 里面能看到一些东西,不过基本没办法还原成dockerfile.

所以还是泛起这个念头,然后去尝试找它的构建方式吧.

你想干什么?
我觉得你需要的是把当前容器打包成镜像,而不是用另一个镜像再构建一次.

放弃这个念头

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏