💾 Premessa
Da qualche mese sto imparando e mi sto formando sul mondo Kubernates e sul modo dei container Docker. Per fare pratica con questi strumenti mi sono cimentato nella configurazione ed installazione di una macchina virtuale basata su Alpine Linux in VirtualBox. Riporto qui degli appunti per non dimenticarmene.
Obiettivo
Avere a disposizione una macchina virtuale leggera che permetta di sperimentare i servizi offerti dai container docker senza “sporcare” il proprio sistema operativo Windows 10.
Questa soluzione aggiunge uno strato ulteriore al motore docker ma permette di poter provare e riprovare senza fare danni. Useremo poi una connessione via ssh dal nostro terminale in modo da avere a disposizone il copia incolla ed altre facilities
Occorrente
- Virtualbox installato. https://www.virtualbox.org/
- Immagine .iso di Alpine Linux. Ho scelto la versione virtual che pesa solo 40 MB. https://alpinelinux.org/downloads/
Configurazione iniziale
Le impostazioni che ho scelto per la macchina virtuale sono:
- RAM: 3072 MB considerando che la mia postazione ne ha 16 GB
- HDD: 8 GB (creando subito un disco fisso virtuale)
- Tipologia: VDI Virtualbox disk image
- Allocazione dinamica
- File creato nella posizione di default
Aggiustamenti pre-installazione
Caricare l’immagine iso scaricata di Alpine Linux nel cdrom virtuale della macchina virtuale dal menu Impostazioni -> Archiviazione -> scegliere l’immagine iso scaricata
Primo avvio e installazione
- Alla login eseguire l’accesso come utente: root (non vi verrà chiesta la password) NB: la tastiera è americana quindi il carattere ’-’ è sul tasto ’?’
- Lanciare il comando per installare Alpine Linux setup-alpine. Seguiranno dei passi che riporto di seguito con le scelte fatte in corsivo.
- Se avete la tastiera italiana scegliere come keyboard layout it.
- Come variante se avete una tastiera windows it-winkeys.
- Come hostname ho scelto alpine-docker
- Configurare l’interfaccia di rete eth0
- Ip address for eth0 -> dhcp
- Do you want to do any manual network configuration? -> no
- Inserire la password di root -> quella che volete
- Timezone -> Europe/Rome
- Proxy -> nel mio caso non ho un proxy da aggiungere quindi none
- NTP client -> chrony come suggerito
- Mirror -> 1 (si può individuare un mirror italiano in seguito)
- SSH server -> openssh
- disco da usare -> sda
- How would you like to use it? -> sys che è la scelta consigliata per le macchine virtuali.
- Erase the above disk -> y
- al termine spegnere la macchina virtuale (non riavviare altrimenti verrà rilanciato il cdrom live)
Configurazioni post installazione
- Andare in impostazioni della macchina virtuale e rimuovere il disco cd iso dal lettore cdrom virtuale.
- Avviare la macchina virtuale
Abilitare i repository edge community e testing
Ottimo adesso prima di installare Docker dobbiamo abilitare alcuni repository non stable. Per farlo dobbiamo eseguire il comando:
vi /etc/apk/repositories
e decommentare le righe con edge/community e edge/testing. Una volta fatto aggiorniamo i repository con il comando:
apk update
Installazione pacchetti aggiuntivi
Installeremo i seguenti pacchetti utili:
- nano (opzionale)
- net-tools (opzionale)
- virtualbox guest additions
- docker
- docker-compose
con il comando:
apk add nano virtualbox-guest-additions virtualbox-guest-modules-virt docker py-pip python-dev libffi-dev openssl-dev gcc libc-dev make net-tools
Al termine andiamo ad abilitare Docker engine all’avvio del sitema operativo con il comando:
rc-update add docker boot
Installiamo docker compose con il comando:
pip install docker-compose
Infine spegniamo la macchina virtuale
Accesso da Windows
Il modo più semplice che ho trovato per accedere alla macchina virtuale con Docker installato sul quale far girare tutti i servizi contenerizzati è andare in VirtualBox in Impostazioni -> Rete ed aggiungere una scheda di rete “solo host” come seconda interfaccia di rete. Questo trucco ci permetterà di accedere da Windows alla macchina virtuale utilizzando un indirizzo di rete assegnato da VirtualBox ed accessibile dal host (Windows 10 nel mio caso). Purtroppo questa interfaccia di rete non vedrà internet, nel senso che non sarà in grado di navigare attraverso il gateway di default.
Ora per ovviare a questa cosa la strategia è quella di avere la prima scheda eth0 in NAT e DHCP con la rete del host (winsows 10) e la scheda eth1 in “solo host” con un indirizzo fisso che scegliamo noi a partire da quanto è visibiel dal menu File di VirtualBox, Gestore di rete dell’Host come in figura. Io ho scelto di impostare l’indirizzo 192.168.56.103 dell’interfaccia eth1 (perchè il 102 l’ho impostato già per un altra macchina virtuale).
Una volta avviata la macchina bisognerà configurare la eth1 come detto sopra con il comando:
nano /etc/network/interfaces
ed andando ad impostare il file come segue:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
hostname alpine-docker
auto eth1
iface eth1 inet static
address 192.168.56.103
netmask 255.255.255.0
Riavviare la macchina virtuale. Da adesso potrò accedere a tutti i servizi eseguiti in docker all’indirizzo 192.168.56.103:porta del servizio
Permettere l’accesso dell’utenza root via ssh per PuTTY
L’ultimo passo è quello di permettere l’accesso con un client ssh dalla macchina host attraverso ssh modificando il file di configurazione:
vi /etc/ssh/sshd_config
e decommentare la voce PermitRootLogin ed impostarla a yes
PermitRootLogin yes
Riavviare il servizio:
service sshd restart
Ora che abbiamo l’indirizzo possiamo tranquillamente collegarci via ssh con un client come PuTTY.
EXTRA: Mettiamo un po’ di AWS nella nostra VM
Giocando con la macchina virtuale appena installata si possono fare cose molto interessanti come quella di mettere in piedi un ambiente di prova dei servizi Amazon AWS. Per fare ciò possiamo sfruttare un progetto molto interesante chiamato localstack. L’istallazione avviene con i seguenti comandi da terminale:
apk add groff less
pip install localstack
pip install awscli-local
localstack start
A questo punto potete usare la CLI awslocal per configurare i containers dei servizi mock di AWS.
Elenco immagini docker utili
- Tutti i servizi AWS in un’unica immagine docker: https://github.com/localstack/localstack
- AWS SQS: https://github.com/roribio/alpine-sqs
- AWS Kinesis: https://github.com/vsouza/docker-Kinesis-local
- Awesome Compose. Una lista di servizi web e non solo. https://github.com/docker/awesome-compose
- InfluxDB + Grafana + Telegraf https://github.com/philhawthorne/docker-influxdb-grafana
Riferimenti
- https://wiki.alpinelinux.org/wiki/Install_Alpine_on_VirtualBox
- https://wiki.alpinelinux.org/wiki/Installation#Installation_Handbook
- https://wiki.alpinelinux.org/wiki/VirtualBox_guest_additions
- https://wiki.alpinelinux.org/wiki/Docker
- https://mauriziosiagri.wordpress.com/tag/permitrootlogin/
- https://gist.github.com/kennwhite/959d47a77070d365ad60