clase:daw:daw:tema03
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:daw:daw:tema03 [2026/10/28 09:31] – borrado - editor externo (Fecha desconocida) 127.0.0.1 | clase:daw:daw:tema03 [2026/10/28 09:59] (actual) – Enlaces que apuntaban a 1eval/2eval tras mover los temas a clase:daw:daw claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== 3. Docker: Básico ====== | ||
| + | |||
| + | |||
| + | ===== Introducción a Docker ===== | ||
| + | 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: | ||
| + | * **Imagen**: Son como plantillas de una //máquina virtual// | ||
| + | * **Contenedor**: | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | Mas información: | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ===== Datos de servidores ===== | ||
| + | |||
| + | * **Producción** | ||
| + | * IP: 192.168.59.104 | ||
| + | * Gateway: 192.168.59.1 | ||
| + | * DNS: | ||
| + | * Nombre dominio: // | ||
| + | |||
| + | * **Preproducción** | ||
| + | * IP: 172.16.0.205 | ||
| + | * Gateway: 172.16.0.254 | ||
| + | * DNS: 172.16.0.5 | ||
| + | * Nombre dominio: // | ||
| + | |||
| + | |||
| + | ==== Proxmox ==== | ||
| + | Datos de conexión de Proxmox a los 2 entornos: | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | <nodisp 2> | ||
| + | * Proxmox | ||
| + | * Producción: | ||
| + | * Preproducción: | ||
| + | </ | ||
| + | ===== Instalación ===== | ||
| + | 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 -fsSL https:// | ||
| + | sudo apt-key fingerprint 0EBFCD88 | ||
| + | sudo add-apt-repository "deb [arch=amd64] https:// | ||
| + | sudo apt-get update | ||
| + | sudo apt-get install docker-ce docker-ce-cli containerd.io | ||
| + | |||
| + | Las instrucciones actualizadas están en [[https:// | ||
| + | |||
| + | Para comprobar que todo funciona , lanzar la siguiente orden: | ||
| + | |||
| + | sudo docker container run hello-world | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Gestión de Imágenes ===== | ||
| + | Las imágenes se descargan de una página llamada [[https:// | ||
| + | |||
| + | |||
| + | ^ Orden ^ Explicación | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | |||
| + | ==== docker image pull ==== | ||
| + | Se usa para descargar una imagen de [[https:// | ||
| + | |||
| + | Tiene un único parametro que es el nombre de la imagen a descargar. El nombre de la imagen tiene el siguiente formato: **usuario/ | ||
| + | |||
| + | Siendo: | ||
| + | * usuario: El nombre del usuario que ha subido la imagen. Si la imagen es oficial de DockerHub no tendrá usuario y no se pondrá la / posterior | ||
| + | * nombre de la imagen: Es obligatorio y es el nombre de la imagen a descargar | ||
| + | * tag de la imagen: Es la versión de la imagen. Si no se pone la versión , no hay que poner los dos puntos anteriores y se descargará la que está etiquetada como " | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | * Descarga la imagen llamada " | ||
| + | |||
| + | docker image pull mysql/ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Proxy ==== | ||
| + | Al igual que con otras herramientas, | ||
| + | |||
| + | mkdir / | ||
| + | echo " | ||
| + | echo " | ||
| + | systemctl daemon-reload | ||
| + | |||
| + | * Si todo está correcto, la siguiente orden debe mostrar ''< | ||
| + | |||
| + | systemctl show --property Environment docker | ||
| + | |||
| + | Mas información: | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Gestión de Contenedores ===== | ||
| + | |||
| + | |||
| + | ^ Orden ^ Explicación | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | | [[https:// | ||
| + | |||
| + | Las dos órdenes mas complejas e importantes para la gestión de los contenedores son: | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ==== docker container run ==== | ||
| + | Pone en marcha la imagen creando un contenedor.Su forma mas sencilla de usar es '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | <note important> | ||
| + | Si usamos una carpeta real , deberá tener todos los permisos ya que el usuario que usa el contenedor es distinto al nuestro. | ||
| + | |||
| + | Podemos decir que la carpeta de '' | ||
| + | Y a medida que el contenedor escribe cosas, aparecen en '' | ||
| + | |||
| + | Pero si inicialmente hay ficheros en '' | ||
| + | |||
| + | Por lo tanto no deberíamos mapear una capeta que en el contenedor ya hay cosas porque no se verán y solo se verá lo de la máquina real. Eso ocurre cuando creemos que podemos mapear una carpeta de ficheros de configuración del contenedor para verlo en la máquina real y eso no funciona. | ||
| + | |||
| + | Ejemplo: | ||
| + | |||
| + | * La imagen tiene / | ||
| + | |||
| + | a.txt | ||
| + | b.txt | ||
| + | |||
| + | |||
| + | * En la máquina real carpetaMaquinaReal contiene: | ||
| + | |||
| + | x.txt | ||
| + | |||
| + | |||
| + | * Ejecutas el contenedor con: '' | ||
| + | |||
| + | |||
| + | * Dentro del contenedor verás solo: | ||
| + | |||
| + | / | ||
| + | |||
| + | |||
| + | * '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | * Ejecuta [[https:// | ||
| + | * En modo demonio | ||
| + | * Que si por algún motivo acaba el contenedor se vuelva a reiniciar | ||
| + | * Los datos de "/ | ||
| + | * Se indica que la variable de entorno MYSQL_ROOT_PASSWORD tiene el valor de **root**. Esto se hace para configurar la contraseña de root de la imagen. Está indicado en la documentación de la imagen | ||
| + | * Se verá en el puerto 4000 | ||
| + | * Se llamará el contenedor " | ||
| + | |||
| + | docker container run \ | ||
| + | -dit \ | ||
| + | | ||
| + | -v / | ||
| + | -e MYSQL_ROOT_PASSWORD=root | ||
| + | -p 4000: | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | <note tip> | ||
| + | Lo mas complicado de la orden '' | ||
| + | </ | ||
| + | |||
| + | === Más opciones === | ||
| + | Veamos ahora otras opciones de '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Otra opción que suelen tener los contenedores, | ||
| + | |||
| + | <sxh base> | ||
| + | docker container run \ | ||
| + | -dit \ | ||
| + | --rm \ | ||
| + | | ||
| + | -w / | ||
| + | -v / | ||
| + | -e MYSQL_ROOT_PASSWORD=root | ||
| + | -p 4000: | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | hemos añadido '' | ||
| + | Y también hemos añadido '' | ||
| + | |||
| + | |||
| + | ==== docker container exec ==== | ||
| + | Permite lanzar órdenes dentro del contenedor. Podría verse como algo similar a conectarse por ssh al contenedor. | ||
| + | |||
| + | |||
| + | * Muestra el contenido del fichero ''/ | ||
| + | |||
| + | docker container exec -it nombre_container cat /etc/passwd | ||
| + | |||
| + | |||
| + | * Ejecutar bash dentro del contenedor par poder lanzar culaquier orden dentro de él. | ||
| + | |||
| + | docker container exec -it nombre_container /bin/bash | ||
| + | |||
| + | |||
| + | ===== Ejercicios ===== | ||
| + | Para hacer estos ejercicios deberás tener instalado una máquina virtual de VirtualBox con [[https:// | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | <note important> | ||
| + | ==== Ejercicio 1 ==== | ||
| + | Dada las siguientes dos imágenes: | ||
| + | |||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | Responde: | ||
| + | * ¿Cual usarías? | ||
| + | |||
| + | Indica las órdenes para realizar lo siguiente: | ||
| + | |||
| + | * Baja a tu máquina la última versión de la imagen que has elegido. | ||
| + | * Baja a tu máquina otra imagen con el tag " | ||
| + | * Muestra las imágenes que tienes descargadas en tu máquina | ||
| + | * Borra una de las imágenes que tienes | ||
| + | * Muestra las imágenes que tienes descargadas en tu máquina | ||
| + | * Guarda la imagen que tienes en un fichero | ||
| + | * Borra la imagen que aun queda | ||
| + | * Carga la imagen que habías guardado en un fichero | ||
| + | * Muestra las imágenes que tienes descargadas en tu máquina | ||
| + | |||
| + | ==== Ejercicio 2 ==== | ||
| + | Con la imagen de Jenkins que te has bajado, crea un contenedor con los siguientes datos: | ||
| + | * El puerto interno 8080 que se vea en la máquina en el puerto 11211 | ||
| + | * Que los datos de configuración de Jenkins (en "/ | ||
| + | * Que el nombre del contenedor sea " | ||
| + | * Que el nombre DNS sea " | ||
| + | * Que sea un demonio | ||
| + | |||
| + | Ahora vamos a configurar Jenkins: | ||
| + | * Navega a la IP de tu máquina Linux, deberá ver la página del Jenkins que acabas de instalar. | ||
| + | * Indica de 3 formas distinta como mostrar el contenido (usando cat) del fichero ''/ | ||
| + | * Viéndolo desde la carpeta que está dentro del contenedor | ||
| + | * Viéndolo desde la carpeta que está en la máquina real | ||
| + | * Usando bash dentro del contenedor y una dentro del bash del contenedor, mostrar el contenido del fichero. | ||
| + | * Pega el contenido del fichero " | ||
| + | * Pulsa en " | ||
| + | * Crea el usuario que se llamará " | ||
| + | * Pulsa "Save and Finish" | ||
| + | * Pulsa "Start using Jenkins" | ||
| + | |||
| + | Se deberá mostrar una imagen similar a la siguiente: | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | |||
| + | ==== Ejercicio 3 ==== | ||
| + | Indica los siguientes comandos: | ||
| + | * Muestra la lista de contenedores. | ||
| + | * Borra el contenedor de Jenkins. No te dejará. | ||
| + | * Para el contendor de Jenkins | ||
| + | * Muestra la lista de contenedores. No debe verse el de Jenkins. | ||
| + | * Mira por internet la opción para ver " | ||
| + | * Borra el contenedor de Jenkins. Ya te dejará. | ||
| + | * Vuelve a crear el contenedor de Jenkins como en el ejercicio anterior. | ||
| + | |||
| + | 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? | ||
| + | |||
| + | ==== Ejercicio 4 ==== | ||
| + | Indica los siguientes comandos: | ||
| + | * Arranca un contenedor de [[https:// | ||
| + | |||
| + | Haz lo siguiente: | ||
| + | * Conéctate desde tu ordenador Windows al MariaDB y crea una tabla e inserta un dato. | ||
| + | |||
| + | Indica los siguientes comandos: | ||
| + | * Borra el contenedor de MariaDB | ||
| + | * Arranca un contenedor de MariaDB pero no indiques nada referido a las carpetas | ||
| + | |||
| + | Haz lo siguiente: | ||
| + | * Conéctate desde tu ordenador Windows al MariaDB y comprueba que no está la tabla que habías creado. | ||
| + | |||
| + | ==== Ejercicio 5 ==== | ||
| + | |||
| + | Indica los siguientes comandos: | ||
| + | * Arranca un contenedor de [[https:// | ||
| + | |||
| + | Haz lo siguiente: | ||
| + | * Conéctate desde tu ordenador Windows al MariaDB y crea una tabla e inserta un dato. | ||
| + | |||
| + | Indica los siguientes comandos: | ||
| + | * Borra el contenedor de MariaDB | ||
| + | * Arranca un contenedor de MariaDB y vuelve a indicar que la carpeta "/ | ||
| + | |||
| + | Haz lo siguiente: | ||
| + | * Conéctate desde tu ordenador Windows al MariaDB y comprueba que **SI** que está la tabla que habías creado. | ||
| + | |||
| + | ==== Ejercicio 6 ==== | ||
| + | Indica los siguientes comandos: | ||
| + | * Arranca un contenedor de [[https:// | ||
| + | |||
| + | Crea el fichero index.php con el siguiente contenido | ||
| + | <sxh php> | ||
| + | <?php | ||
| + | phpinfo(); | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | Cópialo de forma que navegando a " | ||
| + | |||
| + | {{php.png? | ||
| + | |||
| + | ==== Ejercicio 7 ==== | ||
| + | * Reinicia la máquina real. | ||
| + | * Comprueba que navegando a " | ||
| + | * Borra el contenedor | ||
| + | * Vuelve a crear el contenedor pero ahora añade que siempre se reinicie. | ||
| + | * Reinicia la máquina real | ||
| + | * Comprueba que navegando a " | ||
