Docker es una tecnología de creación de contenedores que le permite crear, probar e implementar rápidamente aplicaciones como contenedores portátiles y autosuficientes que pueden ejecutarse prácticamente en cualquier lugar.
En este tutorial, veremos cómo instalar Docker CE en CentOS 7 y exploraremos los conceptos y comandos básicos de Docker.
Requisitos previos #
Antes de continuar con este tutorial, asegúrese de que se cumplan los siguientes requisitos previos:
- Servidor CentOS 7
- Ha iniciado sesión como usuario no root con privilegios sudo. Consulte esta guía sobre cómo crear un nuevo usuario sudo.
Instalar Docker en CentOS #
Aunque el paquete Docker está disponible en el repositorio oficial de CentOS 7, es posible que no siempre sea la última versión. El enfoque recomendado es instalar Docker desde los repositorios de Docker.
Para instalar Docker en su servidor CentOS 7, siga los pasos a continuación:
-
Comience por actualizar los paquetes de su sistema e instale las dependencias requeridas:
sudo yum update
sudo yum install yum-utils device-mapper-persistent-data lvm2
-
A continuación, ejecute el siguiente comando que agregará el repositorio estable de Docker a su sistema:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
Ahora que el repositorio de Docker está habilitado, instale la última versión de Docker CE (Community Edition) usando yum escribiendo:
sudo yum install docker-ce
-
Una vez que el paquete de Docker esté instalado, inicie el demonio de Docker y habilítelo para que se inicie automáticamente en el momento del arranque:
sudo systemctl start docker
sudo systemctl enable docker
-
Para verificar que el servicio Docker se está ejecutando, escriba:
sudo systemctl status docker
La salida debería verse así:
● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2018-10-31 08:51:20 UTC; 7s ago Docs: https://docs.docker.com Main PID: 2492 (dockerd) CGroup: /system.slice/docker.service ├─2492 /usr/bin/dockerd └─2498 docker-containerd --config /var/run/docker/containerd/containerd.toml
-
En el momento de escribir este artículo, la versión estable actual de Docker es
18.06.1
, para imprimir el tipo de versión de Docker:docker -v
Docker version 18.06.1-ce, build e68fc7a
Ejecutando el comando Docker sin Sudo #
De forma predeterminada, la administración de Docker requiere privilegios de administrador. Si desea ejecutar los comandos de Docker como usuario no root sin anteponer sudo
debe agregar su usuario al grupo docker que se crea durante la instalación del paquete Docker CE. Puede hacerlo escribiendo:
sudo usermod -aG docker $USER
$USER
es una variable de entorno que contiene su nombre de usuario.
Cierre sesión y vuelva a iniciar sesión para que se actualice la membresía del grupo.
Para verificar que Docker se haya instalado correctamente y que pueda ejecutar los comandos de Docker sin sudo, emita el siguiente comando que descargará una imagen de prueba, la ejecutará en un contenedor, imprimirá un mensaje de "Hola desde Docker" y saldrá:
docker container run hello-world
La salida debería tener el siguiente aspecto:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Interfaz de línea de comandos de Docker #
Ahora que tenemos una instalación de Docker en funcionamiento, repasemos la sintaxis básica de la CLI de Docker.
La línea de comando de la ventana acoplable toma la siguiente forma:
docker [option] [subcommand] [arguments]
Puede enumerar todos los comandos disponibles escribiendo docker
sin parámetros:
docker
Si necesita más ayuda con cualquier [subcommand]
, solo escribe:
docker [subcommand] --help
Imágenes de Docker #
Una imagen Docker se compone de una serie de capas que representan instrucciones en el archivo Docker de la imagen que conforman una aplicación de software ejecutable. Una imagen es un archivo binario inmutable que incluye la aplicación y todas las demás dependencias, como archivos binarios, bibliotecas e instrucciones necesarias para ejecutar la aplicación. En resumen, una imagen de Docker es esencialmente una instantánea de un contenedor de Docker.
Docker Hub es un servicio de registro basado en la nube que, entre otras funcionalidades, se utiliza para mantener las imágenes de Docker en un repositorio público o privado.
Para buscar una imagen en el repositorio de Docker Hub, simplemente use search
subcomando Por ejemplo, para buscar la imagen de CentOS, ejecute:
docker search centos
La salida debería tener el siguiente aspecto:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 4257 [OK]
ansible/centos7-ansible Ansible on Centos7 109 [OK]
jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_… 94 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 52 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK]
tutum/centos Simple CentOS docker image with SSH access 39
Como puede ver, los resultados de búsqueda imprimen una tabla con cinco columnas, NAME
, DESCRIPTION
, STARS
, OFFICIAL
y AUTOMATED
. La imagen oficial es una imagen que Docker desarrolla en conjunto con socios upstream.
Si queremos descargar la compilación oficial de CentOS 7, podemos hacerlo usando el image pull
subcomando:
docker image pull centos
Using default tag: latest
latest: Pulling from library/centos
469cfcc7a4b3: Pull complete
Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Status: Downloaded newer image for centos:latest
Dependiendo de su velocidad de Internet, la descarga puede tardar unos segundos o unos minutos. Una vez descargada la imagen podemos listar las imágenes con:
docker image ls
La salida debería ser similar a la siguiente:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest e38bc07ac18e 3 weeks ago 1.85kB
centos latest e934aafc2206 4 weeks ago 199MB
Si por alguna razón desea eliminar una imagen, puede hacerlo con image rm [image_name]
subcomando:
docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Deleted: sha256:e934aafc22064b7322c0250f1e32e5ce93b2d19b356f4537f5864bd102e8531f
Deleted: sha256:43e653f84b79ba52711b0f726ff5a7fd1162ae9df4be76ca1de8370b8bbf9bb0
Contenedores Docker #
Una instancia de una imagen se llama contenedor. Un contenedor representa un tiempo de ejecución para una sola aplicación, proceso o servicio.
Puede que no sea la comparación más adecuada, pero si es programador, puede considerar una imagen de Docker como una clase y un contenedor de Docker como una instancia de una clase.
Podemos iniciar, detener, eliminar y administrar un contenedor con el docker container
subcomando.
El siguiente comando iniciará un contenedor Docker basado en la imagen de CentoOS. Si no tiene la imagen localmente, la descargará primero:
docker container run centos
A primera vista, puede parecerle que no pasó nada en absoluto. Bueno, eso no es cierto. El contenedor de CentOS se detiene inmediatamente después de iniciarse porque no tiene un proceso de ejecución prolongado y no proporcionamos ningún comando, por lo que el contenedor se inició, ejecutó un comando vacío y luego salió.
El interruptor -it
nos permite interactuar con el contenedor a través de la línea de comando. Para iniciar un tipo de contenedor interactivo:
docker container run -it centos /bin/bash
Como puede ver en la salida, una vez que se inicia el contenedor, el símbolo del sistema cambia, lo que significa que ahora está trabajando desde dentro del contenedor:
[root@719ef9304412 /]#
Para enumerar contenedores en ejecución:, escriba:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79ab8e16d567 centos "/bin/bash" 22 minutes ago Up 22 minutes ecstatic_ardinghelli
Si no tiene ningún contenedor en ejecución, la salida estará vacía.
Para ver los contenedores en ejecución y detenidos, pásele el -a
cambiar:
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79ab8e16d567 centos "/bin/bash" 22 minutes ago Up 22 minutes ecstatic_ardinghelli
c55680af670c centos "/bin/bash" 30 minutes ago Exited (0) 30 minutes ago modest_hawking
c6a147d1bc8a hello-world "/hello" 20 hours ago Exited (0) 20 hours ago sleepy_shannon
Para eliminar uno o más contenedores, simplemente copie el ID (o ID) del contenedor desde arriba y péguelos después del container rm
subcomando:
docker container rm c55680af670c