/ Docker / Linux / Microsoft

WSL2 - Instalar Docker en Alpine Linux

Hola instalaremos Docker en Alpine WSL2

Para esto es necesario tener instalado el WSL2, sí lo último de Microsoft Windows para hacer Devs en Linux más cómodo. Sino lo tienes te recomiendo que visites este artículo:

Luego de tener el requerimiento, búscamos la "app" Alpine en el MS Store!

Lo instalamos para luego abrir la aplicación y entrar a su shell (ash o Almquist shell)!

Para esto hice un script que nos aliviará todo el trabajo de instalar Docker en Alpine. Descárgalo y crea el archivo, pero no te olvides que el "secuencia de fin de línea" debe ser LF para que pueda ser ejecutado como script en entornos Linux. Sino, puedes copiar y pegar comando por comando para hacer la instalación! 

# change to root and install packages
su -c "apk add sudo openrc curl python3 python3-dev nload htop"
# if your user doesn't exists then remove sudo passwords
USERNAME=$(whoami)
su -c "grep -qxF '${USERNAME} ALL=(ALL) NOPASSWD: ALL' /etc/sudoers || echo '${USERNAME} ALL=(ALL) NOPASSWD: ALL' | tee -a /etc/sudoers"
# install compilers
sudo apk add build-base
# install pip3
sudo apk add py3-pip
# upgrade pip3
sudo pip3 install pip -U
# install docker
sudo apk add docker
# mount cgroup
echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" | sudo tee -a /etc/fstab
# add perm docker
sudo usermod -aG docker ${USERNAME}
# get start script docker
curl https://gist.githubusercontent.com/richard24se/c41d7edde19ccb87ef8d1083822d4e26/raw/094d8a98aee2b10ea397ec210f06c3ae83be67ef/alpine.docker.service.sh --output ${HOME}/alpine.docker.service.sh
# configure start docker when logging
echo ". $HOME/alpine.docker.service.sh" > $HOME/.profile
# start docker
. $HOME/alpine.docker.service.sh
# verify docker note: first time with sudo
sudo docker info
# install packages reqs for docker-compose
sudo apk add gcc musl-dev libressl-dev libffi-dev make cargo
# install docker-compose
sudo pip3 install docker-compose
# verify docker-compose
docker-compose version
# cgroup systemd
cat << EOT > $HOME/alpine.cgroup.systemd.sh
if [ ! -d /sys/fs/cgroup/systemd ]; then
sudo mkdir /sys/fs/cgroup/systemd
echo "creating cgroup systemd folder..."
fi
if ! grep -qs '/sys/fs/cgroup/systemd' /proc/mounts; then
sudo mount -n -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
echo "mounting cgroup systemd folder..."
fi
EOT
# configure start cgroup systemd
echo ". $HOME/alpine.cgroup.systemd.sh" >> $HOME/.profile
# start cgroup systemd
. $HOME/alpine.cgroup.systemd.sh
# -----> customs <----- #
# timeout docker compose
grep -qxF "COMPOSE_HTTP_TIMEOUT=640000" /etc/environment || echo "COMPOSE_HTTP_TIMEOUT=640000" | sudo tee -a /etc/environment
# run portainer docker
if ! sudo docker ps --format '{{.Names}}' | grep -w portainer &> /dev/null; then
sudo docker volume create portainer_data
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
fi
# custom shell
VAR_PS1='export PS1="[033[02;90m]u@[033[02;90m]h [033[02;31m]W [033[02;32m]# [033[0m]"'
sudo sed -i "/PS1/c${VAR_PS1}" /etc/profile

Sigue bien los pasos del script, y al final podrás utilizar tranquilamente docker y docker-compose para tus desarrollos

Sabemos que es ligero, es decir súper minimal; sin embargo, un dato para tener en cuenta por qué usar Alpine es que su instalación completa con docker y docker-compose tiene un tamaño de 860MB, sumamente inferior a un ubuntu, que fácilmente puede pasar los 4GB.