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.