Docker Comandos
Docker Comandos
Problemática.
Docker fue creado en 2013 por Solomon Hykes y su equipo como una respuesta a los
problemas de incompatibilidad y complejidad que surgen:
Mover aplicaciones entre diferentes entornos, como por ejemplo entre entornos de
desarrollo, pruebas y producción.
Método de trabajo.
Este nuevo método de trabajo permite a los desarrolladores trabajar en diferentes máquinas
y sistemas operativos, siempre y cuando usen un contenedor de Ubuntu y Python 3. De
esta manera, se garantiza que la aplicación y todas sus dependencias estén disponibles en
el contenedor y funcionen correctamente, independientemente del sistema operativo
subyacente. Además, la utilización de contenedores también simplifica el proceso de
instalación de las dependencias y configuración del entorno de desarrollo, lo que agiliza el
proceso de desarrollo y aumenta la productividad.
Docker Run.
Cada vez que ejecutas el comando docker run, se crea un nuevo contenedor a partir de la
imagen especificada en el comando. Un contenedor de Docker es una instancia en tiempo
de ejecución de una imagen Docker.
Cuando decimos que cada contenedor "tiene su propio espacio de usuario y recursos de
sistema asignados", nos referimos a que el contenedor tiene un espacio de usuario y
recursos de sistema asignados de forma exclusiva para su funcionamiento, lo que incluye la
asignación de CPU, memoria, espacio de almacenamiento y otros recursos del sistema. En
otras palabras, el sistema operativo subyacente es el que proporciona los recursos del
sistema a cada contenedor, pero cada contenedor tiene su propio conjunto de recursos
asignados que son exclusivos para su uso.
Estos recursos son gestionados por el sistema operativo del host y están disponibles para
los procesos que se ejecutan dentro del contenedor, lo que permite que los contenedores se
ejecuten como procesos independientes en el host. Por lo tanto, los recursos asignados a
un contenedor no son compartidos con otros contenedores o procesos del host, lo que
permite una mayor eficiencia y aislamiento en la ejecución de diferentes aplicaciones o
servicios en un entorno de contenedores.
Hello-world Docker.
Cada contenedor es una instancia única e independiente que puede ser iniciada, detenida y
eliminada por separado. Entonces, cada vez que ejecutas el comando docker run, se crea
un nuevo contenedor a partir de la imagen especificada. Sino especifica la versión se
descarga la última versión de la imagen.
Cuando se ejecuta este comando, Docker si no está presente la imagen en el host local,
buscará la imagen "nombre_imagen" en el registro (registry) predeterminado de Docker y la
descarga, También podemos descargar la imagen manualmente desde dockerhub en el
margen derecho se puede ver el comando docker pull nombre_imagen que se debe
ingresar en la terminal del host local. Esto descargara la imagen en la carpeta
/var/lib/docker. en linux y en windows en la carpeta C:\ProgramData\Docker.
Opcional (Descargar la imagen en el host local).
docker pull nombre_imagen
El comando sudo docker run hello-world es uno de los comandos más básicos que se
pueden ejecutar en Docker. Este comando se utiliza para descargar y ejecutar la imagen
"hello-world" de Docker. Cuando se ejecuta este comando, Docker buscará la imagen
"hello-world" en el registro (registry) predeterminado de Docker y la descarga, si no está
presente en la máquina. Luego, Docker creará un nuevo contenedor a partir de esta imagen
y lo ejecutará. El contenedor imprimirá un mensaje simple en la consola y luego se detendrá
automáticamente.
Cada contenedor tiene su propio ID único, que se puede ver ejecutando el comando:
docker ps para listar todos los contenedores. Además si agregamos el comando -a se
listarán contenedores activos e inactivos.
docker ps -a
Podemos ver que nos sugiere el comando para correr un contenedor ubuntu (Sistemas
operativo distribución de linux) en una máquina windows. Esto es posible gracias a docker.
Entonces al ejecutar este comando, Docker descargará la imagen "ubuntu" desde Docker
Hub si aún no la tienes en tu sistema local. A continuación, creará un contenedor a partir de
la imagen y te conectará a su shell interactivo utilizando Bash.
Ahora como lo expongo, le pasamos al comando una bandera para exponerlo -p 80:80.
Una vez que el contenedor se ejecuta correctamente, puedes acceder a la página de
bienvenida de Nginx en un navegador web visitando la dirección IP del contenedor en el
puerto 80 (por ejemplo, http://<dirección IP del contenedor>:80).
sudo docker run -p 80:80 nginx:1.17-alpine
La diferencia entre los comandos "sudo docker run nginx:1.17-alpine" y "sudo docker run -p
80:80 nginx:1.17-alpine" es que el segundo comando utiliza la opción "-p" para especificar la
asignación de puertos entre el host y el contenedor de Docker. Específicamente, el
comando "sudo docker run -p 80:80 nginx:1.17-alpine" mapea el puerto 80 del contenedor
de Docker al puerto 80 del host. Esto significa que cualquier tráfico que llegue al puerto 80
del host se redirigirá automáticamente al puerto 80 del contenedor de Docker, permitiendo
que los usuarios accedan al servicio web que se ejecuta en el contenedor.
Podemos ver que está corriendo, el demon docker, además de correr imágenes puede
hacer el manejo de redes. Vamos a ver si nginx está corriendo. Esto podemos verlo con el
comando sudo docker ps.
sudo docker ps
También podemos manejar las redes, revisamos la ip con el comando ipconfig de host local
en la terminal de windows.
Terminal de Windows:
ipconfig
Sudo es para linux para un superusuario/root, podemos usar un comando para que el
usuario actual (User) pueda usarlo sin sudo. Para que se apliquen los cambios hay que
cerrar sesión y volver a entrar.
sudo usernod -aG docker $User,
La salida de este comando incluye información relevante sobre cada contenedor, como:
● ID,
● nombre,
● estado,
● puerto(s) expuesto(s),
● imagen,
El comando "docker ps" también acepta una serie de opciones que permiten personalizar la
salida del comando:
● "docker ps -a" que lista todos los contenedores (independientemente de su estado)
● "docker ps -q" que lista solo los IDs de los contenedores.
docker ps
El comando "docker run -d --name mi-nginx nginx" se utiliza para crear un nuevo contenedor
Docker a partir de la imagen "nginx" y ejecutarlo en segundo plano en el host de Docker.
Aquí hay una descripción detallada de los parámetros utilizados en este comando:
docker run -d --name mi-nginx nginx
● "docker run": es el comando utilizado para crear y ejecutar un nuevo contenedor
Docker.
● "-d": es una opción que indica que el contenedor debe ejecutarse en segundo plano
(modo "daemon").
● "--name mi-nginx": Es una opción que establece el nombre del contenedor como
"mi-nginx".
● "nginx": es el nombre de la imagen base que se utilizará para crear el contenedor.
El comando "docker top mi-nginx" se utiliza para ver los procesos en ejecución dentro del
contenedor Docker llamado "mi-nginx". Aquí hay una descripción detallada de los
parámetros utilizados en este comando:
● "docker top": es el comando utilizado para ver los procesos en ejecución dentro de
un contenedor Docker.
● "mi-nginx": es el nombre del contenedor del que se desean ver los procesos.
Los archivos que se muestran en la salida de "ls" probablemente serán los archivos de
configuración y los archivos de contenido web necesarios para que el servidor web Nginx se
ejecute correctamente.
El comando "docker exec -it mi-nginx bash" se utiliza para abrir una sesión de terminal
interactiva dentro del contenedor Docker llamado "mi-nginx".
Aquí hay una descripción detallada de los parámetros utilizados en este comando:
● "docker exec": es el comando utilizado para ejecutar un comando dentro de un
contenedor Docker en ejecución.
● "-it": son dos opciones combinadas que indican que se desea una sesión interactiva
en la terminal del contenedor.
● "mi-nginx": es el nombre del contenedor en el que se desea ejecutar el comando.
● "bash": es el comando que se desea ejecutar dentro del contenedor para abrir una
sesión de terminal.
Al ejecutar este comando, se abrirá una sesión de terminal dentro del contenedor "mi-nginx"
que permitirá al usuario interactuar con el sistema operativo del contenedor de la misma
manera que si estuviera en una terminal local de su propia máquina.
Una vez dentro del contenedor, se puede utilizar cualquier comando de terminal válido. Esto
es útil para depurar problemas o errores que pueden estar ocurriendo dentro del
contenedor, ya que permite al usuario interactuar con el sistema operativo y realizar
cualquier operación que pueda ser necesaria.
docker exec -it mi-nginx bash
Frenar contenedor
docker stop mi-nginx
Eliminar contenedor
docker --rm mi-nginx
Exponer el puerto del contenedor para el uso, las peticiones redireccionan del puerto 8000
al 80. El comando docker run -d --rm -p 8000:80 --name mi-nginx nginx mapea el puerto 80
del contenedor de Nginx al puerto 8000 de la máquina local. Entonces, cuando ejecutes ese
comando y accedas a http://localhost:8000 en tu navegador web, estás accediendo a la
instancia de Nginx que se está ejecutando dentro del contenedor en el puerto 80, pero a
través del puerto 8000 en la máquina host.
En otras palabras, el puerto 8000 es el puerto de la máquina local que se asocia con el
puerto 80 del contenedor de Nginx. Por lo tanto, si accedes a http://localhost:8000, estarás
viendo la respuesta del servidor Nginx que se está ejecutando en el contenedor.
docker run -d --rm -p 8000:80 --name mi-nginx nginx
Imágenes.
Listado de images que hay en la computadora local.
docker image ls
Reviso la red bridge y la parte que me importa es la parte de contenedores y miro sus ip
docker network inspect bridge
revisamos contenedores
docker ps
Hacemos un ping desde la red en que se encuentra nginx al contenedor que se encuentra
en la red mi-red nginx3
ping 172.19.0.2
00:12:00
No puedo porque está en otro espacio de dominio de red. Dos contenedores en dos redes
distintas no se pueden comunicar directamente por el rango de ip entonces se agrega a la
otra red un contenedor quedando un contenedor con una ip nueva para esa red, quedando
con dos ip ese contenedor, ahora con el mismo rango y se pueden comunicar