El modo interactivo
Clase 8 de 25 • Fundamentos de Docker 2018
Contenido del curso
Clase 8 de 25 • Fundamentos de Docker 2018
Contenido del curso
Iván Toro
Jorge Dueñas
Julian Andres Cañaveral Valencia
César Espitia
Juan Ignacio Echenique Olsina
César Espitia
Jehison Pérez
José Emanuel Castelán Cortés
Juan Carlos Pinzón
Cristian Silverio Nuñez Mata
Julio Hernandez Gorocica
Fernando Dominguez
Boris Vargas Paucara
Jose de Jesus Herrera Ledon
Gonzalo Amador Hernández
Carlos Andrés Charris S
Guido Vilariño
Gonzalo Amador Hernández
Ramiro Nicolas DAccorso Rosati
Wilson Fernando Antury Torres
Wilder Alexander David Hoyos
Jose Maldonado
Jorge M.
Juan David Cajamarca Acuña
Carlos Gómez Mont
Cristian Camilo Perez Cardona
Usuario anónimo
Guido Vilariño
Eduardo Flores
Emmanuel Sosa Reyes
Gustavo Fabian Sandoval
Omar Juarez
Cesar Cavazos
Jose Miguel Diaz
El significado de las flags -it:
Gracias, muy buen aporte!
Que buen aporte, siempre es importante conocer el porque de los comandos
Un dato adicional es que cuando creas el contenedor con el comando: docker run -it ubuntu entras al contenedor, configuras y juegas con lo que necesites y luego te sales con exit. Pero luego quieres volver a entrar a ese conenedor. Ya no podrás hacerlo porque ese conentedor se ha quedado sin un entrypoint expresamente definido, lo que significa que al intentar volver a iniciar el contenedor docker start ubuntu este se inicia pero no se mantiene encendido porque no hay entrypoint. Para crear un contenedor al que puedas entrar y salir todo lo que quieras se debe definir expresamente un entrypoint como /bin/bash usando por ejemplo el siguiente comando: docker run -it --entrypoint /bin/bash --name ubuntu ubuntu:latest
Me sale este eror cuando escribo el comando que decis. A alguien mas le pasa?
C:/Program Files/Docker/Docker/resources/bin/docker.exe: Error response from daemon: C onflict. The container name "/ubuntu" is already in use by container "576f8c9fc2837205 3682c1070bc3988f8d085e049ce211c4b70e309abbf69936". You have to remove (or rename) that container to be able to reuse that name. See 'C:/Program Files/Docker/Docker/resources/bin/docker.exe run --help'.```
Hola juaniE96, Lo que pasa es que ya existe un contenedor con el nombre ubuntu. Lo que puedes hacer es eliminar el contenedor existente para que al ejecutar el comando se pueda crear un contenedor nuevo con el nombre ubuntu. O si lo prefieres puedes iniciar el contenedor existente para poder usarlo. En cualquier caso lo primero que deberias ejecutar es el comando docker ps -a con el cual podras ver que contenedores existen en tu docker, así como cuales estan corriendo y cuales no. Ya después puedes ejecutar los comandos docker stop ubuntu para detener el contenedor y docker rm ubuntu para eliminar el contenedor llamado ubuntu. O si prefieres puedes ejecutar docker start ubuntu para iniciar el contenedor existente. Espero sea de ayuda. Saludos!
El modo interactivo:
Ejemplo para crear un ubuntu:
docker run ubuntu
docker run -it ubuntu —> Com esto le decimos que corra el comando pero que lo haga de forma interactiva con mi terminal. Así el estado del contenedor no será apagado sino prendido.
ls - lac —> Puedo ver los archivos, para comprobar que estoy en un linux.
uname -a —> para saber los detalles.
cat /etc/lsb-release —> La data de que linux estamos corriendo.
exit —> matando sesión del contenedor y de esta forma el estado cambio a Exited.
Después de cerrar ya no consume recursos.
A mi se me ocurrió en mi PC Ubuntu correr un centos
docker run -it centos
Obtengo esto
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f507058fe594 centos "/bin/bash" 57 seconds ago Up 53 seconds zealous_almeida ➜ ~
Y esto sale en mi contenedor
[root@f507058fe594 etc]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" [root@f507058fe594 etc]#
Awesome :o
Usé ese comando de CentOs y me funcionó, también quedé asombrado 🤯
Wow! Esto está realmente increíble. Por qué no había conocido a Docker antes!!! Ni cuantos dolores de cabeza me hubiera evitado.
Comparto tu pensar
Me adhiero
Si no les corre en Windows 10, pueden probar el siguiente comando:
winpty docker run -it ubuntu
En el caso de intentar correr el comando desde una consola bash de git se debe agregar el comando winpty al inicio winpty docker run -it ubuntu
No es un error común pero me pareció interesante https://github.com/git-for-windows/git/wiki/FAQ#some-native-console-programs-dont-work-when-run-from-git-bash-how-to-fix-it
Gran aporte Muchas GRACIAS!!!
Entrar modo interactivo o bash
docker run -it <id del contenedor / nombre del contenedor>
Salir modo interactivo
exit
En rigor, no es id/nombre del “contenedor”, sino el nombre de la imágen (que se verá en clases futuras qué son en detalle)
exacto, el comandor un es para correr un contenedor basado en una imagen, el contenedor aun no existe
A quien mas le voló la cabeza?
docker start [container_id]
docker ps
si no solamente quiere probar algo dentro de docker ubuntu, ejmplo instalar un apache (algo basico) luego que salgo de la seccion, matiene la instalacion, o mejor dicho todo lo que haga en un contenedor se mantiene luego de cerrar el proceso, como me conecto nuevamentea este contenedor. ?
tengo la misma pregunta
Todo lo que hagas en un contenedor se queda allí. Para volver a correr un contenedor solamente debes ejecutar el comando
docker start <container_id>
Docker es amor
> docker run ubuntu => se descarga la imagen de ubuntu. => solo corrio /bin/bash > docker run -it ubuntu => Me deja la terminar del contenedor abierta en mi bash. => Ahora quedamos en ubuntu. Linux commands >> uname -a => Dice las especificaciones del sistema. >> cat /etc/lsb-release => Muestra la data del linux que esta corriendo. >> exit => cierra el proceso de linux, no exita mas el proceso.
docker run -it nombre_contenedor = corre el contenedor de manera interactiva
en lugar del nombre puedes poner el ID y funciona
En rigor, no es id/nombre del “contenedor”, sino el nombre de la imágen (que se verá en clases futuras qué son en detalle)
Aquí el command line reference de docker por si quieren ver que miles de opciones hay Docker
Ahora si entendí Docker
Alpine es la luuz!
Para el modo interactivo también se puede elegir el tipo de terminal con el que se puede correr el contenedor con el comando
docker run -it --name **nombreContenedor** ubuntu **terminal**
en donde terminal puede ser /bin/bash/, /bin/sh/, etc.
De igual forma para salir del modo interactivo sin detener el contenedor se puede usar la combinación de teclas Ctrl + p + q.
Para los que usan Docker en Windows y desean saber la ruta de los Volúmenes que crean con docker volume create y/o los montan al correr el container.
Cuando crean un volumen, realmente lo esta creando la Maquina Virtual de Linux que corre detrás. Por lo tanto cuando crean un volumen "dbmysql" y lo inspeccionan, la ruta /var/lib/docker/volumes/dbmysql/_data es donde se estará almacenando la información del volumen.
C:\Users\cesar>docker volume create dbmysql dbmysql C:\Users\cesar>docker volume inspect dbmysql [ { "CreatedAt": "2019-02-15T05:06:43Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/dbmysql/_data", "Name": "dbmysql", "Options": {}, "Scope": "local" } ]
¿Cómo puedo ver su contenido? Podemos montar un contenedor con cualquier versión de linux (en este caso corro "alpine") y "++monto++" la raíz de "Mi Virtual Machine" a "Alpine" en una carpeta que la voy a llamar "vm-root" en raíz de mi Alpine llamado "linux-puente"
C:\Users\cesar>docker run --name linux-puente -d -it -v /:/vm-root alpine tail -f /dev/null 7c3c3b23565016bf96266b872aa436310ee309fda4a432a9639a39bfd55117cf
Ya que ahora esta corriendo nuestro linux-puente podemos ingresar por sh y hacemos la consulta de la carpeta
C:\Users\cesar>docker exec -i -t linux-puente /bin/sh / # cd /vm-root/var/lib/docker/volumes/dbmysql/_data /vm-root/var/lib/docker/volumes/dbmysql/_data # ls -l total 0
Si deseas corroborar que realmente esté mapeado el volumen, abre otro CMD y crea un contenedor de MySQL mapeando el mismo volumen
C:\Users\cesar>docker run --name mysql-test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d --mount src=dbmysql,dst=/var/lib/mysql mysql d0c37005964fa6d991b538e644bae2e0f7b87d3d233705dc93cf73e5ab4b30e0
Regresa a la ventana anterior del CMD y vuelve a listar el directorio
/vm-root/var/lib/docker/volumes/dbmysql/_data # ls -l total 179220 drwxr-x--- 2 999 ping 4096 Feb 15 05:14 #innodb_temp -rw-r----- 1 999 ping 56 Feb 15 05:14 auto.cnf -rw-r----- 1 999 ping 3090087 Feb 15 05:14 binlog.000001 -rw-r----- 1 999 ping 155 Feb 15 05:14 binlog.000002 -rw-r----- 1 999 ping 32 Feb 15 05:14 binlog.index -rw------- 1 999 ping 1676 Feb 15 05:14 ca-key.pem -rw-r--r-- 1 999 ping 1112 Feb 15 05:14 ca.pem -rw-r--r-- 1 999 ping 1112 Feb 15 05:14 client-cert.pem -rw------- 1 999 ping 1680 Feb 15 05:14 client-key.pem -rw-r----- 1 999 ping 5947 Feb 15 05:14 ib_buffer_pool -rw-r----- 1 999 ping 50331648 Feb 15 05:14 ib_logfile0 -rw-r----- 1 999 ping 50331648 Feb 15 05:14 ib_logfile1 -rw-r----- 1 999 ping 12582912 Feb 15 05:14 ibdata1 -rw-r----- 1 999 ping 12582912 Feb 15 05:14 ibtmp1 drwxr-x--- 2 999 ping 4096 Feb 15 05:14 mysql -rw-r----- 1 999 ping 31457280 Feb 15 05:14 mysql.ibd drwxr-x--- 2 999 ping 4096 Feb 15 05:14 performance_schema -rw------- 1 999 ping 1676 Feb 15 05:14 private_key.pem -rw-r--r-- 1 999 ping 452 Feb 15 05:14 public_key.pem -rw-r--r-- 1 999 ping 1112 Feb 15 05:14 server-cert.pem -rw------- 1 999 ping 1676 Feb 15 05:14 server-key.pem drwxr-x--- 2 999 ping 4096 Feb 15 05:14 sys -rw-r----- 1 999 ping 12582912 Feb 15 05:14 undo_001 -rw-r----- 1 999 ping 10485760 Feb 15 05:14 undo_002
Saludos
Muy buen aporte, gracias.