solomon segun psicologia michael kotler gratis edicion consumidor comportamiento capitulo autores docker

docker - segun - comportamiento del consumidor solomon capitulo 2



Pierdo mis datos cuando sale el contenedor (9)

A pesar del tutorial interactivo de Docker y de las faq , pierdo mis datos cuando sale el contenedor.

He instalado Docker como se describe aquí: http://docs.docker.io/en/latest/installation/ubuntulinux sin ningún problema en ubuntu 13.04.

Pero pierde todos los datos cuando sale.

iman@test:~$ sudo docker version Client version: 0.6.4 Go version (client): go1.1.2 Git commit (client): 2f74b1c Server version: 0.6.4 Git commit (server): 2f74b1c Go version (server): go1.1.2 Last stable version: 0.6.4 iman@test:~$ sudo docker run ubuntu ping 2013/10/25 08:05:47 Unable to locate ping iman@test:~$ sudo docker run ubuntu apt-get install ping Reading package lists... Building dependency tree... The following NEW packages will be installed: iputils-ping 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 56.1 kB of archives. After this operation, 143 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 56.1 kB in 0s (195 kB/s) Selecting previously unselected package iputils-ping. (Reading database ... 7545 files and directories currently installed.) Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ... Setting up iputils-ping (3:20101006-1ubuntu1) ... iman@test:~$ sudo docker run ubuntu ping 2013/10/25 08:06:11 Unable to locate ping iman@test:~$ sudo docker run ubuntu touch /home/test iman@test:~$ sudo docker run ubuntu ls /home/test ls: cannot access /home/test: No such file or directory

También lo probé con sesiones interactivas con el mismo resultado. ¿Olvidé algo?

EDITAR: IMPORTANTE PARA LOS NUEVOS USUARIOS DE DOCKER

Como dijeron @ mohammed-noureldin y otros, en realidad esto NO es un contenedor que sale . Cada vez que crea un nuevo contenedor.


Además de la respuesta de Unferth , se recomienda crear un Dockerfile .

En un directorio vacío, cree un archivo llamado "Dockerfile" con el siguiente contenido.

FROM ubuntu RUN apt-get install ping ENTRYPOINT ["ping"]

Crea una imagen usando el Dockerfile . Usemos una etiqueta para no tener que recordar el número de imagen hexadecimal.

$ docker build -t iman/ping .

Y luego ejecute la imagen en un contenedor.

$ docker run iman/ping .com


Cuando utiliza la docker run para iniciar un contenedor, en realidad crea un contenedor nuevo basado en la imagen que ha especificado.

Además de las otras respuestas útiles aquí, tenga en cuenta que puede reiniciar un contenedor existente después de salir y sus cambios aún están allí.

docker start f357e2faab77 # restart it in the background docker attach f357e2faab77 # reattach the terminal & stdin


Debe commit los cambios que realice en el contenedor y luego ejecutarlo. Prueba esto:

sudo docker pull ubuntu sudo docker run ubuntu apt-get install -y ping

A continuación, obtenga la identificación del contenedor con este comando:

sudo docker ps -l

Confirmar cambios en el contenedor:

sudo docker commit <container_id> iman/ping

A continuación, ejecute el contenedor:

sudo docker run iman/ping ping www.google.com

Esto debería funcionar.



Existen las siguientes formas de conservar los datos del contenedor:

  1. Volúmenes de Docker

  2. Docker commit

    a) crea un contenedor desde la imagen de ubuntu y ejecuta un terminal bash.

    $ docker run -i -t ubuntu:14.04 /bin/bash

    b) Dentro de la terminal instalar rizo

    # apt-get update # apt-get install curl

    c) Salir de la terminal de contenedores.

    # exit

    d) Tome nota de su ID de contenedor ejecutando el siguiente comando:

    $ docker ps -a

    e) guardar contenedor como nueva imagen

    $ docker commit <container_id> new_image_name:tag_name(optional)

    f) verifica que puedas ver tu nueva imagen con el rizo instalado.

    $ docker images $ docker run -it new_image_name:tag_name bash # which curl /usr/bin/curl


Mi sugerencia es administrar la ventana acoplable, con la ventana acoplable compuesta. Es una forma fácil de administrar todos los contenedores de acopladores para su proyecto, puede asignar las versiones y vincular diferentes contenedores para que trabajen juntos.

Los documentos son muy simples de entender, mejor que los documentos de docker.

Docker-Compose Docs

Mejor


Tengo una respuesta mucho más sencilla a su pregunta, ejecute los siguientes dos comandos

sudo docker run ubuntu sudo docker ps -a

el comando ps -a anterior devuelve una lista de todos los contenedores. Tome el nombre del contenedor que hace referencia al nombre de la imagen - ''ubuntu''. La ventana acoplable genera automáticamente los nombres de los contenedores, por ejemplo, ''ubuntu-containername''

sudo docker start ubuntu-containername sudo docker exec -ti ubuntu-containername bash

Este comando anterior iniciará el contenedor detenido y el siguiente comando lo ayudará a iniciar sesión en el contenedor con bash shell. A partir de este punto, todos los cambios que realice en el contenedor se guardarán automáticamente en la ventana acoplable. Por ejemplo, apt-get install curl dentro del contenedor. Puede salir del contenedor sin problemas, la ventana acoplable guarda automáticamente los cambios.

En el siguiente uso, todo lo que tiene que hacer es ejecutar estos dos comandos cada vez que desee trabajar con este contenedor.

sudo docker start ubuntu-containername sudo docker exec -ti ubuntu-containername bash


el problema similar (y de ninguna manera Dockerfile solo podría solucionarlo) me llevó a esta página.

etapa 0: para todos, con la esperanza de que Dockerfile pueda solucionarlo: hasta que aparezca --dns y --dns-search en el soporte de Dockerfile - no hay forma de integrar recursos basados ​​en intranet.

etapa 1: después de crear la imagen con Dockerfile (por cierto, se trata de un problema grave. Dockerfile debe estar en la carpeta actual ), con una imagen para implementar en qué está basada la intranet, ejecutando el script de ejecución de la ventana acoplable. ejemplo: docker run -d / --dns=${DNSLOCAL} / --dns=${DNSGLOBAL} / --dns-search=intranet / -t pack/bsp / --name packbsp-cont / bash -c " / wget -r --no-parent http://intranet/intranet-content.tar.gz / tar -xvf intranet-content.tar.gz / sudo -u ${USERNAME} bash --norc"

etapa 2: aplicar el script de ejecución de la ventana acoplable en modo daemon que proporciona registros dns locales para tener la capacidad de descargar e implementar material local.

punto importante: el script de ejecución debe terminar con algo como /usr/bin/sudo -u ${USERNAME} bash --norc para mantener el contenedor en ejecución incluso después de que finalicen los scripts de instalación.

no , no es posible ejecutar el contenedor en modo interactivo para la automatización completa, ya que permanecerá dentro de la línea de comandos interna hasta que se presione CTRL-p CTRL-q .

no , si el bash de interacción no se ejecutará al final del script de instalación, el contenedor terminará inmediatamente después de que finalice la ejecución del script, perdiendo todos los resultados de la instalación.

etapa 3: el contenedor todavía se está ejecutando en segundo plano, pero no está claro si el contenedor ha finalizado el procedimiento de instalación o no. usando el siguiente bloque para determinar el final del procedimiento de ejecución: while ! docker container top ${CONTNAME} | grep "00[[:space:]]/{12/}bash /--norc" - do echo "." sleep 5 done while ! docker container top ${CONTNAME} | grep "00[[:space:]]/{12/}bash /--norc" - do echo "." sleep 5 done while ! docker container top ${CONTNAME} | grep "00[[:space:]]/{12/}bash /--norc" - do echo "." sleep 5 done el script continuará aún más después de la instalación completa. y este es el momento adecuado para llamar a: commit , que proporciona el ID del contenedor actual así como el nombre de la imagen de destino (puede ser el mismo que en el procedimiento de compilación / ejecución , pero se adjunta con la etiqueta de propósitos de instalación local. ejemplo: docker commit containerID pack/bsp:toolchained . vea este enlace sobre cómo obtener una ID de containerID adecuada

etapa 4: el contenedor se ha actualizado con las instalaciones locales y se ha asignado a la imagen recién asignada (la etiqueta que tiene propósitos añadidos). Ahora es seguro dejar de correr el contenedor. ejemplo: docker stop packbsp-cont

stage5: en cualquier momento que deba ejecutarse el contenedor con instalaciones locales, inícielo con la imagen previamente guardada. ejemplo: docker run -d -t pack/bsp:toolchained


una respuesta brillante aquí Cómo continuar una ventana acoplable que sale del usuario kgs

docker start $(docker ps -a -q --filter "status=exited") (or in this case just docker start $(docker ps -ql) ''cos you don''t want to start all of them) docker exec -it <container-id> /bin/bash

Esa segunda línea es crucial. Por lo tanto, exec se utiliza en lugar de ejecutar, y no en una imagen, sino en un containerid. Y lo haces después de que el contenedor ha sido iniciado.