Docker es similar a VirtualBox solo que se gestiona con la línea de órdenes y consume muchísimos menos recursos el crear cada máquina virtual.
En el entorno de Docker hay que diferenciar dos conceptos:
Mas información:
Datos de conexión de Proxmox a los 2 entornos:
Para instalar docker , lanzar las siguientes órdenes en Ubuntu:
snap remove docker sudo apt-get remove docker docker-engine docker.io containerd runc sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
Las instrucciones actualizadas están en Install Docker Engine on Ubuntu
Para comprobar que todo funciona , lanzar la siguiente orden:
sudo docker container run hello-world
Las imágenes se descargan de una página llamada DockerHub. Es algo similar a GitHub pero para imágenes de Docker.
Orden | Explicación |
---|---|
docker image pull | Bajar una imagen de DockerHub |
docker image rm | Borrar una imagen en local |
docker image ls | Ver las imagenes que hay en local |
docker image save | Exportar una imagen a un fichero |
docker image load | Importan una imagen desde un fichero |
Se usa para descargar una imagen de DockerHub en nuestra máquina.
Tiene un único parametro que es el nombre de la imagen a descargar. El nombre de la imagen tiene el siguiente formato: usuario/nombre de la imagen:tag de la imagen
Siendo:
docker image pull mysql/mysql-server:8.0.22
Al igual que con otras herramientas, para clase habrá que configurar el proxy:
mkdir /etc/systemd/system/docker.service.d echo "[Service]" >> /etc/systemd/system/docker.service.d/http-proxy.conf echo "Environment=\"HTTP_PROXY=http://172.16.0.9:8080/\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf systemctl daemon-reload
Environment=HTTP_PROXY=HTTP_PROXY=http://172.16.0.9:8080/"
systemctl show --property Environment docker
Mas información:
Orden | Explicación |
---|---|
docker container run | Crear un nuevo contenedor y ejecutarlo a partir de una imagen |
docker container start | Iniciar un contenedor que está parado |
docker container stop | Parar un contenedor |
docker container rm | Borrar un contenedor que está parado |
docker container ls | Ver los contenedores que hay |
docker container exec | Ejecutar una orden en el contenedor. Normalmente es el Shell |
docker container stats | Mostrar uso de CPU,memoria,etc de los contenedores |
docker container logs | Muestra lo que sale por pantalla. Es decir lo que se llama en Linux stdout y stderr . Normalmente los contenedores van sacando por pantalla lo que hacen. |
Las dos órdenes mas complejas e importantes para la gestión de los contenedores son:
docker container run
docker container exec
Pone en marcha la imagen creando un contenedor.Su forma mas sencilla de usar es docker run container nombre_imagen
. Aunque prácticamente siempre se usan la mayoría de los siguientes parámetros:
-d
: Indicar que es un servidor (demonio)-it
: Si queremos interactuar en la consola con la aplicación (NO es un demonio). Practically, what is the difference between docker run -dit(-itd) vs docker run -d?--restart always
: Añadiremos este flag si queremos que se vuelva a iniciar el contenedor si acaba dicho contenedor. Es útil ya que se iniciará el contenedor si se reinicia la máquina real.--name nombreContanedor
: Indica el nombre que va a tener el contenedor. Es muy útil ya que así sabemos cual es cada una de las imágenes.--hostname nombreHost
: Indica el nombre DNS que va a tener la máquina.-p puertoExterno:puertoInterno
: Indica en que puerto de la máquina real se "mapea" el puerto que usa el software servidor del contenedor.-e nombreVariableDeEntorno:valorVariableDeEntorno
: Permite indicar el valor de una variable de entorno. Es la forma mas común de configurar un contenedor. Se debe mirar la configuración de la imagen para saber las variables a usar ya que es específico de cada imagen.-v carpetaMaquinaReal:carpetaInternaContenedor
: Indica que una carpeta de dentro del contenedor será realmente una carpeta real de nuestra máquina. Se usa para que no se pierdan los datos si borramos la máquina y la volvemos a crear. docker container run \ -dit \ --restart always \ -v /opt/mariadb:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -p 4000:3306 \ --name prueba_mariadb \ --hostname prueba_mariadb \ mariadb:10.1
docker container run
son los parámetros -v
y -p
Veamos ahora otras opciones de docker container exec
--rm
: Que se borre el contenedor si éste se para.-w carpeta
: La carpeta en la que se estarán en el contenedor cuando se ejecute algo. Es como hacer un cd
--pull=never
: Hace que si no existe la imagen no la descargue. Ya que por defecto lo hace y normalmente suele ocurrir cuando hemos escrito mal el nombre de la imagen.
docker container run \ -dit \ --rm \ --pull=never \ -w /var/lib/mysql \ -v /opt/mariadb:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -p 4000:3306 \ --name prueba_mariadb \ --hostname prueba_mariadb \ mariadb:10.1
hemos añadido --rm
para indicar que si el contenedor acaba y se para, que automáticamente también se borre.
Y también hemos añadido -w /var/lib/mysql
para estar en esa carpeta. Y así por ejemplo si lanzásemos docker container exec -it prueba_mariadb ls
, se verían los ficheros de la carpeta /var/lib/mysql
. Por último hemos dicho con --pull=never
que si no existe la imagen no la descargue.
Permite lanzar órdenes dentro del contenedor. Podría verse como algo similar a conectarse por ssh al contenedor.
/etc/passwd
que está dentro del contenedordocker container exec -it nombre_container cat /etc/passwd
docker container exec -it nombre_container /bin/bash
Para hacer estos ejercicios deberás tener instalado una máquina virtual de VirtualBox con Ubuntu Server 18.04.5. Aunque no es necesario si ya usas Linux en tu equipo.
Dada las siguientes dos imágenes:
Responde:
Indica las órdenes para realizar lo siguiente:
Con la imagen de Jenkins que te has bajado, crea un contenedor con los siguientes datos:
Ahora vamos a configurar Jenkins:
/var/jenkins_home/secrets/initialAdminPassword
del contenedor.Se deberá mostrar una imagen similar a la siguiente:
Indica los siguientes comandos:
Navega a la página web del Jenkins y comprueba que ya está todo instalado. ¿Como es que no se ha borrado si hemos borrado el contenedor y vuelto a crearlo?
Indica los siguientes comandos:
Haz lo siguiente:
Indica los siguientes comandos:
Haz lo siguiente:
Indica los siguientes comandos:
Haz lo siguiente:
Indica los siguientes comandos:
Haz lo siguiente:
Indica los siguientes comandos:
Crea el fichero index.php con el siguiente contenido
<?php phpinfo(); ?>
Cópialo de forma que navegando a "http://localhost:22322" se vea el resultado que ha generado la página en php. Será similar a lo siguiente: