La última versión de RHEL 8/CentOS 8. Red Hat ha creado sus propias herramientas, buildah
y podman
, que pretenden ser compatibles con las imágenes docker existentes y funcionan sin depender de un demonio, lo que permite la creación de contenedores como usuarios normales, sin necesidad de permisos especiales (con algunas limitaciones:por ejemplo, en el momento de escribir, todavía no es posible asignar puertos de host al contenedor sin privilegios).
Sin embargo, todavía faltan algunas herramientas específicas:un equivalente de docker-compose
, por ejemplo, aún no existe. En este tutorial, veremos cómo instalar y ejecutar Docker CE original en Rhel8 utilizando el repositorio oficial de Docker para CentOS7.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | RHEL 8 / CentOS 8 |
Software | Docker versión 18.09.2 |
Otro | Permiso para ejecutar el comando con privilegios de root. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
¿Qué es Docker?
Docker es un proyecto de código abierto que permite la creación y distribución de aplicaciones dentro de containers
, que son entornos estandarizados que se pueden replicar fácilmente, independientemente del sistema host. Mientras que en Red Hat Enterprise Linux 7 Docker era oficialmente compatible, en la nueva versión de este sistema operativo de código abierto, ha sido reemplazado por una serie de otras herramientas desarrolladas por el propio Red Hat:buildah
y podman
.
Sin embargo, mediante el uso de un repositorio externo, aún es posible instalar Docker CE (Community Edition). En este tutorial veremos cómo instalar este repositorio; sin embargo, tenga en cuenta que originalmente estaba destinado a CentOS 7
(un clon de RHEL), y la versión comunitaria de Docker no tiene soporte oficial para Red Hat Enterprise Linux. Debido a esto, existen problemas; los analizamos a continuación.
Agregar el repositorio externo
Dado que Docker no está disponible en RHEL 8/CentOS 8, debemos agregar un repositorio externo para obtener el software. En este caso, utilizaremos el repositorio oficial de Docker CE CentOS:esta es, en el momento de escribir este artículo, la única forma de instalar Docker CE en RHEL 8/CentOS 8.
El dnf config-manager
La utilidad nos permite, entre otras cosas, habilitar o deshabilitar fácilmente un repositorio en nuestra distribución. Por defecto, solo el appstream
y baseos
los repositorios están habilitados en Rhel8; necesitamos agregar y habilitar también el docker-ce
repositorio Todo lo que tenemos que hacer para realizar esta tarea es ejecutar el siguiente comando:
$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Podemos verificar que el repositorio se ha habilitado mirando el resultado del siguiente comando:
$ sudo dnf repolist -v
El comando anterior devolverá información detallada sobre todos los repositorios habilitados. Esto es lo que deberías ver en este punto:
Repo-id : docker-ce-stable
Repo-name : Docker CE Stable - x86_64
Repo-revision: 1549905809
Repo-updated : Mon 11 Feb 2019 06:23:29 PM CET
Repo-pkgs : 30
Repo-size : 618 M
Repo-baseurl : https://download.docker.com/linux/centos/7/x86_64/stable
Repo-expire : 172,800 second(s) (last: Mon 18 Feb 2019 10:23:54 AM CET)
Repo-filename: /etc/yum.repos.d/docker-ce.repo
Repo-id : rhel-8-for-x86_64-appstream-rpms
Repo-name : Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs)
Repo-revision: 1542158694
Repo-updated : Wed 14 Nov 2018 02:24:54 AM CET
Repo-pkgs : 4,594
Repo-size : 4.9 G
Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/appstream/os
Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:55 AM CET)
Repo-filename: /etc/yum.repos.d/redhat.repo
Repo-id : rhel-8-for-x86_64-baseos-rpms
Repo-name : Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs)
Repo-revision: 1542158719
Repo-updated : Wed 14 Nov 2018 02:25:19 AM CET
Repo-pkgs : 1,686
Repo-size : 925 M
Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/baseos/os
Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:56 AM CET)
Repo-filename: /etc/yum.repos.d/redhat.repo
Total packages: 6,310
Instalando docker-ce
El docker-ce-stable
El repositorio ahora está habilitado en nuestro sistema. El repositorio contiene varias versiones de docker-ce
paquete, para mostrarlos todos, podemos ejecutar:
$ dnf list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
¿Qué versión instalar? Bueno, Red Hat parece haber bloqueado de alguna manera la instalación de containerd.io
> 1.2.0-3.el7
, que es una dependencia de docker-ce
. Debido a esto, simplemente ejecute sudo dnf install docker-ce
comando, no funcionará. Como veremos en un minuto, todavía es posible solucionar este problema; una vez docker-ce
está instalado, sin embargo, otro problema se vuelve evidente:mientras firewalld
, el administrador de firewall del sistema está habilitado, DNS resolution
dentro de los contenedores docker no funciona.
Esto es, por supuesto, un problema crítico. Sin embargo, si aún desea continuar con la instalación, estos son los posibles métodos que se pueden usar para evitar los problemas de dependencias:
- Instalar una versión específica de
docker-ce
que requiere una versión instalable de containerd.io
paquete;
- Fuerza la instalación proporcionando
--nobest
opción
- Instalar el último
containerd.io
disponible rpm manualmente;
Instalar una versión específica de docker-ce
Al momento de escribir las versiones de docker-ce
que se instalan sin problemas son:
- docker-ce-3:18.09.1-3.el7
- docker-ce-18.06.3.ce-3.el7;
- docker-ce-17.12.1.ce-1.el7.centos
Para instalar una versión específica, todo lo que tenemos que hacer es proporcionar el nombre completo del paquete, por ejemplo:
$ sudo dnf install docker-ce-3:18.09.1-3.el7
Forzar la instalación de docker-ce con la opción –nobest
Normalmente, al instalar un paquete, se selecciona el mejor candidato disponible de un repositorio. En este caso, por ejemplo, la instalación de la última versión de docker-ce
se intenta (y falla). Usando el --nobest
opción, podemos cambiar este comportamiento para que la primera versión de docker-ce
con dependencias satisfactorias se selecciona como "alternativo", en este caso 3:18.09.1-3.el7
.
$ sudo dnf install --nobest docker-ce
Dependencies resolved.
Problem: package docker-ce-3:19.03.2-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.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
=======================================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================================
Installing:
docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 M
Installing dependencies:
containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 M
docker-ce-cli x86_64 1:19.03.2-3.el7 docker-ce-stable 39 M
container-selinux noarch 2:2.94-1.git1e99f1d.module+el8.0.0+4017+bbba319f rhel-8-for-x86_64-appstream-rpms 43 k
tar x86_64 2:1.30-4.el8 rhel-8-for-x86_64-baseos-rpms 838 k
libcgroup x86_64 0.41-19.el8 rhel-8-for-x86_64-baseos-rpms 70 k
python3-policycoreutils noarch 2.8-16.1.el8 rhel-8-for-x86_64-baseos-rpms 2.2 M
python3-libsemanage x86_64 2.8-5.el8 rhel-8-for-x86_64-baseos-rpms 127 k
python3-setools x86_64 4.2.0-2.el8 rhel-8-for-x86_64-baseos-rpms 598 k
checkpolicy x86_64 2.8-2.el8 rhel-8-for-x86_64-baseos-rpms 338 k
python3-audit x86_64 3.0-0.10.20180831git0047a6c.el8 rhel-8-for-x86_64-baseos-rpms 85 k
policycoreutils-python-utils noarch 2.8-16.1.el8 rhel-8-for-x86_64-baseos-rpms 228 k
Skipping packages with broken dependencies:
docker-ce x86_64 3:19.03.2-3.el7 docker-ce-stable 24 M
Transaction Summary
=======================================================================================================================================================
Install 12 Packages
Skip 1 Package
Total download size: 85 M
Installed size: 351 M
Is this ok [y/N]:
Instala manualmente el último paquete containerd.io disponible
Si necesitamos estrictamente instalar la última versión de docker-ce
, podemos instalar la versión requerida de containerd.io
manualmente, ejecutando:
$ sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
Después de instalar el paquete, simplemente podemos instalar el último docker-ce
:
$ sudo dnf install docker-ce
Dependencies resolved.
=======================================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================================
Installing:
docker-ce x86_64 3:19.03.2-3.el7 docker-ce-stable 24 M
Installing dependencies:
docker-ce-cli x86_64 1:19.03.2-3.el7 docker-ce-stable 39 M
tar x86_64 2:1.30-4.el8 rhel-8-for-x86_64-baseos-rpms 838 k
libcgroup x86_64 0.41-19.el8 rhel-8-for-x86_64-baseos-rpms 70 k
Transaction Summary
=======================================================================================================================================================
Install 4 Packages
Total download size: 65 M
Installed size: 275 M
Is this ok [y/N]:
Esta opción es menos conveniente ya que containerd.io
el paquete no está instalado como una dependencia de docker-ce
, por lo tanto, no se eliminará automáticamente cuando este último se desinstale del sistema.
Cualquier método que usemos para instalar docker-ce
, como se dijo antes, para hacer DNS resolution
funciona dentro de los contenedores Docker, debemos deshabilitar firewalld (también puede ser necesario reiniciar el sistema):
$ sudo systemctl disable firewalld
Iniciar y habilitar el demonio docker
Una vez docker-ce
está instalado, debemos iniciar y habilitar el demonio docker, para que también se inicie automáticamente en el arranque. El comando que debemos ejecutar es el siguiente:
$ sudo systemctl enable --now docker
En este punto, podemos confirmar que el daemon está activo ejecutando:
$ systemctl is-active docker
active
Del mismo modo, podemos verificar que esté habilitado en el arranque, ejecutando:
$ systemctl is-enabled docker
enabled
Instalando docker-compose
Docker compose es un paquete muy útil que nos permite administrar aplicaciones multicontenedor, como por ejemplo las basadas en la pila LAMP, donde cada parte del entorno (PHP, Apache, MariaDB) es proporcionada por un contenedor dedicado (si está interesado en el tema, eche un vistazo a nuestro tutorial sobre cómo crear una pila de lámparas basada en Docker). El paquete no está disponible en Rhel8, ni existe un equivalente para usar con las herramientas de Rhel. Sin embargo, es posible instalarlo de muchas maneras:sigue leyendo y decide cuál te conviene más.
Instalación global
La forma en que debemos instalar docker-compose
varía en función de si queremos instalarlo globalmente o solo para un único usuario. Al momento de escribir, la única forma de instalarlo globalmente es descargar el binario desde la página de github del proyecto:
$ curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o docker-compose
Una vez descargado el binario, lo movemos a /usr/local/bin
y lo hacemos ejecutable:
$ sudo mv docker-compose /usr/local/bin && sudo chmod +x /usr/local/bin/docker-compose
El /usr/local
La jerarquía no se elige al azar. Esta estructura de directorios está diseñada para ser utilizada para archivos instalados por el administrador local manualmente (para software compilado desde el origen, por ejemplo), para garantizar la separación del software instalado con el administrador de paquetes del sistema.
Aunque es posible que un usuario normal ejecute comandos relacionados con la ventana acoplable si forma parte de la docker
group (el grupo se crea automáticamente cuando instalamos docker-ce), por defecto deben ejecutarse con privilegios de root por motivos de seguridad. Cuando necesitamos hacer esto último, ya que el /usr/local/bin
el directorio no está en el PATH
del usuario raíz , debemos llamar al binario especificando su ubicación o agregar /usr/local/bin
a la PATH
sí mismo. La primera opción es la que recomiendo en este caso.
Instalación por usuario
Si nuestro usuario es parte del docker
grupo, y por lo tanto se le permite ejecutar comandos docker, y desde docker-compose
está disponible como un paquete de python, también podemos instalarlo usando pip
, el administrador de paquetes de python. Primero, asegúrese de que pip esté instalado:
$ sudo dnf install python3-pip
Para obtener docker-compose ejecutamos:
$ pip3.6 install docker-compose --user
Tenga en cuenta que incluso si fuera posible ejecutar pip como root para instalar un paquete globalmente, esto no se recomienda y se desaconseja encarecidamente.
Probando ventana acoplable
Instalamos docker y docker-compose, ahora para verificar que todo funcione como se esperaba, podemos intentar construir una imagen y ejecutar un contenedor:en este caso usaremos el httpd
oficial uno. Todo lo que tenemos que hacer es ejecutar el siguiente comando:
sudo docker run --rm --name=linuxconfig-test -p 80:80 httpd
Desde el httpd
la imagen no existe localmente, se buscará y construirá automáticamente. Finalmente, se lanzará un contenedor basado en él en primer plano (se eliminará automáticamente cuando se detenga). Deberíamos poder ver el It works!
mensaje cuando lleguemos a la ip de nuestra máquina a través del navegador.
Conclusiones
Red Hat Enterprise Linux 8 no soporta Docker:en esta distribución ha sido reemplazado por herramientas propias de Red Hat como buildah
y podman
, que son compatibles con Docker pero no necesitan una arquitectura de servidor/cliente para ejecutarse. El uso de herramientas nativas, siempre que sea posible, es siempre la forma recomendada de hacerlo, pero por una razón u otra, es posible que aún desee instalar el Docker original. En este tutorial, vimos cómo es posible instalar Docker CE
en Rhel8, usando el repositorio oficial de Docker para CentOS7, que es un clon 100 % compatible.
Esta no es una solución ideal y, como vimos, en este momento, se necesitan algunas soluciones para que Docker funcione en RHEL8. Si surgen nuevos problemas o se encuentran mejores soluciones a los problemas mencionados anteriormente, este artículo se actualizará en consecuencia. Estén atentos.