Alpine Linux
N-Tech-Admin Group
En este apartado vamos a utilizar una VM con Alpine Linux por su facilidad de uso y por ser una distribución ultra ligera para instalar Docker, Portainer para facilitar el trabajo con Docker y Pi-Hole.
Por qué Alpine
Una versión no GNU que puede llegar a ocupar tan solo 8MB... 😄
Se trata de:
una distribución Linux ultraligera
orientada a la seguridad y cuyo software se compila usando Musl en lugar de la biblioteca C de GNU (Libc)
sustituye las herramientas GNU por Busybox, un único ejecutable capaz de emular el funcionamiento de todas ellas.
Ha sido diseñada principalmente para Routers x86, Firewalls, VPN, VoIP y servidores.
Se utiliza en VM o Docker, para ejecutar entornos de desarrollo y ejecución de aplicaciones, portables y aislados del sistema principal
También es posible instalar las herramientas GNU, así como softwares como KDE, GNOME
Para administrar el software Alpine recurre a su propio gestor de paquetes: APK.
Algunos comandos básicos
Para actualizar las listas de paquetes:
apk update
apk upgrade
Para desinstalar un paquete:
apk del name_package
Para pedir ayuda:
apk --help
Para ver todos los paquetes:
apk search -v
Para buscar un paquete en específico:
apk search -v nodejs
apk search -v | grep -i nodejs
Para instalar paquetes:
apk add package
Para enumerar los paquetes instalados:
apk info
Para verificar si un paquete específico está instalado:
apk info package-name
Reiniciar el sistema, esto es, el equivalente a shutdown now -r
sería:
reboot
Apagar el sistema, el equivalente a: shutdown now -P
:
poweroff
Renovar los parámetros de red:
service networking restart
Instalando Alpine Linux
A la hora de instalar la MV tenemos que tener en cuenta las necesidades específicas. Por ello, siempre es conveniente que detallemos los requisitos de la misma.
Requisitos técnicos
RAM: 4GB
Tamaño disco: 20GB
Sistema Operativo: Linux / Linux 2.6 / 3.x / 4.x (64-bit)
Alpine System: alpine-virt-3.16.2-x86_64.iso
Iniciamos la MV y lo primero que nos encontramos es que nos pide el usuario del sistema, sin haber hecho la instalación. Para acceder, basta con escribir root
.
Leyendo la información que nos brinda en pantalla vemos que nos dice que para instalar el sistema escribamos:
setup-alpine
Dado que el sistema está en inglés, tengamos en cuenta la posición de los caracteres en el teclado. No obstante, lo primero que nos solicita es nuestro idioma y distribución. Escribimos es
las dos veces que nos lo pide.

Podemos dejar los valores por defecto:
localhost
eth0
dhcp
configuración manual de la red: N
el password que deseemos
podemos ignorar la zona horaria
proxy no tenemos
NTP client: chrony (por defecto)
mirror server: seleccionemos la opción por defecto: 1
user: lo dejamos por defecto
ssh: openssh para que nos lo instale
permitir que el root se conecte por ssh (no me gusta por seguridad pero ...)
disco a utilizar: sda, tenemos un solo disco. En caso de duda podemos teclear ? y nos dice las opciones.
configuración base del sistema para el arranque en uno de los tres modos de disco diferentes de Alpine Linux: 'sin disco', 'datos' o 'sys'. Seleccionamos sys.
Una vez hecho esto, comienza la instalación del sistema que dura segundos y nos pedirá reiniciar el sistema. Mejor lo apagamos para quitar la ISO y no vuelva al punto de partida de la instalación.
Para poder utilizar todos los paquetes disponibles para Alpine debemos hacer una modificación en el archivo de los repositorios, el equivalente al sources.list de Ubuntu que contiene los repositorios del tipo Main.
Vamos al fichero: /etc/apk/repositories
y lo editamos pero mejor que instalemos previamente el nano, así que lo instalamos:
apk add nano
Abrimos el archivo de los repositorios y eliminamos el #
de las líneas que vienen comentadas. Éstas son: main, community y testing.
nano /etc/apk/repositories
Actualizamos los paquetes:
apk update
apk upgrade
Instalando Docker y Portainer
Docker
Comenzamos por instalar Docker y para ello basta con:
apk add docker
apk add docker-compose
Para iniciar el servicio de Docker daemon al inicio:
rc-update add docker boot
service docker start
Para comprobar el estado del servicio:
service docker status
En el caso de que el servicio estuviera apagado, lo iniciamos y comprobamos nuevamente:
service docker start
service docker status
Portainer
Ahora vamos con la instalación de Portainer. Para ello toma nota del sitio siguiente:
Creamos el volumen que Portainer Server usará para almacenar su base de datos:
docker volume create portainer_data
Si quieres verificar el volume recién creado puedes escribir:
docker volume inspect portainer_data
Y verás algo como lo siguiente:

Ahora, descargamos e instalamos el contenedor de Portainer Server:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
--restart=always -v \
/var/run/docker.sock:/var/run/docker.sock -v\
portainer_data:/data \
portainer/portainer-ce:2.9.3
Realmente, es toda una línea:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Al ejecutar esta línea de comando nos dice que no puede encontrar la imagen de Portainer en el sistema, con lo cual la descarga la última imagen existente de portainer/portainer -ce.

De forma predeterminada, Portainer genera y utiliza un certificado SSL auto-firmado para asegurar el puerto 9443. Alternativamente, puede proporcionar su propio certificado SSL durante la instalación o mediante la interfaz de usuario de Portainer, una vez que se completa la instalación.
El servidor de Portainer ha sido instalado. Puedes comprobar si el contenedor del servidor de Portainer se ha iniciado ejecutando docker ps:
docker ps

Si necesitas reiniciar el servicio de Portainer haríamos:
docker restart portainer
Nos vamos al navegador y escribimos la IP de la VM y el puerto de acceso:
https://192.168.1.79:9443

Una vez dentro, ya podemos utilizar el Portainer.

Instalando Pi-hole
Busca la imagen de Pi-Hole en local y al no encontrarla la descarga del sitio oficial de Pi-Hole de Docker.
docker search pihole/pihole:latest
docker pull pihole/pihole:latest
Para ver las imágenes descargadas ejecuta:
docker images
Para ejecutar el contenedor de pihole:
docker run -it pihole/pihole:latest
Realmente ejecuta el comando en un nuevo contenedor. Este comando run primero crea una capa de contenedor en la que se puede escribir sobre la imagen especificada y luego la inicia con el comando especificado.
Este ejemplo, ejecuta un contenedor usando la imagen más reciente de pihole. La combinación de las opciones -i y -t brindan acceso interactivo del Shell al contenedor.
Nota: Pudiera ser que no funcionara a la primera. Entonces quizá sea mejor utilizar un docker-compose.yml con el siguiente contenido:
version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
# For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
- "80:80/tcp"
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: elquesea
# Volumes store your data between container upgrades
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add:
- NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
restart: unless-stopped
Accediendo a Pi-Hole
Para acceder a nuestro contenedor de pihole basta usar el navegador, escribiendo la IP de nuestra MV. Esto es: http://192.168.1.79
o http://192.168.1.79/admin/index.php
Configurando Portainer
Portainer es un conjunto de herramientas de administración de código abierto que nos permite construir, administrar y mantener entornos Docker de un modo más cómodo.
Nos vamos a https://192.168.1.79:9443
y seleccionamos el modo de environment:

E instalamos Docker Standalone

Podemos visualizar nuestra lista de contenedores creados. En este caso, pihole y portainer:

Si clicas en uno de los contenedores se desplegarán mas opciones específicas:

Algunos aspectos a considerar
Network Time Protocol (NTP) es un protocolo cliente-servidor. Un dispositivo cliente puede solicitar periódicamente información de tiempo de un servidor NTP y éste responde a las solicitudes con información de tiempo que el cliente puede usar para fines de sincronización.
La mayoría de los SO vienen con herramientas integradas para la sincronización automática, sin embargo, existen herramientas de terceros que brindan funciones mejoradas y mejor sincronización.
Links
Alpine Linux
Docker
Portainer
Pi-hole
Misceláneas
Last updated
Was this helpful?