User Tools

Site Tools


apuntes:docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:docker [2017/09/20 11:35] Santiago Faciapuntes:docker [2023/04/14 11:06] (current) – [Eliminar la caché] Santiago Faci
Line 10: Line 10:
  
 Incluso existe un repositorio, el [[http://hub.docker.com|Hub de Docker]], donde podemos encontrar imágenes de máquinas que podemos directamente descargar y ejecutar como contenedores. De esa forma, podemos, con un solo comando, lanzar una máquina con la configuración exacta a la que necesitamos para probar nuestro sitio web, aplicación web o cualquier desarrollo en el que estemos trabajando.  Incluso existe un repositorio, el [[http://hub.docker.com|Hub de Docker]], donde podemos encontrar imágenes de máquinas que podemos directamente descargar y ejecutar como contenedores. De esa forma, podemos, con un solo comando, lanzar una máquina con la configuración exacta a la que necesitamos para probar nuestro sitio web, aplicación web o cualquier desarrollo en el que estemos trabajando. 
 +
 +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.
  
 <figure> <figure>
Line 21: Line 23:
 <caption>Arquitectura de Docker</caption></figure> <caption>Arquitectura de Docker</caption></figure>
  
-==== Instalación ====+===== Instalación =====
  
-Una vez hayamos descargado [[http://www.docker.com|Docker]] para su instalación, podemos ejecutar el siguiente comando para comprobar que todo se ha instalado y funciona correctamente. Básicamente ejecuta un contenedor llamado //hello-worl// que se ejecuta sobre nuestra máquina y muestra un mensaje. Si todo sale bien significa que nuestra instalación de Docker funciona sin problemas.+Una vez hayamos descargado [[http://www.docker.com|Docker]] para su instalación, podemos ejecutar el siguiente comando para comprobar que todo se ha instalado y funciona correctamente. Básicamente ejecuta un contenedor llamado //hello-world// que se ejecuta sobre nuestra máquina y muestra un mensaje. Si todo sale bien significa que nuestra instalación de Docker funciona sin problemas.
  
 <code bash> <code bash>
Line 45: Line 47:
 </code> </code>
  
-==== Imágenes ====+===== Imágenes =====
  
 Las imágenes son una serie de capas software que definen la estructura que tendrá el contenedor que se cree a partir de ella. Las imágenes son una serie de capas software que definen la estructura que tendrá el contenedor que se cree a partir de ella.
  
-=== Crear una imagen ===+==== Crear una imagen ====
  
 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 ''Dockerfile'' como el siguiente. En nuestro caso hemos definido que queremos una máquina con soporte para PHP 7.0 y que disponga de un servidor web Apache. Además, se copiará el contenido de nuestra carpeta ''src'' (imaginemos que tenemos alli código PHP que queremos probar) a la carpeta ''/var/www/html'' del contenedor, que es justo la carpeta donde se copia el contenido que queremos que Apache sirva. 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 ''Dockerfile'' como el siguiente. En nuestro caso hemos definido que queremos una máquina con soporte para PHP 7.0 y que disponga de un servidor web Apache. Además, se copiará el contenido de nuestra carpeta ''src'' (imaginemos que tenemos alli código PHP que queremos probar) a la carpeta ''/var/www/html'' del contenedor, que es justo la carpeta donde se copia el contenido que queremos que Apache sirva.
Line 57: Line 59:
 COPY src /var/www/html COPY src /var/www/html
 </file> </file>
 +
 +De esta forma tendremos una carpeta cuyo contenido será el fichero ''Dockerfile'' que acabamos de crear y la carpeta ''src'' con el sitio web que queremos probar
 +
 +<code bash>
 +santi@zenbook:$ ls
 +Dockerfile src
 +</code>
  
 A continuación, ya podemos crear la imagen, ejecutando el siguiente comando, donde aprovechamos para etiquetarla como ''miapache-php'': A continuación, ya podemos crear la imagen, ejecutando el siguiente comando, donde aprovechamos para etiquetarla como ''miapache-php'':
Line 78: Line 87:
 cddaac5f61ab: Pull complete  cddaac5f61ab: Pull complete 
 1d7adb8f245d: Pull complete  1d7adb8f245d: Pull complete 
-Digest: sha256:917ceda30c70ebb682536a1f091f25a8364d61c72c332396e8331feef389128a+Digest: sha256:917ceda30c70ebb682536a1f091f25a8364d61c72c3323. . .
 Status: Downloaded newer image for php:7.0-apache Status: Downloaded newer image for php:7.0-apache
  ---> b123b973e3e8  ---> b123b973e3e8
Line 100: Line 109:
 Podemos ver como ha arracando un servidor web Apache y, por el mapeo de puertos que hemos establecido, podemos visitar la URL ''http://localhost:5555'' para visitar el sitio web. Podemos ver como ha arracando un servidor web Apache y, por el mapeo de puertos que hemos establecido, podemos visitar la URL ''http://localhost:5555'' para visitar el sitio web.
  
-=== Listar las imágenes locales ===+==== 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. 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.
Line 112: Line 121:
 </code> </code>
  
-=== Eliminar una imagen ===+==== Eliminar una imagen ====
  
 Si no necesitamos una imagen, y ésta no tiene contenedores creados, podemos eliminarla del sistema. Si no necesitamos una imagen, y ésta no tiene contenedores creados, podemos eliminarla del sistema.
Line 124: Line 133:
 </code> </code>
  
-==== Contenedores ====+===== Contenedores =====
  
-=== Lanzar un contenedor ===+==== Lanzar un contenedor ====
  
-Como ya hemos visto un poco más arriba, el comando ''docker run'' crea y lanza un contenedor a partir de una imagen dada. En el caso anterior utilizabamos una imagen previamente preparada y descargada. Ahora veremos como también podemos lanzar contenedores indicando la imagen que queremos usar (por ejemplo una imagen de [[https://hub.docker.com|Hub de Docker]] que contiene una máquina debian) directamente. Docker se encargará de descargar la imagen y, posteriormente, lanzará el contenedor.+Como ya hemos visto un poco más arriba, el comando ''docker run'' crea y lanza un contenedor a partir de una imagen dada. En el caso anterior utilizabamos una imagen previamente preparada y descargada. A la imagen la habiamos llamado //miapache-php// y podíamos utilizar ese nombre para lanzar un contenedor. Además, al lanzar el contenedor mapeabamos el puerto 80 del contenedor con el puerto 5555 de nuestra máquina. 
 + 
 +<code bash> 
 +santi@zenbook:$ docker run -p 5555:80 miapache-php 
 +</code> 
 + 
 +Ahora veremos como también podemos lanzar contenedores indicando una imagen de la que todavía no disponemos (por ejemplo una imagen de [[https://hub.docker.com|Hub de Docker]] que contiene una máquina debian). Docker se encargará de descargar la imagen y, posteriormente, lanzará el contenedor. Además, al final del comando pasaremos como argumento el comando que queremos que docker ejecute sobre el contenedor en cuanto este inicie. En este caso queremos iniciar una sesión de ''bash''.
  
 <code bash> <code bash>
Line 175: Line 190:
 </code> </code>
  
-=== Listar los contenedores en ejecución ===+==== Listar los contenedores en ejecución ====
  
 Si dejamos el contenedor en marcha y lanzamos el comando ''docker ps'' desde otra consola podremos ver como el contenedor se encuentra en ejecución. Si dejamos el contenedor en marcha y lanzamos el comando ''docker ps'' desde otra consola podremos ver como el contenedor se encuentra en ejecución.
Line 185: Line 200:
 </code> </code>
  
-=== Listar todos los contenedores ===+==== Listar todos los contenedores ====
  
 También podemos listar todos los contenedores, estén o no iniciados. También podemos listar todos los contenedores, estén o no iniciados.
Line 196: Line 211:
 </code> </code>
  
-=== Eliminar un contenedor ===+==== Eliminar un contenedor ====
  
 Podemos eliminar un contenedor con el comando ''docker rm'' pasando su ''CONTAINER ID'' como argumento. También podríamos haberle asociado un nombre al crearlo para poder referirnos a él. Lo veremos más adelante. Podemos eliminar un contenedor con el comando ''docker rm'' pasando su ''CONTAINER ID'' como argumento. También podríamos haberle asociado un nombre al crearlo para poder referirnos a él. Lo veremos más adelante.
Line 205: Line 220:
 </code> </code>
  
-=== Detener un contenedor ===+==== Detener un contenedor ====
  
 Y ahora podemos detener y/o volver a iniciar el contenedor refiriéndonos a ella a través del nombre asociado. Y ahora podemos detener y/o volver a iniciar el contenedor refiriéndonos a ella a través del nombre asociado.
Line 214: Line 229:
 </code> </code>
  
-=== Iniciar un contenedor ===+==== 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 El contenedor queda ya asociado y simplemente lo tengo que lanzar con el siguiente comando cada vez que lo quiera poner en marcha
Line 223: Line 238:
 </code> </code>
  
-=== Mostrar la información de un contenedor ===+==== Mostrar la información de un contenedor ====
  
 También podemos mostrar toda la información sobre un contenedor existente También podemos mostrar toda la información sobre un contenedor existente
Line 277: Line 292:
 santi@zenbook:$ docker inspect --format "{{.NetworkSettings.Ports}}{{ .Mounts}}" miapache santi@zenbook:$ docker inspect --format "{{.NetworkSettings.Ports}}{{ .Mounts}}" miapache
 map[80/tcp:[{0.0.0.0 5555}]][{bind  /var/www/unsitioweb /usr/local/apache2/htdocs   true }] map[80/tcp:[{0.0.0.0 5555}]][{bind  /var/www/unsitioweb /usr/local/apache2/htdocs   true }]
 +</code>
 +
 +===== 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:$ docker builder prune
 </code> </code>
  
apuntes/docker.1505907311.txt.gz · Last modified: 2019/01/04 13:02 (external edit)