Skip to content

Setup Alpine Linux VM under Proxmox with Docker

Sample Values and Versions Used:

  • Proxmox Name: pve1
  • Proxmox VM install storage: vm_ct
  • Alpine Version: 3.23.2
  • Alpine VM ID: 888
  • Alpine Server Name: srv-docker-01

1. Download ISO to Proxmox

Get Alpine Docker ISO to Proxmox (assuming pve1 with ISO Images enabled on local)

  • Navigate to (Alpine Linux Downloads)[https://www.alpinelinux.org/downloads/]
  • Right-Click and copy link Standard x86_64 image (for Proxmox install)
    • (Standard 3.23.2)[https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/x86_64/alpine-standard-3.23.2-x86_64.iso]
  • In Proxmox, navigate by clicking through pve1|local|ISO Images:
    • Click Download from URL.
    • Paste https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/x86_64/alpine-standard-3.23.2-x86_64.iso into URL box.
    • Click Query URL.
    • Click Download.

2. Create VM with Alpine Linux

  • Right-Click pve1 and choose Create VM.
    • General
      • VM ID: 888
      • Name: srv-docker-01
      • Click Next.
    • OS
      • Click Next.
    • System
      • Select Qemu Agent
      • Click Next.
    • Disks
      • Storage: vm_ct
      • Disk size (GiB): 256 GB (Min 4GB) # Might want to use 256 GB if hosting something like IMMICH container
      • Click Next.
    • CPU
      • Cores: 2
      • Click Next.
    • Memory
      • Memory (MiB): 4096 (Min 1GB)
      • Click Next.
    • Network
      • Bridge: vmbr0 (default).
      • Click Next.
    • Confirm
      • Click Finish.

3. Start Alpine VM and setup server

3.1 Setup Alpine

root # Default login - no password setup-alpine # Start setup

Options: - keyb : us - variant : us - hostname: srv-docker-01 - network : (eth0) - ip addr : (dhcp) - manual : (n) - new pass: * - retype : * - tz : (utc) - proxy : (none) - mirrors : 1 - setup u : (no) - ssh svr : (openssh) - rootssh : (yes) - sshkey : (none) - disks : sda - diskuse : sys - erase : y

reboot

3.2 Optional: Create Static route for srv-docker-01 using required IP and MAC

ifconfig eth0 | grep -i "HWaddr" # Retrieve MAC as HWaddr

3.3 Unlock Community Repo

/etc/apk/repositories
...
http:// ... /community # Uncomment by removing first `#`
...

3.4 Optional: Update and Install packages (bash, sudo, vim, py3-pip)

Updated package index from the repositories
apk update 
Upgrade the Alpine Linux Package Manager (apk-tools) to latest version
apk add --upgrade apk-tools 

``` bash title="Upgrade available packages apk upgrade --available

``` bash title="Synchronize cached writes to persistent storage"
sync

Install bash, sudo, vim, py3-pip packages
apk add --no-cache qemu-guest-agent bash sudo vim py3-pip

3.5 Install QEMU agent for Proxmox

  • QEMU provides ability to report IP to Proxmox
Add packages
apk add --no-cache qemu-guest-agent
add local service to runlevel default
rc-update add local default
Determine available port
ls /dev | grep vport 
/etc/local.d/Qemu.start
#!/bin/sh
qemu-ga -d -p /dev/vport1p1 # port can be retrieved via 'ls /dev | grep vport'
Make /etc/local.d/Qemu.start executable
chmod +x /etc/local.d/Qemu.start

4. Install Docker

Install docker with compose (v2) ... no need for v1 (docker-compose)
apk add docker docker-cli-compose
rc-update add docker boot # Add docker service to start on boot
service docker start # Start docker service

Create docker Group with id 1000
addgroup -g 1000 docker
Create docker user with id 1000
adduser -G docker -u 1000 docker
Check created user and group
id docker # show uid, gid, groups
getent group | grep docker # show docker group
cat /etc/passwd | grep docker # show docker user

4.1 Add docker user to sudoers

/etc/sudoers.d/docker
docker ALL=(ALL:ALL) NOPASSWD: ALL
Change permissions to read by user and group
chmod 0440 /etc/sudoers.d/docker

4.2 Optional in case of error: permission denied while trying to connect to the docker API at unix:///var/run/docker.sock

Change permissions for docker.sock to docker group
sudo chown root:docker /var/run/docker.sock

4.3 Create SSH key for docker (log in as docker)

su - docker # run as docker
cd # change to home folder
ssh-keygen -t ed25519 -C "docker@srv-docker-01" -f /home/docker/.ssh/id_ed25519 -N "" # gen key

4.4 Optional: add existing public key for docker user

~/.ssh/authorized_keys
# Paste allowed public key(s)

5. Misc Client Config settings

VIM Config ~/.vimrc
syntax on
set background=dark
set number
colorscheme desert
set nocompatible
set showmode
~/.profile
export PS1="\[\033[0;33m\][\$(date +%Y-%m-%d)][\t]\[\033[0;36m\] [\u\[\033[0;37m\]@\[\033[0;36m\]\h]:\[\033[0;32m\]\w\[\033[0m\] \n$ "
alias ls='ls -la --color=auto'
#alias dps='docker ps  --format "{{.ID}}\t{{.Names}}   \t{{.Status}}\t\t{{.Ports}}"'
alias dps="docker ps -a --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}'"
alias dc='docker compose'
alias dcu='docker compose up -d'
alias dcl='docker compose logs -f'
alias dcd='docker compose down'

# dircolors --print-database
LS_COLORS=$LS_COLORS:'di=1;35:' ; export LS_COLORS
~/.gitconfig
[alias]
        st = status
        lg = log --pretty=format:'%C(red bold)%h%C(reset) - [%C(green bold)%ci%C(reset) %C(magenta bold)%an%C(reset)] %C(yellow bold)%d%Creset %C(white bold)%s%C(reset)'

6. Recurring Updates

Upgrade / update Alpine Linux
apk update
apk add --upgrade apk-tools 
apk upgrade --available
sync