|
|
(3 revisiones intermedias por el mismo usuario no mostrado) |
Línea 3: |
Línea 3: |
| {{TOC}} | | {{TOC}} |
| | | |
| + | |
| + | {{ManuelRomero/Docker/conceptoImagenContenedor}} |
| <br> | | <br> |
| {{#widget:Slides}} | | {{#widget:Slides}} |
Línea 72: |
Línea 74: |
| </div> | | </div> |
| <!--7------------------------------------------------------> | | <!--7------------------------------------------------------> |
| + | |
| + | |
| + | <div class="slide"> |
| + | <source lang=bash> |
| + | docker create |
| + | |
| + | docker create [OPTIONS] IMAGE [COMMAND][ARG…] |
| + | </source> |
| + | *Creará un contenedor, pero no ejecutará ningún comando. Este se ejecutará usando posteriomente el comando docker start. |
| + | *Este comando tiene muchos parámetros ( docker create –help) |
| + | *Ejemplo de uso: creo 3 contenedores con cada uno un comando, cada contenedor les llamo de forma diferente (--name ). -i (interactivo ) y -t(terminal) permitirán abrir un terminal e interactuar con el shell |
| + | <source lang=bash> |
| + | docker create --name ls ubuntu:latest ls |
| + | docker create -i -t --name bash ubuntu:latest bash |
| + | docker create --name update ubuntu:latest apt-get update |
| + | </source> |
| + | |
| + | |
| + | *Ahora podemos ver los contenedores creados con <span class="r">docker ps</span> |
| + | <source lang=bash> |
| + | docker ps -a |
| + | </source> |
| + | *Para poder ejecutar los contenedores creados con create necesitamos el comando start |
| + | *Para ver por la consola tenemos que attach la salida del contenedor al stdout/stderr opción -a. con -i (interactive) también vemos la salida que genera por pantalla. |
| + | *Para poder ejecutar los contenedores creados con create necesitamos el comando start |
| + | *Para ver por la consola tenemos que attach la salida del contenedor al stdout/stderr opción -a. con -i (interactive) también vemos la salida que genera por pantalla. |
| + | *En el caso del contenedor bash solo podemos ver el funcionamiento esperado si lo ejecutamos con el flag -i |
| + | <source lang=bash> |
| + | docker start -a ls |
| + | docker start -i bash |
| + | docker create -a updte |
| + | </source> |
| + | |
| + | |
| + | |
| + | |
| + | *Permite crear y arrancar un contenedor |
| + | *En realidad ejecuta un comando en un '''''nuevo contenedor''''', por lo tanto lo crea. |
| + | |
| + | [[Archivo:creacion_conenedor_1.png|800px|center]] |
| + | </div> |
| | | |
| <div class="slide"> | | <div class="slide"> |
Línea 532: |
Línea 575: |
| </div> | | </div> |
| --> | | --> |
| + | ===Instalar docker portainer=== |
| + | ;https://www.portainer.io/blog/portainer-community-edition-ce-vs-portainer-business-edition-be-whats-the-difference |
Última revisión de 08:20 13 nov 2024
BLOQUE 2 PHP: DOKCER: Aplicación para Empaquetar y ejecutar aplicacines
¡Independizate del sistema y garantiza tus versiones!
Docker y programación web
Plantilla:ManuelRomero/Docker/conceptoImagenContenedor
Contenedor Vs Imagen
- Estos conceptos son la base para utilizar docker.
- La imagen
- La imagen es el fichero que nos va a permitir instalar esta especie de máquina virtual.
- No se emula hardware, sino solo servicios (software: sistema de ficheros, sistema operativo y servicios), por lo que un conetenedor no es una máquina, aunque sí que tenga una ip. Sí que se puede ver como un dispositivo o nodo de la red independiente.
- Podríamos hacer una comparación con la iso para instalar el sistema operativo, pero solo para tener una idea, ya que el concepto es diferente.
- El contenedor
- El contenedor será el software que corresponde al sistema corriendo con el cual podemos interactuar. Se instala a partir de una imagen y siempre dependerá de ella, es decir, no podremos eliminar la imagen mientras tenga un contenedor asociado.
- En realidad el contenedor almacena los cambios que haya sobre la imagen y todo va siendo pequeños incrementos sobre un fichero base, lo que se vuelve un sistema muy robusto, ágil y ligero.
- Contenedor Vs Imagen
- También, a partir de un contenedor podemos crear una imagen con todo el software que tenga ese contenedor.
- Cuando volvamos a desplegar la imagen creada en otro contenedor, tendremos disponible todo el software incluido.
Obtener imágenes
- Lo primero que tendremos que hacer es descargar una imagen.
- La imagen la podremos generar nosotros u obtener de un repositorio de imágenes que hay en la nube
- Hay ciento de miles o millones de imágenes (es difícil de cuantificar)
- Hay imágenes facilitadas por sitios oficiales (apache o httpd, mariadb, mysql), y otras que los usuarios suben (hay que revisar la documentación, ya que puede ser que no sean de calidad)
(: El nombre de las imágenes y de los contenedores consta de nombre:tag)
docker pull ubuntu:latest
(: Cuando creamos un contenedor (siempre a partir de una imagen), si esta no existe en local, intentará localizarla en la nube y la descargará, por lo que no necesitaremos hacer un pull de la misma
)
- Lo primero que necesitamos es una images
Crear un contenedor
- Hay varias formas de crear un contenedor, y vamos poco a poco a aprenderlas según vayamos necesitando
- Siempre a partir de una imagen
|
docker create
docker create [OPTIONS] IMAGE [COMMAND][ARG…]
- Creará un contenedor, pero no ejecutará ningún comando. Este se ejecutará usando posteriomente el comando docker start.
- Este comando tiene muchos parámetros ( docker create –help)
- Ejemplo de uso: creo 3 contenedores con cada uno un comando, cada contenedor les llamo de forma diferente (--name ). -i (interactivo ) y -t(terminal) permitirán abrir un terminal e interactuar con el shell
docker create --name ls ubuntu:latest ls
docker create -i -t --name bash ubuntu:latest bash
docker create --name update ubuntu:latest apt-get update
- Ahora podemos ver los contenedores creados con docker ps
- Para poder ejecutar los contenedores creados con create necesitamos el comando start
- Para ver por la consola tenemos que attach la salida del contenedor al stdout/stderr opción -a. con -i (interactive) también vemos la salida que genera por pantalla.
- Para poder ejecutar los contenedores creados con create necesitamos el comando start
- Para ver por la consola tenemos que attach la salida del contenedor al stdout/stderr opción -a. con -i (interactive) también vemos la salida que genera por pantalla.
- En el caso del contenedor bash solo podemos ver el funcionamiento esperado si lo ejecutamos con el flag -i
docker start -a ls
docker start -i bash
docker create -a updte
- Permite crear y arrancar un contenedor
- En realidad ejecuta un comando en un nuevo contenedor, por lo tanto lo crea.
- docker run
- Permite crear y arrancar un contenedor
- En realidad ejecuta un comando en un nuevo contenedor, por lo tanto lo crea.
- Creando un contenedor a partir de una imagen del repositorio
- Vamos a crear un contenedor a partir de la imagen ubuntu:latest;
- Existe un repositorio de imágenes en la nube donde el comando docker va a ir a buscarlas cuando las necesite https://hub.docker.com/.
- Podemos registrarnos, como en git', y aportar las imágenes que creemos (lo veremos a continuación)
(: Este comando habrá creado un contenedor)
- Ver todos los contenedores docker ps -a
- Podemos ver todos los contenedores
- Si no damos la opción -a solo se visualziarán los contenedores activos
- Borrando un contenedor
- docker rm
- Como el contenedor tiene un nombre que el sistema le ha dado, vamos a borrarlo y crear otro asignando un nombre
docker rm <nombre_del_contenedor>
- Borrando una imagen
- docker rmi
- Igualmente podríamos elminar una imagen de nuestro sistema.
(: Si existe algún contenedor que dependa de esa imagen, no se podrá borrar)
docker rmi <nombre_de_la_imagen>
- Para ver los nombres de las imágenes en mi sistema (actualmente descargados)
- Crear un contenedor asignando el nombre
- docker run --name nombre
docker run --name web ubuntu:latest
- Terminal en el contenedor
- interactivamente: docker run -ti ....
- Con el contenedor creado previamente podemos ejectura acciones, pero si queremos interactuar con él, debemos de permitir abrir un terminal y establecer interacción
- Para ello hemos de aportar el parámetro -t para poder abrir terminal y -i para interactuar, lo podemos escribir junto o separado
docker run -ti --name web ubuntu:latest
#Da lo mismo escribirlo así
docker run -t -i --name web ubuntu:latest
Estableciendo un forward o mapeando puertos
- Situación
-
- Ahora tenemos un docker. Podremos acceder a él a través de la ip, ya que se ha creado una red interna entre el anfitrión y el contenedor.
- La configuración de la red, se puede establecer, en linux, por defecto suele empezar con la red 172.17.0.0, por lo que se crea la siguiente situación (imagen siguiente).
- Estableciendo un forward o mapeando puertos
- Estableciendo un forward o mapeando puertos
- Si en el docker tenemos instalado un servidor web, como va a ser nuestro caso, y queremos que atienda nuestras solicitudes, sería fácil acceder a él a través de la ip.
- Pero se presenta un problema en sistema windows y si queremos acceder a nuestro docker, desde otra máquina, ya que la red es interna, y en windows no se permite acceder al docker por ip.
- Estableciendo un forward o mapeando puertos
- La solución es mapear o realizar un fordward de puertos, de modo que estableceremos un puerto en nuestro anfitrión (el valor que queramos asignar por encima del 1024) que mapearemos al puerto 80 o 443 de nuestro docker, de manera que todas las solicitudes que reciba nuestro anfitrión se redirigan al servidor web del docker.
- Estableciendo un forward o mapeando puertos
docker run -p puerto_anfitrion:puerto:docker ...
#Primero borramos el docker que teníamos
docker rm web
#Lo volvemos a crear, mapeando puertos
docker run -ti -p 8080:80 --name web ubuntu:latest
Compartiendo carpetas entre anfitrión y docker
- Situación
-
- Ahora ocurre que el apache de docker va a ejecutar recursos que vamos a debemos tener almacenados en el docker
- Esos recursos van a ser programas de php que escribiremos
- Usaremos un EDI, por ejemplo phpstorm, para crear dichos recursos, pero el EDI, no lo vamos a ejectuar dentro del docker, sino en nuestra máquina anfitriona
- Compartiendo carpetas entre anfitrión y docker
- Compartiendo carpetas entre anfitrión y docker
- Vamos a crear una carpeta compartida entre anfitrión y contenedor
- De forma que todo lo que haya en esa carpeta y creemos en el anfitrión, estará disponible en el contenedor
- La acción es bidireccional, todo lo que haya y creemos en el contenedor, estará disponible en el anfitrión
- Estableciendo un forward o mapeando puertos
docker run -v dir/anfitrion:/dir/contenedor ...
#Primero borramos el docker que teníamos
docker rm web
#Lo volvemos a crear, mapeando puertos
docker run -ti -p 8080:80 -v /home/user/docker:/var/www/html --name web ubuntu:latest</span>
- Estableciendo un forward o mapeando puertos
(:
- Se creará un directorio en local según especificquemos
- Si trabajamos en linux, el directorio lo habrá creado docker, y por lo tanto será propiedad de root (hay que cambiar permisos)
- En windows no existe esta circunstancia
- Ahora ya podemos crear los proyectos con nuestro edi, y el apache del docker los encontrará para ejecutarlos
)
- Vamos a instalar en el contenedor los paquetes que necesito para nuestra arquitectura web:
- Apache
- PHP
- xdebug
- Para ello vamos a la sección de instalación del sistem y realizamos las instalaciones correspondientes
docker run -ti --name web ubuntu:latest
Instalar docker portainer
- https://www.portainer.io/blog/portainer-community-edition-ce-vs-portainer-business-edition-be-whats-the-difference