Quiero compartir por aquí lo que he aprendido sobre la creación de contenedores de docker, no es la información completa pero si los apuntes básicos para poder empezar a crear y ejecutar contenedores. En futuros post explicaré como acceder interactivamente a estos contenedores para ejecutar código sobre ellos y como poder ver mas datos y gestionar los contenedores.
¿Qué es un contenedor?
En docker un contenedor son las instancias en las que corren las imágenes
¿Qué es una imagen?
La imagen es la aplicación que queremos ejecutar, como puedan ser desde un servicio en particular hasta un sistema operativo. Las imágenes se bajan desde repositorios y están versionadas.
Se pueden lanzar varios contenedores con la misma imagen.
Ejemplo
Imaginad que queremos ejecutar un servidor nginx. Por un lado necesitaríamos una imagen de nginx, y para poder ejecutar la imagen debemos añadirla a un contenedor y ejecutar el contenedor.
Las imágenes pueden tener un comando por defecto, eso es, cuando cargamos una imagen en un contenedor se ejecutará directamente ese comando, en el ejemplo de ngnix sería el propio comando que corre el servidor de nginx.
Este comando por defecto podemos sobrescribirlo y ejecutar otro distinto a la hora de lanzar el contenedor. También podemos lanzar varios comandos dentro del contenedor.
Creando un contenedor de Nginx
Esto sería la ejecución del ejemplo anterior, lanzar un contenedor que dentro corra una imagen de nginx, para eso ejecutaremos la siguiente orden:
docker container run -p 80:80 nginx
Esto lo que hace es bajarnos la última versión de la imagen de nginx del repositorio de docker, solo en el caso de que no la hayamos descargado anteriormente con la creación de otro contenedor, en ese caso ya la tendríamos en nuestro local. Por otro lado conecta el puerto 80 de nuestro equipo con el puerto 80 del contenedor.
Desglosando un poco el comando quedaría de la siguiente forma:
docker container run
Es la orden que se ejecuta para lanzar un contenedor
-p 80:80
Es el equivalente a
--publish 80:80
. Lo que hace es conectar nuestro puerto local, el primer número, con el puerto del contenedor, el segundo número. Por ejemplo si fuese 8080:80 le estaríamos diciendo que haga una redirección del puerto 80 del contenedor, el puerto por defecto de nginx, con el puerto 8080 de nuestro local, que será a donde tengamos que apuntar en nuestro navegador.
-d
Equivalente a
--detach
. Con esto le decimos al contenedor que se ejecute en segundo plano, si no lo añadimos nos sacará todo el output del comando que esté ejecutando el contenedor por consola.
--name
Sirve para ponerle un nombre al contenedor así resultará mas sencillo poder acceder a él con el resto de comandos.
--rm
Esta opción le dice que cuando se pare el contenedor automáticamente se elimine del disco.
Ejemplo completo:
docker container run --publish 8000:80 -d --name proxy -d nginx:1.11
Esto correría en segundo plano un contenedor al que llamaría proxy, que dentro ejecutaría una imagen 1.11 de nginx y nos enlazaría el puerto 80 del nginx con nuestro puerto 8000 del anfitrión.
Listar contenedores
Para listar los contenedores que tenemos en ejecución lo haremos con el comando
docker container ls
. Esto nos mostrará todos los contenedores que tenemos en ejecución, pero no todos los contenedores.
Cuando paramos la ejecución de un contenedor, este se para pero no se elimina. Para poder ver el listado completo de contenedores tendremos que ejecutar el comando con el parámetro -a.
docker container ls -a
con esto ya podremos ver todos los contenedores, ejecutándose y parados.