Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
linux:docker:start [13/02/2020 13:19] – mate | linux:docker:start [13/02/2020 13:26] (actual) – mate | ||
---|---|---|---|
Línia 1: | Línia 1: | ||
- | = DOCKER | + | = docker (first contact) |
- | {{tag>linux docker}} | + | {{tag> |
+ | == un poco de historia | ||
+ | * docker monta un sistema de containerización que permite lanzar nuevas instancias de S.O. aprovechando los recursos (hard) de la máquina Y el kernel del SO ya corriendo, lo que hace más óptimo el aprovechamiendo de recursos que las máquinas virtuales (que recrean un ordenador al completo, con sus propios kernels y sistemas de ficheros) | ||
+ | * Se basa en la tecnología LXC (LinuX Containers) presente en el kernel desde la versión 3.8 | ||
+ | * Grandes beneficios: | ||
+ | * portabilidad de aplicaciones | ||
+ | * aislamiento de procesos | ||
+ | * prevenir la fragilidad del exterior | ||
+ | * manejo de recursos | ||
+ | * Partes de funcionamiento de Docker: | ||
+ | * docker daemon | ||
+ | * docker CLI | ||
+ | * docker image index | ||
+ | * Elementos de Docker: | ||
+ | * contenedores | ||
+ | * imágenes | ||
+ | * dockerfiles | ||
- | {{topic>docker& | + | == enlaces de interés |
+ | * docs docker: | ||
+ | - [[https:// | ||
+ | - [[https:// | ||
+ | - [[https:// | ||
+ | - [[https:// | ||
+ | - [[https:// | ||
+ | * otros enlaces de la red (básicos) | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | * más enlaces (más avanzados) | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | == instalación | ||
+ | - Asegurarse que disponemos de https y certificados en APT:< | ||
+ | - Añadir clave GPG de los repositorios DOCKER: <code bash>$ sudo apt-key adv --keyserver hkp:// | ||
+ | - Añadir un nuevo repositorio en ''/ | ||
+ | - Actualizar información respositorios, | ||
+ | - Añadir nuestro usuario al grupo de DOCKER para poder trabajar sin SUDO:< | ||
+ | - Refrescamos el grupo para poder trabajar sin cerrar sesión (este comando hace de docker nuestro grupo principal durante la sesión):< | ||
+ | == imágenes | ||
+ | Las imágenes son las plantillas a partir de las cuales creamos los contenedores de trabajo (como instanciar el objeto de una clase en OOP) | ||
+ | |||
+ | existe en [[https:// | ||
+ | |||
+ | * para buscar imágenes disponibles en contenedores:< | ||
+ | * para descargar una imagen: <code bash>$ docker pull < | ||
+ | * para ver las imágenes descargadas: | ||
+ | * para borrar una imagen: <code bash>$ docker rmi < | ||
+ | * añadir tag a imagen (crea copia de la imagen):< | ||
+ | |||
+ | Pendiente: | ||
+ | * <code bash>$ docker images --digest | head</ | ||
+ | |||
+ | |||
+ | == contenedores | ||
+ | El contenedor (en el principio de su existencia) coge la referencia de una imagen y se crea. | ||
+ | |||
+ | Se pueden crear tantos contenedores de la misma imagen como se precisen | ||
+ | |||
+ | === mantenimiento (de contenedores) | ||
+ | * listar todos los contenedores existentes:< | ||
+ | * listar todos los contenedores activos:< | ||
+ | * listar los últimos contenedores creados:< | ||
+ | * parar un contenedor: <code bash>$ docker stop < | ||
+ | * borrar un contenedor (no ha de estar en funcionamiento): | ||
+ | * convertir un contenedor en imagen: <code bash>$ docker commit -m "< | ||
+ | |||
+ | el nombre del contenedor puede ser su CONTAINER_ID o si NAME (según aparece en el listado generado con el comando correspondiente) | ||
+ | |||
+ | === ejecución | ||
+ | * crear (si no existe) y ejecutar en modo interactivo (i) con pseudoterminal (t):< | ||
+ | * ejecutar en modo interactivo, | ||
+ | * poner en marcha un contenedor: <code bash>$ docker start < | ||
+ | * poner en marcha contenedor como demonio (-d), mapeo de puerto y ejecución de comando:< | ||
+ | * poner en marcha contenedor con nombre propio:< | ||
+ | * poner en marcha contenedor mapeando los puertos aleatoriamente (se consulta en '' | ||
+ | * acceder a un contenedor en marcha: <code bash>$ docker attach < | ||
+ | * salir de un contenedor (detach), haciendo que continue funcionando: | ||
+ | * abrir un terminal en un contenedor:< | ||
+ | |||
+ | === funcionamiento | ||
+ | * mostrar la salida (STDOUT) de un contenedor, con watch (estilo '' | ||
+ | * mostrar procesos de un contenedor:< | ||
+ | * información del contenedor en formato JSON:< | ||
+ | * recoger una clave del JSON:< | ||
+ | |||
+ | === networking | ||
+ | Por defecto, el motor de docker crea una serie de redes para trabajar con los contenedores: | ||
+ | * host | ||
+ | * bridge | ||
+ | |||
+ | también existen los drivers '' | ||
+ | |||
+ | Aunque permite crear propias y añadir contenedores a ellas para que se hablen de manera aislada | ||
+ | |||
+ | |||
+ | * mostrar redes de docker:< | ||
+ | * inspeccionar red:< | ||
+ | * desconectar contenedor de una red:< | ||
+ | * mapear puerto del contenedor, devuelve puerto de máquina local:< | ||
+ | * crear red propia (tipo bridge, flag -d): <code bash> | ||
+ | * ejecutar contenedor con una red propia:< | ||
+ | * añadir contenedor en marcha a una red propia:< | ||
+ | * averiguar IP de contenedor:< | ||
+ | |||
+ | |||
+ | === Data Volumes | ||
+ | es un directorio especificado trabajando en UFS((Union File System - [[https:// | ||
+ | * los Volumenes se inicializan al crear el contenedor. Si existe información en el punto de montaje, esta se copiará al Volumen | ||
+ | * los Volumenes se puede compartir y reusar entre contenedores | ||
+ | * los cambios se aplican directamente en los Volumenes | ||
+ | * los cambios en los Volumenes no se aplican cuando se actualiza una imagen | ||
+ | * los Volumenes no son destruidos al destruir el contenedor que los usa | ||
+ | * se puede acceder a los volúmenes creados en: ''/ | ||
+ | |||
+ | |||
+ | * añadir un Volumen anónimo a un contenedor "al vuelo":< | ||
+ | * añadir un Volumen anónimo a un contenedor "al vuelo" y borrar todo al salir:< | ||
+ | * crear un Volumen para su posterior uso:< | ||
+ | * " | ||
+ | * [[https:// | ||
+ | * añadir Volumen existente a contenedor:< | ||
+ | * añadir un directorio local en un contenedor, con opción de solo-lectura (ro):< | ||
+ | * añadir fichero local en contenedor: <code bash>$ docker run --rm -it -v ~/ | ||
+ | * crear Volumen usando contenedor y compartir entre varios contenedores. El directorio será ''/ | ||
+ | $ docker run -d --volumes-from dbstore --name db1 training/ | ||
+ | $ docker run -d --volumes-from dbstore --name db2 training/ | ||
+ | $ docker run -d --volumens-from db1 --name db3 training/ | ||
+ | * backup de Volumenes (en host local). Crea un .tar del Volumen /dbdata en el directorio loca en curso. Destruye todo al finalizar:< | ||
+ | * restore de tar:< | ||
+ | $ docker run --rm --volumes-from dbstore2 -v $(pwd):/ | ||
+ | * mostrar Volumenes: <code bash>$ docker volume ls</ | ||
+ | * mostrar Volumenes clgados (huérfanos): | ||
+ | * borrar volúmenes:< | ||
+ | * borrar Volumenes con el borrado del contenedor:< | ||
+ | |||
+ | Pendiente: | ||
+ | * Volume labels | ||
+ | |||
+ | == otros comandos | ||
+ | <code bash>$ docker version</ | ||
+ | <code bash>$ docker info</ | ||
+ | |||
+ | == dockerfiles | ||
+ | los " | ||
+ | |||
+ | formato del dockerfile: | ||
+ | < | ||
+ | FROM ubuntu | ||
+ | MAINTAINER < | ||
+ | ENV http_proxy http:// | ||
+ | ENV https_proxy http:// | ||
+ | RUN apt-get update | ||
+ | RUN apt-get install apache2 -y | ||
+ | RUN echo "< | ||
+ | EXPOSE 80 | ||
+ | ENTRYPOINT apache2ctl -D FOREGROUND | ||
+ | </ | ||
+ | |||
+ | - FROM: imagen base | ||
+ | - MAINTAINER: autor de la imagen | ||
+ | - ENV: variables de entorno en la imagen base | ||
+ | - RUN: ejecuta una sentencia en la imagen base | ||
+ | - EXPOSE: abrimos el puerto especificado en el contenedor para que se pueda mapear desde el anfitrion | ||
+ | - ENTRYPOINT: que se debe ejecutar cada vez que se ejecute el contenedor | ||
+ | |||
+ | <code bash>$ docker build -t < | ||
+ | |||
+ | |||
+ | |||
+ | == repositorio de imágenes | ||
+ | para subir una imagen a los repositorios públicos (Docker Hub) | ||
+ | |||
+ | * autentificación con docker.com:< | ||
+ | * subir imagen a repositorio:< |