Tras instalar docker y comprobar que funciona es el momento de trabajar con contenedores más completos y complejos desde el punto de vista funcional. Haremos funcionar contenedores con distitntos sistemas operativos y con distintos servicios. Para conseguirlo necesitamos descargar las imagenes de los sistemas y servicios elegidos y ponerlos en marcha una vez los tengamos en nuestro poder, lo cual, se hace así:
- Con la instrucción docker pull <nombre_imagen>:<version> descargamos en el sistema local, desde el repositorio de referencia, la imagen nombrada (<nombre_imagen>) con la <version> indicada o la última versión (latest) si no indicamos ninguna.
- La instrucción docker run ejecutará el contenedor pasado como parámetro (mirar imagen). Una CUESTIÓN IMPORTANTE que debemos de tener en cuenta al usar docker run es que, si vamos a ejecutar un contenedor que usa como base una imagen que no hemos descargado previamente con docker pull , docker run se ocupará de hacer ese trabajo de forma automática. Para buscar las imágenes que queremos la opción más adecuada es usar el buscador de Docker Hub.
docker run tiene una sintaxis sencilla pero multitud de opciones de las que explicaremos algunas. La estructura general es la siguiente:

En este curso no vamos a ver todas
las opciones que tiene docker run ya que son
alrededor de 100, pero iremos introduciendo apartado
a apartado las que se consideran más
importantes. A continuación algunas de ellas.
- -d o --detach para ejecutar un contenedor (normalmente porque tenga un servicio) en background.
- -e o --env para establecer variables de entorno en la ejecución del contenedor.
- -h o --hostname para establecer el nombre de red parar el contenedor.
- --help para obtener ayuda de las opciones de docker.
- --interactive o -i para mantener la STDIN abierta en el contenedor.
- --ip si quiero darle una ip concreta al contenedor.
- --name para darle nombre al contenedor.
- --net o --network para conectar el contenedor a una red determinada.
- -p o --publish para conectar puertos del contenedor con los de nuestro host.
- --restart que permite reiniciar un contenedor si este se "cae" por cualquier motivo.
- --rm que destruye el contenedor al pararlo.
- --tty o -t para que el contenedor que vamos a ejecutar nos permita un acceso a un terminal para poder ejecutar órdenes en él.
- --user o -u para establecer el usuario con el que vamos a ejecutar el contenedor.
- --volume o -v para montar un bind mount o un volumen en nuestro contenedor.
- --wordirk o -w para establecer el directorio de trabajo en un contenedor.
A continuación vamos a ver algunos ejemplos básicos. :
EJEMPLO 1:
# Descargar una imagen de manera previa > docker pull ubuntu:18.04 # Crear un contenedor de
ubuntu:18.04 y tener acceso a un shell en
él. Si no hemos descargado la imagen de
manera previa se descargará. > docker run -it ubuntu:18.04 /bin/bash root@ef2bea1d6cb1:/# |
Al crear el contenedor se nos da un acceso a un shell del mismo. Es importante destacar que estamos accediendo como root que tiene unas implicaciones de seguridad que trataremos en el módulo 8 de este mismo curso. Al salir del terminal el contenedor se para.
EJEMPLO 2:
# Crear un contenedor de
centOs:18.04 y listar el contendido de la
carpeta / > docker run centOs:18.04 ls / bin etc lib lost+found mnt proc
run srv tmp var |
Al crear el contenedor se ejecuta la orden ls / y posteriormente el contenedor pasa a estar parado. Y ya no podremos acceder a él. Explicaremos en el próximo apartado el porqué.
EJEMPLO 3:
# Crear un contenedor de httpd
(Servidor Apache) > docker run httpd AH00558: httpd:
Could not reliably determine the
server's fully qualified domain name,
using 172.17.0.6. Set the 'ServerName'
directive globally to suppress this
message |
Al ejecutar esa orden se crea un servidor Web Apache 2.4 en la ip mostrada y se nos muestra por pantalla el log de dicho servicio.
EJEMPLO 4:
# Crear un contenedor de
debian 9 y mostrar el contenido de una
carpeta establecida con el parámetro -w > docker run -it -w /etc debian:9 ls |
Al crear el contenedor se ejecuta la orden ls desde el directorio /etc, posteriormente el contenedor pasa a estar parado. Y ya no podremos acceder a él. Explicaremos en el próximo apartado el porqué.
Conforme vayamos creando contenedores hay dos órdenes que nos van a interesar para hacer un seguimiento de qué tenemos en nuestro sistema:
# Mostrar los contenedores en
ejecución (Estado Up) > docker ps # Mostrar todos los
contenedores creados ya estén en
ejecución (Estado Up) o parados
(Estado Exited) > docker ps -a |