una subir partir imagen hub guardar example crear contenedor como image repository docker

subir - ¿Cómo generar un Dockerfile a partir de una imagen?



imagen docker ubuntu (4)

Actualizar:

Cita del comentario de @ aleung:

centurylink/dockerfile-from-image no funciona con la nueva versión docker. Este funciona para mí: hub.docker.com/r/chenzj/dfimage

¿Cómo generar un Dockerfile a partir de una imagen?

Usted puede.

Primera forma

$ docker pull centurylink/dockerfile-from-image $ alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm centurylink/dockerfile-from-image" $ dfimage --help Usage: dockerfile-from-image.rb [options] <image_id> -f, --full-tree Generate Dockerfile for all parent layers -h, --help Show this message

Aquí está el ejemplo para generar Dockerfile a partir de una imagen existente selenium/node-firefox-debug

core@core-01 ~ $ docker pull centurylink/dockerfile-from-image core@core-01 ~ $ alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm centurylink/dockerfile-from-image" core@core-01 ~ $ dfimage selenium/node-firefox-debug ADD file:b43bf069650bac07b66289f35bfdaf474b6b45cac843230a69391a3ee342a273 in / RUN echo ''#!/bin/sh'' > /usr/sbin/policy-rc.d && echo ''exit 101'' >> /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d && dpkg-divert --local --rename --add /sbin/initctl && cp -a /usr/sbin/policy-rc.d /sbin/initctl && sed -i ''s/^exit.*/exit 0/'' /sbin/initctl && echo ''force-unsafe-io'' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup && echo ''DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };'' > /etc/apt/apt.conf.d/docker-clean && echo ''APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };'' >> /etc/apt/apt.conf.d/docker-clean && echo ''Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";'' >> /etc/apt/apt.conf.d/docker-clean && echo ''Acquire::Languages "none";'' > /etc/apt/apt.conf.d/docker-no-languages && echo ''Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";'' > /etc/apt/apt.conf.d/docker-gzip-indexes RUN sed -i ''s/^#/s*/(deb.*universe/)$//1/g'' /etc/apt/sources.list CMD ["/bin/bash"] MAINTAINER Selenium <[email protected]> RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe/n" > /etc/apt/sources.list && echo "deb http://archive.ubuntu.com/ubuntu trusty-updates main universe/n" >> /etc/apt/sources.list RUN apt-get update -qqy && apt-get -qqy --no-install-recommends install ca-certificates openjdk-7-jre-headless unzip wget && rm -rf /var/lib/apt/lists/* && sed -i ''s///dev//urandom///dev//.//urandom/'' ./usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/java.security RUN mkdir -p /opt/selenium && wget --no-verbose http://selenium-release.storage.googleapis.com/2.46/selenium-server-standalone-2.46.0.jar -O /opt/selenium/selenium-server-standalone.jar RUN sudo useradd seluser --shell /bin/bash --create-home && sudo usermod -a -G sudo seluser && echo ''ALL ALL = (ALL) NOPASSWD: ALL'' >> /etc/sudoers && echo ''seluser:secret'' | chpasswd MAINTAINER Selenium <[email protected]> ENV DEBIAN_FRONTEND=noninteractive ENV DEBCONF_NONINTERACTIVE_SEEN=true ENV TZ=US/Pacific RUN echo "US/Pacific" | sudo tee /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata RUN apt-get update -qqy && apt-get -qqy install xvfb && rm -rf /var/lib/apt/lists/* COPY file:335d2f6f9bfe311d2b38034ceab3b2ae2a1e07b9b203b330cac9857d6e17c148 in /opt/bin/entry_point.sh RUN chmod +x /opt/bin/entry_point.sh ENV SCREEN_WIDTH=1360 ENV SCREEN_HEIGHT=1020 ENV SCREEN_DEPTH=24 ENV DISPLAY=:99.0 USER [seluser] CMD ["/opt/bin/entry_point.sh"] MAINTAINER Selenium <[email protected]> USER [root] RUN apt-get update -qqy && apt-get -qqy --no-install-recommends install firefox && rm -rf /var/lib/apt/lists/* COPY file:52a2a815e3bb6b85c5adfbceaabb5665b63f63ef0fb0e3f774624ee399415f84 in /opt/selenium/config.json USER [seluser] MAINTAINER Selenium <[email protected]> USER [root] RUN apt-get update -qqy && apt-get -qqy install x11vnc && rm -rf /var/lib/apt/lists/* && mkdir -p ~/.vnc && x11vnc -storepasswd secret ~/.vnc/passwd ENV LANGUAGE=en_US.UTF-8 ENV LANG=en_US.UTF-8 RUN locale-gen en_US.UTF-8 && dpkg-reconfigure --frontend noninteractive locales && apt-get update -qqy && apt-get -qqy --no-install-recommends install language-pack-en && rm -rf /var/lib/apt/lists/* RUN apt-get update -qqy && apt-get -qqy --no-install-recommends install fonts-ipafont-gothic xfonts-100dpi xfonts-75dpi xfonts-cyrillic xfonts-scalable && rm -rf /var/lib/apt/lists/* RUN apt-get update -qqy && apt-get -qqy install fluxbox && rm -rf /var/lib/apt/lists/* COPY file:90e3a7f757c3df44d541b59234ad4ca996f799455eb8d426218619b244ebba68 in /opt/bin/entry_point.sh RUN chmod +x /opt/bin/entry_point.sh EXPOSE 5900/tcp

Otra forma, que no necesita extraer la imagen a local y sin necesidad de ejecutar ningún comando.

Utilice la imagen de arriba como muestra, puede obtener los comandos de Dockerfile a través de la siguiente URL:

https://imagelayers.io/?images=selenium%2Fnode-firefox-debug:latest

Espere un momento, habrá dos ventanas, la ventana de arriba enumera las capas, la ventana de abajo enumera el comando en Dockerfile

El formato de URL es:

https://imagelayers.io/?images=<USER>%2F<IMAGE>:<TAG>

En face, imagelayers.io es construido por Centurylink

¿Es posible generar un Dockerfile a partir de una imagen? Quiero saber por dos razones:

  1. Puedo descargar imágenes del repositorio pero me gustaría ver la receta que las generó.

  2. Me gusta la idea de guardar instantáneas, pero una vez que haya terminado, sería bueno tener un formato estructurado para revisar lo que se hizo.


De alguna manera, me perdí completamente el comando real en la respuesta aceptada, así que aquí está de nuevo, un poco más visible en su propio párrafo, para ver cuántas personas son como yo

$ docker history --no-trunc <IMAGE_ID>


No es posible en este punto (a menos que el autor de la imagen incluya explícitamente el archivo Docker).

Sin embargo, definitivamente es algo útil. Hay dos cosas que ayudarán a obtener esta característica.

  1. Creaciones de confianza (detalladas en esta discusión de docker-dev
  2. Metadatos más detallados en las imágenes sucesivas producidas por el proceso de compilación. A largo plazo, los metadatos deberían indicar qué comando de compilación produjo la imagen, lo que significa que será posible reconstruir Dockerfile a partir de una secuencia de imágenes.

Para entender cómo se construyó una imagen de portón, use el comando docker history --no-trunc .

Puede construir un archivo acoplable desde una imagen, pero no contendrá todo lo que desee para comprender completamente cómo se generó la imagen. Razonablemente, lo que puede extraer son las partes MANTENEDOR, ENV, EXPONER, VOLUMEN, PÁGINA DE TRABAJO, PUNTO DE PARTIDA, CMD y ENTRADA del archivo docker.

La siguiente secuencia de comandos debería funcionar para usted:

#!/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"

Utilizo esto como parte de un script para reconstruir contenedores en ejecución como imágenes: https://github.com/docbill/docker-scripts/blob/master/docker-rebase

El archivo Docker es principalmente útil si desea poder volver a empaquetar una imagen.

Lo que hay que tener en cuenta es que una imagen de portador puede ser la copia de seguridad de una máquina real o virtual. He hecho varias imágenes de docker de esta manera. Incluso el historial de compilación muestra que la importación de un archivo tar enorme es el primer paso para crear la imagen ...