Docker:Introducción
Docker es una herramienta de gestión de plataforma abierta para contenedores de Linux. Proporciona un medio para que los desarrolladores y administradores de sistemas creen y empaqueten aplicaciones en contenedores ligeros. Docker consta de los siguientes componentes:
- Motor acoplable – Una herramienta de empaquetado y tiempo de ejecución portátil y ligera
- Docker Hub – Un servicio en la nube para compartir aplicaciones y automatizar flujos de trabajo
Docker se utiliza para crear contenedores de aplicaciones basados en imágenes. Los contenedores basados en imágenes empaquetan una aplicación con la pila de tiempo de ejecución individual en un solo contenedor. Esto hace que el contenedor sea independiente del sistema operativo host y la versión del kernel. Como resultado, puede ejecutar la misma aplicación, sin cambios, en computadoras portátiles, máquinas virtuales de centros de datos y cualquier nube. Puede transferir este contenedor a otra máquina que ejecute Docker y ejecute la aplicación sin ningún problema de compatibilidad.
A continuación, se enumeran las ventajas adicionales de ejecutar aplicaciones en contenedores Docker:
- Las imágenes de Docker contienen solo el contenido necesario para ejecutar una aplicación, por lo que son más pequeñas que las máquinas virtuales, que requieren todo el sistema operativo.
- Un contenedor Docker se ejecuta más rápido que una aplicación que incluye la sobrecarga de una máquina virtual completa.
- Un contenedor Docker incluye sus propias interfaces de red, sistema de archivos y memoria, lo que permite aislar y proteger la aplicación que se ejecuta en el contenedor de otros procesos en la computadora host.
Imágenes acoplables
Los contenedores de Docker se crean a partir de imágenes de Docker. Usted crea contenedores de Docker para ejecutar sus aplicaciones desde estas imágenes de Docker. El siguiente ejemplo crea un contenedor de Docker llamado "prueba" a partir de una imagen de Docker llamada centos:7" y ejecuta /bin/bash.
# docker create --name test centos:7 /bin/bash Unable to find image 'centos:7' locally Trying to pull repository docker.io/library/centos ... 7: Pulling from docker.io/library/centos 469cfcc7a4b3: Pull complete Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:7 a79ce1655f2ca17c7ac8cc15f307ba0bb438fbebd4595568df3433dd5ff79b73
Las imágenes son plantillas de solo lectura que pueden contener un sistema operativo completo con servicios y aplicaciones adicionales instaladas. Docker proporciona las capacidades para crear imágenes o actualizar imágenes existentes. Puede crear imágenes de Docker desde la línea de comandos o puede almacenar las instrucciones para crear una imagen en un Dockerfile. Docker lee este Dockerfile y ejecuta las instrucciones cuando inicia la compilación de una imagen de Docker.
Cada imagen parte de una imagen base (por ejemplo, centos). Cada imagen de Docker consta de una serie de capas que se construyen a partir de estas imágenes base. Cada instrucción en el Dockerfile crea una nueva capa en la imagen. Cada vez que realiza un cambio en una imagen de Docker, solo se actualiza o agrega esa capa. Docker usa unionfs para combinar estas capas en una sola imagen. El servicio del sistema de archivos unionfs permite superponer archivos y directorios de sistemas de archivos separados en un solo sistema de archivos.
Después de crear una imagen de Docker, puede compartir las imágenes almacenándolas en los registros de Docker. Estos registros pueden ser privados o públicos. Docker Hub es el registro público de Docker que actúa como una plataforma de software como servicio para compartir y administrar contenedores de Docker.
Cómo instalar Docker en CentOS / RHEL / FedoraCómo instalar Docker en Mac
El registro de Docker Hub
Docker Hub Registry aloja aplicaciones como imágenes de Docker y brinda servicios que le permiten crear y administrar un entorno de Docker. Docker Hub Registry es propiedad y está mantenido por Docker, Inc. y se encuentra en https://registry.hub.docker.com/.
Docker Hub proporciona varios repositorios y cada repositorio puede contener varias imágenes. Además de alojar imágenes de Docker, Docker Hub proporciona servicios como la autenticación de usuarios, creación de imágenes automatizadas y herramientas de flujo de trabajo, e integración con GitHub y BitBucket. Para utilizar estos servicios de Docker, debe crear una cuenta de Docker Hub. Puede crear una cuenta en https://hub.docker.com/account/signup/. También puede crear una cuenta desde la línea de comandos usando el siguiente comando:
# docker loginCómo crear un repositorio público/privado en Docker Hub y conectarlo de forma remota mediante la línea de comandos
Puede buscar imágenes de Docker y extraer (descargar) imágenes de Docker Hub sin tener una cuenta. Para insertar (cargar) imágenes, dejar comentarios en una imagen o repositorio y utilizar todos los servicios de Docker Hub disponibles, necesita una cuenta de Docker Hub.
Instalación e inicio de Docker
Instalar e iniciar el servicio docker es una tarea fácil. Puede usar el siguiente comando para instalar el paquete docker:
# yum install docker
Use el comando systemctl para habilitar e iniciar el servicio docker.
# systemctl enable docker # systemctl start docker
De forma predeterminada, Docker usa devicemapper como controlador de almacenamiento. Con RedHat Linux 7, puede configurar Docker Engine para usar Btrfs. Esto le permite aprovechar las funciones de instantáneas de Btrfs. El siguiente comando muestra todos los archivos que se instalan desde el paquete docker:
# rpm -ql docker /etc/docker /etc/docker/certs.d /etc/docker/certs.d/redhat.com /etc/docker/certs.d/redhat.com/redhat-ca.crt /etc/docker/certs.d/redhat.io /etc/docker/certs.d/redhat.io/redhat-ca.crt ...
Puede ver que, además de los archivos binarios y de configuración de la ventana acoplable, la documentación y las páginas man están instaladas para todos los comandos de la ventana acoplable. El directorio /var/lib/docker está vacío hasta que se inicia el servicio docker. La siguiente serie de comandos muestra el contenido del directorio antes y después de iniciar Docker.
# ls /var/lib/docker # systemctl enable docker # systemctl start docker # ls /var/lib/docker containers graph linkgraph.db tmp volumes devicemapper init repositories-devicemapper trust
La utilidad Docker
La interfaz de línea de comandos de Docker tiene más de 30 comandos. Consulte la página del manual de docker para obtener una lista de los comandos. El comando docker info muestra información de todo el sistema sobre la instalación de Docker. Consulte la página man de docker-info para obtener más información. Tenga en cuenta que el controlador de almacenamiento predeterminado es devicemapper y que los datos y metadatos se almacenan en dispositivos de bucle:/dev/loop0 y /dev/loop1.
# docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 1.13.1 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: false Native Overlay Diff: true Logging Driver: journald ...
Los usuarios que no sean root pueden ejecutar comandos docker si los agrega al grupo docker y reconfigura el servicio docker.
Buscar imágenes en el registro de Docker Hub
Utilice el comando de búsqueda de Docker para buscar imágenes en Docker Hub. A continuación se muestra el resultado del comando "búsqueda acoplable":
# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 52 [OK] docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK] ...
Este comando busca imágenes "centos" en Docker Hub. El resultado incluye el nombre del repositorio/imagen, una descripción, la cantidad de estrellas otorgadas, si la imagen es oficial y si está automatizada. La columna de nombre tiene el siguiente formato y puede incluir el repositorio contenedor para proporcionar una identificación única:
[repository_name]/[image_name]
Las estrellas miden la popularidad de las imágenes. Cualquier persona con una cuenta de Docker Hub puede "destacar" una imagen si le gusta. El siguiente ejemplo busca imágenes de "centos" con al menos 3 estrellas:
# docker search -s 3 centos Flag --stars has been deprecated, use --filter=stars=3 instead INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] ...
Un repositorio "oficial" está certificado por un proveedor o colaborador de Docker. El proceso de creación automatizado de Docker Hub crea una imagen "automatizada".
Descarga de imágenes desde Docker Hub
Utilice el comando "docker pull" para descargar una imagen o un repositorio desde Docker Hub Registry a su sistema local. El siguiente ejemplo muestra la imagen centos:latest.
# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:latest
Utilice el comando "imágenes acoplables" para enumerar las imágenes almacenadas en el repositorio local de Docker.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB
Cada imagen en un repositorio se distingue por ETIQUETA e ID DE IMAGEN.
A continuación se muestra la ubicación de los archivos de configuración de la ventana acoplable.
# cd /var/lib/docker/ # ll total 4 drwx------. 3 root root 77 Apr 21 07:57 containers drwx------. 3 root root 21 Apr 21 07:56 image drwxr-x---. 3 root root 18 Apr 21 07:56 network drwx------. 6 root root 4096 Apr 21 07:57 overlay2 drwx------. 4 root root 30 Apr 21 07:56 plugins drwx------. 2 root root 6 Apr 21 07:56 swarm drwx------. 2 root root 6 Apr 21 07:57 tmp drwx------. 2 root root 6 Apr 21 07:56 trust drwx------. 2 root root 24 Apr 21 07:56 volumesCómo listar/buscar/extraer imágenes de la ventana acoplable en Linux
Ejecución de una aplicación dentro de un contenedor
Utilice el comando docker run para ejecutar una aplicación dentro de un contenedor. Este comando inicia un proceso con su propio sistema de archivos, su propia red y su propio árbol de procesos aislado. La siguiente sintaxis no incluye todas las opciones disponibles para el comando:
# docker run [OPTION...] IMAGE [COMMMAND] {ARG...]
La IMAGEN que inicia el proceso puede definir valores predeterminados relacionados con el proceso que se ejecutará en el contenedor, la red y más, pero las opciones de ejecución de la ventana acoplable anulan la configuración en la IMAGEN. Si la IMAGEN no está disponible localmente, la ejecución de la ventana acoplable extrae la imagen de la misma manera que el comando de extracción de la ventana acoplable antes de iniciar el contenedor en la IMAGEN.
A continuación se muestran dos ejemplos del uso de docker run. El primer ejemplo usa la imagen "centos", que ya existe en la máquina local. Docker usa la imagen para crear un nuevo entorno CentOS y luego ejecuta el comando echo para mostrar "Hola".
# docker run centos /bin/echo "Hello" Hello
El segundo ejemplo usa la imagen de fedora, que no está presente en el sistema local. Docker extrae la imagen de Docker Hub y luego usa la imagen para crear un nuevo entorno de Fedora y ejecuta el comando echo.
# docker run fedora /bin/echo "Hello" Unable to find image 'fedora:latest' locally Trying to pull repository docker.io/library/fedora ... latest: Pulling from docker.io/library/fedora 2176639d844b: Pull complete Digest: sha256:ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467 Status: Downloaded newer image for docker.io/fedora:latest Hello
En ambos ejemplos, los contenedores de Docker se detienen después de que se muestra "Hola" en la pantalla. Use el comando docker ps para enumerar contenedores y no se muestran contenedores:
# docker ps
Eso es porque "docker ps" solo muestra los contenedores que se están ejecutando actualmente. Para mostrar todos los contenedores, incluidos los detenidos, utilice el comando "docker ps -a".
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b772ea59c92 fedora "/bin/echo Hello" 25 seconds ago Exited (0) 23 seconds ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" About a minute ago Exited (0) About a minute ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
El comando de imágenes de docker muestra que la imagen "más reciente" del repositorio "fedora" se descargó de Docker Hub al usar el comando de ejecución de docker:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB docker.io/fedora latest 9110ae7f579f 6 weeks ago 235 MB
Ejecución de un contenedor Docker interactivo
Usa la –t y –yo opciones con el comando docker run para ejecutar un contenedor interactivo. Estas opciones se describen:
- -t :Asignar un pseudo-tty y adjuntarlo a STDIN (entrada estándar) de un contenedor
- -yo :Mantenga STDIN de un contenedor abierto
A continuación se muestran dos ejemplos del uso de los comandos de ejecución de la ventana acoplable con las opciones –t e –i. En ambos ejemplos, CentOS Linux 7.4 se ejecuta en el sistema local:
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
El primer ejemplo utiliza la imagen “centos:7”. Docker usa la imagen para crear un nuevo entorno CentOS y luego ejecuta el comando bash shell. La versión del sistema operativo de esta imagen es CentOS 7.
# docker run -t -i centos:7 /bin/bash [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
El segundo ejemplo usa la imagen de ubuntu. Debido a que no se especificó una imagen específica, Docker usa la imagen de Ubuntu "más reciente" para crear un nuevo entorno de Ubuntu y luego ejecuta el comando bash shell. La versión del sistema operativo de esta imagen es Ubuntu 16.04.4. Además, como la imagen de ubuntu no está disponible localmente, Docker primero la descargará del repositorio y luego la ejecutará.
# docker run -t -i ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu d3938036b19c: Pull complete a9b30c108bda: Pull complete 67de21feec18: Pull complete 817da545be2b: Pull complete d967c497ce23: Pull complete Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c Status: Downloaded newer image for docker.io/ubuntu:latest
root@9ee24718262c:/# cat /etc/os-release NAME="Ubuntu" VERSION="16.04.4 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.4 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Puede usar el comando de salida o presionar CTRL + D para salir de un contenedor interactivo.
Listado de contenedores y visualización de registros de contenedores
Utilice el comando docker ps para mostrar información sobre los contenedores de Docker. De forma predeterminada, solo se enumeran los contenedores en ejecución. Incluya el –a opción con el comando docker ps para mostrar todos los contenedores. La salida incluye un ID de contenedor único y un nombre de contenedor único que se generan automáticamente cuando se crea el contenedor. La salida del comando docker ps también incluye la imagen que se usó para crear el contenedor, el comando que se ejecuta en el contenedor y la información de estado. La información de estado incluye cuándo se creó el contenedor y cuánto tiempo se ha estado ejecutando.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ee24718262c ubuntu "/bin/bash" 3 minutes ago Exited (127) 2 seconds ago modest_turing b3e1316c4653 centos:7 "/bin/bash" 6 minutes ago Exited (0) 4 minutes ago gracious_pare 7b772ea59c92 fedora "/bin/echo Hello" 18 minutes ago Exited (0) 18 minutes ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" 19 minutes ago Exited (0) 19 minutes ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
El comando docker logs mira dentro del contenedor y devuelve su salida estándar. Puede usar el ID del contenedor o el nombre del contenedor como argumento para el comando.
# docker logs b3e1316c4653 [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@b3e1316c4653 /]# exit exit
En el ejemplo anterior, el comando docker logs muestra que el comando "cat /etc/redhat-release" se ejecutó en el contenedor. Los comandos docker ps y docker logs deben ejecutarse desde fuera del contenedor, es decir, desde otra ventana de terminal.
Mostrar toda la información de un contenedor o una imagen
Use el comando docker inspect para ver toda la información disponible para un contenedor o una imagen. El siguiente ejemplo muestra parte de la información que se muestra. Usa la –f {{.section.subsection}} opción para mostrar una pieza específica de información. El siguiente ejemplo muestra solo la configuración de red:
# docker inspect -f {{.NetworkSettings}} modest_turing {{ 98e04ea6d68753022ae2212b06b1514323927a1ed117448bc70ea3fa9a2f4a06 false 0 map[] /var/run/docker/netns/98e04ea6d687 [] []} { 0 0 } map[bridge:0xc4200c0300]}
El siguiente ejemplo muestra la dirección IP:
# docker inspect -f {{.NetworkSettings.IPAddress}} modest_turing 172.17.0.10
El siguiente ejemplo muestra el ID del proceso:
# docker inspect -f {{.State.Pid}} modest_turing 7181
El siguiente ejemplo muestra el comando ejecutándose en el contenedor:
# docker inspect -f {{.Config.Cmd}} modest_turing [/bin/bash]
Si desea ver todas las opciones/propiedades del contenedor, no use ninguna opción con "docker inspect":
# docker inspect modest_turing [ { "Id": "9ee24718262c9f7ed3320019163a8b1b2bb1bccc83eb362a5512a74eaa4ad57f", "Created": "2018-04-21T12:22:21.983441857Z", "Path": "/bin/bash", "Args": [], "State": { ....
Esta será una salida bastante larga que mostrará todas las propiedades del contenedor.
Creación de un nuevo contenedor
El comando docker run ejecuta un proceso en un nuevo contenedor. También puede usar el comando docker create para crear un contenedor que puede iniciar más adelante. La sintaxis y las opciones disponibles para la creación de la ventana acoplable son similares a la sintaxis de ejecución de la ventana acoplable.
El siguiente ejemplo crea un nuevo contenedor llamado "geeklab" a partir de la imagen de centos:7 y, cuando se inicia, ejecuta el comando bash shell. Se genera automáticamente un nombre de contenedor si omite la opción –name.
# docker create -t -i --name geeklab centos:7 /bin/bash 667fd40faeb69113d035f08e5a910275a8463aa2a6a0796833f590e878732e17
El resultado del comando es un ID de contenedor único muy largo. El contenedor no se inicia inmediatamente como lo muestra el comando docker ps, que solo muestra los contenedores en ejecución de forma predeterminada:
# docker ps
Debe ejecutar "docker ps -a" para mostrar todos los contenedores. El ejemplo canaliza la salida a grep y busca parte del ID del contenedor:
# docker ps -a | grep 667fd 667fd40faeb6 centos:7 "/bin/bash" About a minute ago Created geeklab
Iniciar, detener y eliminar un contenedor
Use el "inicio de la ventana acoplable Comando para iniciar un contenedor existente. Usa el –a y –yo opciones para adjuntar STDIN (entrada estándar), STDOUT (salida estándar) y STDERR (error estándar) del shell actual al contenedor y también hacer que todas las señales se reenvíen al contenedor.
# docker start -a -i geeklab [root@667fd40faeb6 /]#
Desde dentro de un contenedor, use el comando de salida o CTRL-d para detener el contenedor. Desde fuera del contenedor, es decir, desde otra ventana de terminal, use el comando docker stop para detener un contenedor.
# docker stop geeklab
Use el “docker rm ” comando para eliminar un contenedor. Puede eliminar varios contenedores en un solo comando. Usa la –f opción para eliminar un contenedor en ejecución.
# docker rm geeklab geeklab
Estos tres comandos docker aceptan el ID del contenedor o el nombre del contenedor como argumento.
El comando docker rm elimina un contenedor. Utilice el comando docker rmi para eliminar una imagen:
# docker rmi [IMAGE]Cómo listar/iniciar/detener/eliminar contenedores docker
Ejecución de comandos adicionales en un contenedor en ejecución
Utilice el comando docker exec para ejecutar un comando en un contenedor en ejecución. De forma similar al comando de ejecución de la ventana acoplable, incluya las opciones –t e –i para ejecutar un comando interactivo. Proporcione el ID del contenedor o el nombre del contenedor como argumento.
En el siguiente ejemplo, el comando docker exec inicia un nuevo shell bash interactivo en el contenedor "invitado":
# docker exec -t -i geeklab /bin/bash [root@68b5b713c37b /]#
El siguiente ejemplo usa el comando docker exec para iniciar el servicio sshd en el contenedor "geeklab". El contenedor "geeklab" ejecuta CentOS 6.4. En este ejemplo, las opciones -t e -i no son necesarias.
# docker exec guest service sshd start Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ]
El servicio sshd se inicia en el contenedor y el control vuelve al sistema host de inicio.