apuntes:docker
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
apuntes:docker [2017/09/20 01:17] – [Trabajar con Docker] Santiago Faci | apuntes:docker [2023/04/14 11:06] (current) – [Eliminar la caché] Santiago Faci | ||
---|---|---|---|
Line 4: | Line 4: | ||
===== ¿Qué es Docker? ===== | ===== ¿Qué es Docker? ===== | ||
+ | |||
+ | Docker es una plataforma para desarrollar, | ||
+ | |||
+ | Docker permite empaquetar y lanzar una aplicación en un entorno totalmente aislado llamado contenedor. Estos contenedores se ejecutan directamente sobre el kernel de la máquina por lo que son mucho más ligeros que las máquinas virtuales. De esa manera podemos ejecutar mucho más contenedores para el mismo equipo que si éstos fueran maquina virtuales. De esta manera, podemos probar rapidamente uestra aplicación web, por ejemplo, en múltiples entornos distintos al de donde nos encontramos desarrollando. Realmente es mucho más rápido que hacerlo en una máquina virtual, puesto que reduce el tiempo de carga y el espacio requerido por cada uno de estos contenedores o máquinas. | ||
+ | |||
+ | Incluso existe un repositorio, | ||
+ | |||
+ | En las siguienes imágenes se compara la arquitectura de Docker y la de un sistema basado en máquinas virtuales. Se puede observar que, al eliminar la necesidad de un Sistema Operativo invitado, los contenedores de Docker son mucho más ligeros. En la práctica, se puede apreciar claramente como la velocidad de creación y arranque de estos contenedores es claramente superior a la de cualquier máquina virtual, sobre todo porque en cada contenedor podremos decidir que capas instalar contando sólo con lo estrictamente necesario. | ||
< | < | ||
Line 11: | Line 19: | ||
< | < | ||
- | ==== Instalación ==== | + | < |
+ | {{ apuntes: | ||
+ | < | ||
+ | |||
+ | ===== Instalación | ||
- | [[http:// | + | Una vez hayamos descargado |
<code bash> | <code bash> | ||
Line 27: | Line 39: | ||
. . . | . . . | ||
</ | </ | ||
+ | |||
+ | Si queremos comprobar la versión de Docker podemos hacerlo de la siguiente manera. A veces puede ser útil puesto que se pueden haber añadido nuevas características en las versiones posteriores y podemos necesitar saber en cuál estamos nosotros. | ||
<code bash> | <code bash> | ||
Line 33: | Line 47: | ||
</ | </ | ||
- | ==== Trabajar con Docker | + | ===== Imágenes ===== |
- | === Lanzar un contenedor | + | Las imágenes son una serie de capas software que definen la estructura que tendrá el contenedor |
- | <code bash> | + | ==== Crear una imagen ==== |
- | santi@zenbook: | + | |
- | Unable to find image ' | + | |
- | latest: Pulling from library/ | + | |
- | 219d2e45b4af: | + | |
- | Digest: sha256: | + | |
- | Status: Downloaded newer image for debian: | + | |
- | root@94565ea1af31:/# | + | |
- | </ | + | |
- | santi@zenbook: | + | Normalmente se crean a través de un fichero donde se definen las características que se quieren añadir a dicha imagen, creando un fichero llamado '' |
+ | |||
+ | <file vim Dockerfile> | ||
+ | FROM php:7.0-apache | ||
+ | COPY src /var/www/html | ||
+ | </ | ||
+ | |||
+ | De esta forma tendremos una carpeta cuyo contenido será el fichero '' | ||
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
+ | Dockerfile src | ||
</ | </ | ||
- | === Listar los contenedores en ejecución === | + | A continuación, |
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
- | CONTAINER ID IMAGE | + | Sending build context to Docker daemon |
- | a859e3fdc573 | + | Step 1/2 : FROM php:7.0-apache |
+ | 7.0-apache: Pulling from library/ | ||
+ | aa18ad1a0d33: | ||
+ | 29d5f85af454: | ||
+ | eca642e7826b: | ||
+ | 3638d91a9039: | ||
+ | 3646a95ab677: | ||
+ | 628b8373e193: | ||
+ | c24a2b2280ed: | ||
+ | f968b84cbbbc: | ||
+ | d9ca89480aeb: | ||
+ | 9d506ea407af: | ||
+ | 3e07f2e31260: | ||
+ | cddaac5f61ab: | ||
+ | 1d7adb8f245d: | ||
+ | Digest: sha256: | ||
+ | Status: Downloaded newer image for php: | ||
+ | | ||
+ | Step 2/2 : COPY src / | ||
+ | | ||
+ | Removing intermediate container dc20be7a4288 | ||
+ | Successfully built 8a6954795b9f | ||
+ | Successfully tagged miapache-php: | ||
</ | </ | ||
- | === Listar todos los contenedores === | + | Ahora sólo nos queda lanzar un contenedor de esa imagen para ponerla en marcha. En este caso mapeamos el puerto 80 de la máquina |
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
- | CONTAINER ID IMAGE | + | AH00558: apache2: Could not reliably determine the server' |
- | 5248cf319258 | + | AH00558: apache2: Could not reliably determine the server' |
- | 78d990ba4591 | + | [Wed Sep 20 11: |
+ | [Wed Sep 20 11:25:14.857575 2017] [core: | ||
</ | </ | ||
- | === Listar las imágenes locales === | + | Podemos ver como ha arracando un servidor web Apache y, por el mapeo de puertos que hemos establecido, |
+ | |||
+ | ==== Listar las imágenes locales ==== | ||
+ | |||
+ | Además, es posible comprobar que imágenes tenemos disponibles localmente. Serán las imágenes de las que hayamos creado contenedores en algún momento, independientemente de que éstos todavía existan. | ||
<code bash> | <code bash> | ||
santi@zenbook: | santi@zenbook: | ||
REPOSITORY | REPOSITORY | ||
+ | miapache-php | ||
debian | debian | ||
hello-world | hello-world | ||
</ | </ | ||
- | === Eliminar | + | ==== Eliminar |
- | <code bash> | + | Si no necesitamos |
- | santi@zenbook: | + | |
- | 78d990ba4591 | + | |
- | </ | + | |
- | + | ||
- | === Eliminar | + | |
<code bash> | <code bash> | ||
Line 96: | Line 133: | ||
</ | </ | ||
- | === Lanzar un contenedor | + | ===== Contenedores ===== |
+ | |||
+ | ==== Lanzar un contenedor ==== | ||
+ | |||
+ | Como ya hemos visto un poco más arriba, el comando '' | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | Ahora veremos como también podemos lanzar contenedores indicando una imagen de la que todavía no disponemos (por ejemplo una imagen de [[https:// | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | Unable to find image ' | ||
+ | latest: Pulling from library/ | ||
+ | 219d2e45b4af: | ||
+ | Digest: sha256: | ||
+ | Status: Downloaded newer image for debian: | ||
+ | root@94565ea1af31:/# | ||
+ | </ | ||
+ | |||
+ | Ahora veamos un ejemplo en el que queramos desplegar una página web en un servidor web Apache. Queremos crear un contenedor con un servidor Apache desde el que podamos comprobar que la página funciona correctamente. | ||
+ | |||
+ | Con el siguiente comando crearemos y lanzaremos un contenedor con las siguientes características: | ||
+ | * El contenedor tendrá asociado el nombre // | ||
+ | * Se ha mapeado el puerto 80 del contenedor sobre el puerto 5555 de la máquina real. De esa manera, conectándonos al puerto 5555 de nuestro equipo podremos ver que ocurre en el 80 del contenedor, justamente donde estará escuchando el Apache del mismo | ||
+ | * Hemos mapeado la ruta actual de nuestro equipo con la ruta ''/ | ||
+ | * Indicamos que queremos crear y lanzar un contenedor utilizando la imagen del [[http:// | ||
+ | * También hemos indicado con la opción '' | ||
<code bash> | <code bash> | ||
Line 113: | Line 179: | ||
444c11d75d0a1e424c5c24668e62357af74de8b801e75d37c1e014e0423c9a2c | 444c11d75d0a1e424c5c24668e62357af74de8b801e75d37c1e014e0423c9a2c | ||
</ | </ | ||
+ | |||
+ | Una vez lanzado y puesto en marcha podemos ir a la dirección '' | ||
+ | |||
+ | Podemos ver cómo está el contenedor en ejecución con el comando '' | ||
<code bash> | <code bash> | ||
Line 119: | Line 189: | ||
444c11d75d0a | 444c11d75d0a | ||
</ | </ | ||
+ | |||
+ | ==== Listar los contenedores en ejecución ==== | ||
+ | |||
+ | Si dejamos el contenedor en marcha y lanzamos el comando '' | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | CONTAINER ID IMAGE | ||
+ | a859e3fdc573 | ||
+ | </ | ||
+ | |||
+ | ==== Listar todos los contenedores ==== | ||
+ | |||
+ | También podemos listar todos los contenedores, | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | CONTAINER ID IMAGE | ||
+ | 5248cf319258 | ||
+ | 78d990ba4591 | ||
+ | </ | ||
+ | |||
+ | ==== Eliminar un contenedor ==== | ||
+ | |||
+ | Podemos eliminar un contenedor con el comando '' | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | 78d990ba4591 | ||
+ | </ | ||
+ | |||
+ | ==== Detener un contenedor ==== | ||
+ | |||
+ | Y ahora podemos detener y/o volver a iniciar el contenedor refiriéndonos a ella a través del nombre asociado. | ||
<code bash> | <code bash> | ||
Line 124: | Line 228: | ||
miapache | miapache | ||
</ | </ | ||
+ | |||
+ | ==== Iniciar un contenedor ==== | ||
+ | |||
+ | El contenedor queda ya asociado y simplemente lo tengo que lanzar con el siguiente comando cada vez que lo quiera poner en marcha | ||
<code bash> | <code bash> | ||
Line 129: | Line 237: | ||
miapache | miapache | ||
</ | </ | ||
+ | |||
+ | ==== Mostrar la información de un contenedor ==== | ||
+ | |||
+ | También podemos mostrar toda la información sobre un contenedor existente | ||
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | "/ | ||
+ | ], | ||
+ | " | ||
+ | . . . | ||
+ | . . . | ||
+ | . . . | ||
</ | </ | ||
+ | |||
+ | Como se puede ver, la información que se muestra, es muy exhaustiva. En ocasiones, si sabemos lo que buscamos, podemos directamente aplicar un filtro para indicar que partes de la configuración queremos que se muestren. | ||
+ | |||
+ | En este caso queremos simplemente ver la configuración del contenedor (el que hemos creado anteriormente con nombre // | ||
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
+ | map[80/ | ||
</ | </ | ||
+ | |||
+ | ===== Varios ===== | ||
+ | |||
+ | ==== Eliminar la caché ==== | ||
+ | |||
+ | Eliminará la cache del proceso de construcción de las imágenes. Asi podemos forzar que vuelva a descargar todos los ficheros y realizar todos los pasos como si fuera la primera vez. | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | (c) 2017 Santiago Faci |
apuntes/docker.1505870264.txt.gz · Last modified: 2019/01/04 13:02 (external edit)