Introducción
Docker es una tecnología de contenedorización que le permite crear, probar e implementar rápidamente aplicaciones como contenedores portátiles e independientes que pueden ejecutarse prácticamente en cualquier lugar.
En este tutorial, veremos cómo instalar Docker CE en CentOS 8 y exploraremos los conceptos y comandos básicos de Docker.
Prerrequisitos
Antes de continuar con este tutorial, asegúrese de que se cumplan los siguientes requisitos previos:
- Ha iniciado sesión como usuario no root con privilegios de sudo.
Si desea instalar Docker en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectarse al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Instalar Docker en CentOS
Aunque el paquete Docker está disponible en el repositorio oficial de CentOS 8, 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 8, haga lo siguiente:
Empiece por actualizar los paquetes del sistema e instalar las dependencias necesarias:
sudo yum update
sudo yum install yum-utils device-mapper-persistent-data lvm2
Luego, 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
Puede recibir un resultado similar al siguiente:
CentOS-8 - AppStream 113 kB/s | 4.3 kB 00:00
CentOS-8 - Base 12 kB/s | 3.9 kB 00:00
CentOS-8 - Extras 49 kB/s | 1.5 kB 00:00
Docker CE Stable - x86_64 201 kB/s | 21 kB 00:00
Error:
Problem: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Luego instale Docker Ce con el siguiente comando que le permite evitar paquetes que ya no están disponibles o están dañados:
sudo yum -y install docker-ce --nobest
Una vez que el paquete Docker esté instalado, inicie el demonio Docker y habilítelo para que se inicie automáticamente al inicio:
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 2020-01-15 00:06:26 CET; 4s ago
Docs: https://docs.docker.com
Main PID: 11075 (dockerd)
Tasks: 18
Memory: 51.6M
CGroup: /system.slice/docker.service
├─11075 /usr/bin/dockerd -H fd://└─11091 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
En el momento de escribir este artículo, la versión estable actual de Docker es 19.03.5
, para imprimir el tipo de versión de Docker:
docker -v
Docker version 19.03.5, build 633a0ea
Ejecute el comando Docker sin Sudo
De forma predeterminada, Docker requiere privilegios de administrador. Si desea ejecutar comandos de Docker como un usuario no root sin anteponer sudo
, debe agregar el usuario al grupo de Docker creado durante la instalación del paquete Docker CE. Puede hacer esto escribiendo:
sudo usermod -aG docker $USER
$USER
es una variable de entorno que contiene su nombre de usuario.
Cierre la sesión y vuelva a iniciarla para actualizar la pertenencia al grupo.
Para verificar que Docker está instalado correctamente y que es posible ejecutar los comandos de Docker sin sudo, emita el siguiente comando que descargará una imagen de prueba , funcionará en un contenedor e imprimirá un mensaje "Hola desde Docker" y saldrá:
docker container run hello-world
La salida debería verse así:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:d1668a9a1f5b42ed3f46b70b9cb7c88fd8bdc8a2d73509bb0041cf436018fbf5
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, pasemos a la sintaxis básica de la CLI de Docker.
La línea de comandos de Docker tiene 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]
, simplemente escriba:
docker [subcommand] --help
Imágenes de docker
Una imagen de Docker se compone de una serie de capas que representan instrucciones en la imagen de Dockerfile 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 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 funciones, 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 el subcomando de search
Por ejemplo, para buscar la imagen de CentOS, ejecute:
docker search centos
La salida debería verse así:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5770 [OK]
ansible/centos7-ansible Ansible on Centos7 126 [OK]
jdeathe/centos-ssh OpenSSH /Supervisor /EPEL/IUS/SCL Repos - … 114 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 108 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 67
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 57 [OK]
tutum/centos Simple CentOS docker image with SSH access 44
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 39
kinogmt/centos-ssh CentOS with SSH 29 [OK]
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 10
guyton/centos6 From official centos6 container with full up… 9 [OK]
nathonfowlie/centos-jre Latest CentOS image with the JRE pre-install… 8 [OK]
drecom/centos-ruby centos ruby 6 [OK]....
Como puede ver los resultados de la búsqueda imprimen una tabla con cinco columnas, NAME
, DESCRIPTION
, STARS
, OFFICIAL
y AUTOMATED
. La imagen oficial es una imagen que Docker desarrolla en colaboración con socios.
Si queremos descargar la compilación oficial de CentOS 8, podemos hacerlo usando el subcomando image pull
docker image pull centos
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/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 verse así:
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 3 months ago 220MB
hello-world latest fce289e99eb9 12 months ago 1.84kB
Si por alguna razón desea eliminar una imagen, puede hacerlo con el subcomando image rm [image_name]
:
docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Deleted: sha256:0f3e07c0138fbe05abcb7a9cc7d63d9bd4c980c3f61fea5efa32e7c4217ef4da
Deleted: sha256:9e607bb861a7d58bece26dd2c02874beedd6a097c1b6eca5255d5eb0d2236983
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 un programador, puede pensar en 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 subcomando docker container
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 ha pasado nada. El contenedor CentOS se detiene inmediatamente después de iniciarse porque no tiene un proceso de ejecución prolongado y no dimos ningún comando, por lo que el contenedor se inició, ejecutó un comando vacío y luego salió.
La -it
nos permite interactuar con el contenedor a través de la línea de comandos. Para iniciar un tipo de contenedor interactivo:
docker container run -it centos /bin/bash
Como puede ver en el resultado 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@31256e550edc /]#
Para enumerar los contenedores en ejecución, escriba:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d11ac462fb5 centos "/bin/bash" 6 seconds ago Up 5 seconds angry_volhard
Si no tiene ningún contenedor en ejecución, la salida estará en blanco.
Para ver los contenedores en ejecución y detenidos, use la opción -a
docker container ls -a
La salida debería verse así:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d11ac462fb5 centos "/bin/bash" 19 seconds ago Up 19 seconds angry_volhard
31256e550edc centos "/bin/bash" 41 seconds ago Exited (127) 27 seconds ago epic_hypatia
df0b941a0a14 centos "/bin/bash" 52 seconds ago Exited (0) 51 seconds ago nostalgic_goldwasser
34912fcfaf8e hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago stupefied_rosalind
Para eliminar uno o más contenedores, simplemente copie el ID del contenedor (o ID) y péguelos después del container rm
, así:
docker container rm 34912fcfaf8e
Conclusión
Aprendió cómo instalar Docker en su servidor CentOS 8 y cómo descargar imágenes de Docker y administrar contenedores de Docker. También puede leer sobre Docker Compose, que le permite definir y ejecutar aplicaciones Docker de varios contenedores.