GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Guía para principiantes del mundo Docker

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 / Fedora
Có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 login
Có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 volumes
Có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.


Docker
  1. Una guía de la terminal de Linux para principiantes

  2. Qué es un contenedor Docker:una guía introductoria para principiantes

  3. La diferencia entre CMD y ENTRYPOINT en Docker Images

  4. Introducción a las imágenes de Docker

  5. Guía para principiantes de SELinux

Cómo actualizar las imágenes de Docker a la última versión

Docker para Mac:la guía de instalación completa

Cómo instalar y usar Docker en Ubuntu (en el mundo real)

Guía completa para eliminar imágenes de Docker

Compartir imágenes de Docker en Docker Hub

Trabajar con imágenes de Docker desde la línea de comandos