Docker Engine
Instalación de Docker Engine en Ubuntu Server
El objetivo de este documento es instalar Docker Engine en Ubuntu Server 24.04.
Requisitos
Antes de instalar Docker hay que tener en cuenta una serie de consideraciones.
Usuario root
Todos los comandos que aquí se ponen, han de ejecutarse como root.
sudo -i
Desinstalar UFW
El firewall que viene por defecto en entornos tipo Debian (como Ubuntu) tiene problemas de compatibilidad con Docker Engine. Debido a que Docker crea reglas directamente con IPTables, se ocasiona que Docker cree reglas que se salten las reglas existentes. Para evitar que esto pase vamos a sustituir UFW por FirewallD (en modo IPTables), que evita este tipo de problemas.
ufw disable
systemctl disable ufw
systemctl stop ufw
apt remove --purge ufw
Instalar FirewallD
apt update
apt install firewalld
systemctl enable firewalld
systemctl start firewalld
Habilitar modo IPTables a FirewallD (opcional)
Hay problemas reportados de conexión entre contenedores de Docker cuando FirewallD está en modo nftables, se resuelven cambiando a modo IPTables.
vi /etc/firewalld/firewalld.conf
[...]
# FirewallBackend
# Selects the firewall backend implementation.
# Choices are:
# - nftables (default)
# - iptables (iptables, ip6tables, ebtables and ipset)
# Note: The iptables backend is deprecated. It will be removed in a future
# release.
#FirewallBackend=nftables
FirewallBackend=iptables
[...]
systemctl restart firewalld
Habilitar reglas anteriores
En mi paso prefiero habilitar puertos TCP en vez de servicios (aunque también es posible).
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload
Habilitar salida a Internet de contenedores
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload
Comprobar estado de FirewallD
firewall-cmd --list-all
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 80/tcp 443/tcp
protocols:
forward: yes
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Nota: es toda esta configuración estamos asumiendo que estamos usando la zona public.