Skip to main content

Instalación Docker

https://docs.docker.com/engine/install/

Si sigues la documentación oficial de Docker verás que existe instalación por distribución Linux, tiene el paso a paso para cada una de ellas.

Dejemos claro una cosa: existe un script de instalación muy fácil, pero solo debe ser usado en ambiente de prueba, desarrollo, en producción no es recomendado utilizar ese script. Descarga el script y lo ejecuta directo en el shell indicado, en este caso el bash.

Prueba en la máquina master por ejemplo la instalación con el script de conveniencia.

vagrant ssh master para entrar en la máquina master y ejecuta el comando debajo

# Script de conveniencia (solo para desarrollo/prueba)
curl -fsSL https://get.docker.com | sh
sudo curl -fsSL https://get.docker.com | bash
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker vagrant

Verifica la salida con el comando

vagrant@worker1:~$ docker system info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
compose: Docker Compose (Docker Inc., v2.6.0)
scan: Docker Scan (Docker Inc., v0.17.0)

Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.17
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
Default Runtime: runc
Init Binary: docker-init
containerd version: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
runc version: v1.1.2-0-ga916309
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 5.4.0-120-generic
Operating System: Ubuntu 20.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 976.6MiB
Name: worker1.docker-dca.example
ID: 5ACX:CQ4L:GD3H:LRFV:NM2J:FVJQ:RA2C:NA3W:WWZE:NSXI:TTTZ:VJ53
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support
vagrant@worker1:~$

En Ubuntu

https://docs.docker.com/engine/install/ubuntu/

Prueba en la máquina ubuntu la instalación como debe ser en un ambiente de producción

vagrant ssh worker1 para entrar en la máquina worker1 y ejecuta el comando debajo

 sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

Vamos a agregar la clave del repositorio de docker para descargar los paquetes directo de allí y luego agregar el repositorio

 sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Después de eso es necesario actualizar el repositorio e instalar docker, docker cli y containerd.

¿Qué es containerd? Containerd es un proyecto graduado en CNCF. Es un container runtime utilizado por el propio Docker para crear sus contenedores. Es uno de los paquetes de instalación obligatorio para Docker así como para varios otros.

Lo que podemos entender aquí es que Docker es un gestor de contenedores, no orquestador, y necesita un runtime.

¿Sería posible instalar solamente containerd y tener soporte a los contenedores? Sí. Si instalamos un Kubernetes, no necesitamos instalar Docker completo, solamente el runtime.

# Instalación de los paquetes Docker oficiales
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

¿Podríamos instalar directo vía apt-get install docker por el repositorio de Ubuntu directamente? Sí, puedes, pero ¿es correcto? NO. Entonces si preguntan en el examen, ya sabes... no debe ser hecho de esa manera.

En Red Hat y en CentOS

https://docs.docker.com/engine/install/centos/

epel-release no es necesario, pero es bueno, pues son unos paquetes esenciales del S.O.

sudo yum install yum-utils epel-release  -y

Si es CentOS

 sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

Si es Red Hat

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/rhel/docker-ce.repo
# Instalación Docker en CentOS/Red Hat
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
# Iniciar servicio Docker
sudo systemctl start docker

... observa bien y verás que no es muy diferente, solamente el proceso de agregar los repositorios y el comando de instalación

Continuación

Es necesario que el usuario tenga permiso para ejecutar los comandos de Docker sin utilizar sudo.

# Agregar usuario al grupo docker
sudo usermod -aG docker $USER
# Habilitar e iniciar servicio Docker
sudo systemctl enable docker
sudo systemctl start docker

Parametrización

https://docs.docker.com/config/daemon/ https://docs.docker.com/engine/reference/commandline/dockerd/

La parametrización del Docker daemon debe ser hecha en el archivo

  • Linux: /etc/docker/daemon.json
  • Windows: C:\ProgramData\docker\config\daemon.json

Estos archivos no son creados por defecto, necesitas crearlos.

Toda parametrización requiere que el daemon sea recargado

# Recargar daemon después de alteraciones
sudo systemctl daemon-reload

El Docker daemon persiste todos sus datos dentro de

  • Linux: /var/lib/docker
  • Windows: C:\ProgramData\docker

Debajo una configuración mostrando todo lo que es posible alterar. Es solo un ejemplo.

{
"allow-nondistributable-artifacts": [],
"api-cors-header": "",
"authorization-plugins": [],
"bip": "",
"bridge": "",
"cgroup-parent": "",
"cluster-advertise": "",
"cluster-store": "",
"cluster-store-opts": {},
"containerd": "/run/containerd/containerd.sock",
"containerd-namespace": "docker",
"containerd-plugin-namespace": "docker-plugins",
"data-root": "",
"debug": true,
"default-address-pools": [
{
"base": "172.30.0.0/16",
"size": 24
},
{
"base": "172.31.0.0/16",
"size": 24
}
],
"default-cgroupns-mode": "private",
"default-gateway": "",
"default-gateway-v6": "",
"default-runtime": "runc",
"default-shm-size": "64M",
"default-ulimits": {
"nofile": {
"Hard": 64000,
"Name": "nofile",
"Soft": 64000
}
},
"dns": [],
"dns-opts": [],
"dns-search": [],
"exec-opts": [],
"exec-root": "",
"experimental": false,
"features": {},
"fixed-cidr": "",
"fixed-cidr-v6": "",
"group": "",
"hosts": [],
"icc": false,
"init": false,
"init-path": "/usr/libexec/docker-init",
"insecure-registries": [],
"ip": "0.0.0.0",
"ip-forward": false,
"ip-masq": false,
"iptables": false,
"ip6tables": false,
"ipv6": false,
"labels": [],
"live-restore": true,
"log-driver": "json-file",
"log-level": "",
"log-opts": {
"cache-disabled": "false",
"cache-max-file": "5",
"cache-max-size": "20m",
"cache-compress": "true",
"env": "os,customer",
"labels": "somelabel",
"max-file": "5",
"max-size": "10m"
},
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"max-download-attempts": 5,
"mtu": 0,
"no-new-privileges": false,
"node-generic-resources": [
"NVIDIA-GPU=UUID1",
"NVIDIA-GPU=UUID2"
],
"oom-score-adjust": -500,
"pidfile": "",
"raw-logs": false,
"registry-mirrors": [],
"runtimes": {
"cc-runtime": {
"path": "/usr/bin/cc-runtime"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
},
"seccomp-profile": "",
"selinux-enabled": false,
"shutdown-timeout": 15,
"storage-driver": "",
"storage-opts": [],
"swarm-default-advertise-addr": "",
"tls": true,
"tlscacert": "",
"tlscert": "",
"tlskey": "",
"tlsverify": true,
"userland-proxy": false,
"userland-proxy-path": "/usr/libexec/docker-proxy",
"userns-remap": ""
}