Usuario:ManuelRomero/ProgramacionWeb/Docker/contenedorVsImagen
Contenido
Contenedor Vs Imagen
- Este es un concepto importante que puede quedar claro si vemos la imagen anterior
- La imagen es el fichero que nos va a permir instalar esta especie de máquina virtual.
- Podríamo 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 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.
- Lo bueno que tiene docker es que 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. En la sección siguiente realizaremos estas acciones.
- Tenemos diferentes formas de crear un contenedor a partir de una imagen:
- comando run
- fichero DockerFile
- A continuación veremos las dos formas
Registros de imágenes
Recursos de la Web- https://hub.docker.com/ Sitio oficial de imágenes
- https://docs.docker.com/registry/ Sitio oficial donde explican el uso de los registro, principal fuente para este wiki
- Un registro es un sistema de almacenamiento de imágenes de docker dónde se pueden subir y bajar imágenes.
- Para que el usuario interactúe con el registro, necesita dos comandos
pull => Obtener una imagen del registro a tu sistema.
push => Subir una imagen al registro.- Lo habitual es usar el registro oficial llamado docker hub
- También podremos, por rapidez, crear un registro local y que sea éste el que responda a las solicitudes de nuestra red; ésto claramente ahorra tiempo y no colapsará la red externa.
Ejemplodocker pull ubuntu
- Es una solicitud de la imagen ubuntu del sitio oficial de imágenes de docker o [https://hub.docker.com/
El nombre de la imagen identifica su origen o registro del que se obtiene. </parrafo>Acciones concretas
- Crear un contenedor a partir de una imagen del repositorio
1.-A partir de la imagen ubuntu:latest
2.-El contenedor que se quede activo disponible interactivamente -ti
3.-El nombre del contenedor lop doy explícito -name idioma
4.-La crearemos con un volumen mapeando el directorio /var/www/html del contenedor con /var/www/idioma de mi anfitrión -v /var/www/html:/var/www
Crear un contenedor
- Se puede crear de diferentes formas
- run. Con este comando es la forma mas básica de crearlo
- Dockerfile: Se crea el fichero y con el comando built podemos construir un contenedor a partir de la especificación del fichero
- docker.compose.yml, un fichero que me va a permitir crear/levantar varios contenedores especificando todas mis necesidades
sudo docker run --name idioma -v /var/www/idioma:/var/www/html -ti ubuntu:latest
- Verificamos que se han creado los dos directoris (tanto el anfitrión (idioma) como en el contenedor (www/html)
- En el contenedor
- En el anfitrión
- Mira los permisos (lo ha creado docker, docker siempre actúa como root)
- los modificamos
sudo apt-get chown manuel:www-data /var/www/idioma
- para ver más opciones disponibles
sudo docker help run
- Ver los contenedores del sistema
sudo docker ps -a
- Ver los las imágenes del sistema
sudo docker images
- Modificar un contenedor
- Una vez abierto el contenedor podemos proceder a instalar cosas.
- Para la práctica necesitamos instalar una serie de paquetes (si necesitamos más los ponemos)
Paquetes a instalar
- apache y php
apt-get install apache2 php libapache2-mod-php
- gettext (luego comentaremos)
Paquetes a instalar
- net-tools y vim
- Estos paquetes los instalo para poder ver la ip y como editor
apt-get install net-tools vim
Tip: Si tenemos dudas podemos mirar el apartado de instalación del primer tema del curso, también si queremos instalar java, xdebug u otros paquetes
- Crear una imagen en local a partir de un contenedor
- Igual que en git,
docker [opciones] nombre_container [nombre_img:tag]
docker commit -m "Con webservice" -a "Manuel Romero<dir@dom.com>" idioma img_idioma:v1
- Y vemos cómo se ha creado
Arrancar un contenedor
- Una vez cerrado el contenedor (no parado), éste sigue estando disponible
- Una vez que cerremos el contenedor, mientras no lo destruyamos, podremos disponer de él, aunque apaguemos la máquina, digamos que se queda pausado
- Crear una imagen en local a partir de un contenedor
- Para usarlo hay que realizar dos acciones
~ ➭ docker start dwes dwes ~ ➭ docker exec -ti dwes /bin/bash root@496b9ba15066:/#
- Crear un contenedor a partir de una imagen en local
- Con el comando run, pero especificando la imagen local
- Crear un contenedor con un volumen lógico a partir de una imagen en local
- Para ello usamos el parámetro -v
docker run --name nombre_contenedor_nuevo -v /var/www/iternova:/var/www -dti nombre_imagen
Realziar una copia de un contenedor en un fichero
- Podemos hacerlo de diferentes maneras. una sencilla es usar el comando export / import
Archivo:Export docker.png Archivo:Import docker.png
Exportar e Importar
- Exportar
- Se exportará un contenedor a una imagen y se almacenará en un fichero tar.
- De esta forma la imagen contendrá todos los servicios instalados en el contenedor.
- Recordad que los contendios de los volúmenes no forman parte del contenedor, aunque se pueda acceder desde ellos. Físicamente estarán en el directorio especificado en el volumen de la máquina anfitriona.
- Importar
- Se importará una imagen a partir de un fichero tar que la contiene
- Una vez importada la imagen podremos crear un contenedor con los parámetros que consideremos.
- El contenedor creado, contendrá todos los servicios que tenía el contenedor a partir del cual se creó la imagen en el fichero tar (contenedor que exportamos previamente).
Pasos a seguir para importar una imagen2.- Importar la imagen
docker import nombre.tar nombre_imagen:tag
- Esto nos creará una imagen que la llamamos como consideremos a partir del fichero nombre.tar
- Ahora podemos comprobar que tenemos la imagen
docker images
- Ahora podemos crear un contendor, por ejemplo siguiendo con la clase
docker run --name nombre_contenedor_que_creo -v c:\Users\web:/var/www/html -p 80:80 -dti nombre_imagen:tag
- Plantilla:Docker/comandosImágenes
- Plantilla:Docker/comandosContenedor
- Plantilla:Docker/volumenesYCopiarContenedorHost
Docker composerhttps://medium.com/@carlos.compains/creando-un-entorno-de-desarrollo-con-docker-a56790af6271
Dockerfile
Referencia de DockerFilehttps://docs.docker.com/engine/reference/builder
- Hasta ahora hemos creado un contenedor a partir de una imagen usando el comando run
- Una vez que tenemos el contenedor le agregamos los servicios que necesitamos
- Para no perder el trabajo, de ese contenedor creamos una imagen y ya lo tenemos disponible para crear nuevos contenedores con todos los servicios instalados
- Es un fichero de texto, que me permite crear una imagen a partir de otra, y añadir una serie de comandos para instalar a esa imagen, aplicaciones, servicios, librerías diversas con el objetivo de construirme una imagen para lanzar un contenedor personalizado a mis necesidades.
- Una vez creado el fichero, lo ejecutaremos y crearemos la imagen con el comando buld
- Si el fichero está en el directorio actual, lo ejecutaremos con el comando punto
- Para ejecutar la máquina ejecutamos
docker build .
- Estructura del fichero
# comentarios INSTRUCCIONES argumentos
En un fichero dockerfile tendremos dos tipos de líneas
- comentarios (líneas que empiezan por #)
- Sentencias líneas que tiene una instrucción con una serie de argumentos para ejecutarlas
- Por se recomienda poner las instrucciones en mayúsculas
Instrucciones
- FROM
FROM <imagen> FROM <imagen>:<tag> FROM <imagen>@<digest>
- Es la primera instrucción
- Especifica la imagen base de la que parte la instalación que queremos hacer
- En esta página puedes encontrar imágenes base de las cuales partir (hay miles)
- En el FROM se puede especificar de forma opción el tag o digest (sirve para especificar la imagen, como por ejemplo la versión).
- Lo primero que tenemos que especificar es la imagen de la que partimos instruccion FROM
Ejemplo
;imagen en base a ubuntu 14.04 FROM ubuntu:14.04
;imagen en base a debian FROM debian:stable
- MAINTAINER
MAINTAINER <name>
- Especifica el autor de la imagen y su correo
MAINTAINER Manuel Romero <ManuelRomeroMiguel@gmail.com>
- RUN
RUN <command> RUN ["ejecutable", "parametro1", "parametro2"]
- Ejecuta cualquier comando en la imagen que estamos usando. El resultado de la ejecución se puede tomar para el siguiente paso en el dockfile, por ejemplo si ejecuto la instalación de apache, en el siguiente comando puedo contar que apache ya está instalado
- Es un comando muy utilizado.
- Si usamos apt-get install especificaremos el flag -y para que no haga falta que sea interactivo y tome la decisión por defecto
- Añadimos a nuestro fichero las siguientes librerías
#Ahora empezamos a instalar todos los paquetes necesarios ==Otros aspectos== *Instalar un contenedor como un servicio https://blog.marcnuri.com/docker-configurando-contenedor-servicio-linux/ https://onthedock.github.io/post/170920-autoarranque-de-contenedores/ </div>