L'ultima versione di RHEL 8 / CentOS 8. Red Hat ha creato i propri strumenti, buildah
e podman
, che mirano ad essere compatibili con le immagini docker esistenti e funzionano senza fare affidamento su un demone, consentendo la creazione di container come normali utenti, senza la necessità di permessi speciali (con alcune limitazioni:ad es. al momento della scrittura, non è ancora possibile mappa le porte host al container senza privilegi).
Tuttavia, mancano ancora alcuni strumenti specifici:un equivalente di docker-compose
, ad esempio non esiste ancora. In questo tutorial vedremo come installare ed eseguire Docker CE originale su Rhel8 utilizzando il repository Docker ufficiale per CentOS7.
In questo tutorial imparerai:
- Come abilitare il repository docker-ce su RHEL 8 / CentOS 8
- Come installare docker e docker-compose su RHEL 8 / CentOS 8
Docker installato su RHEL 8 / CentOS 8
Requisiti e convenzioni software utilizzati
Categoria | Requisiti, convenzioni o versione del software utilizzata |
---|---|
Sistema | RHEL 8 / CentOS 8 |
Software | Docker versione 18.09.2 |
Altro | Autorizzazione a eseguire il comando con privilegi di root. |
Convenzioni | # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo comando$ – richiede che i comandi linux dati vengano eseguiti come un normale utente non privilegiato |
Cos'è Docker?
Docker è un progetto open source che consente la creazione e la distribuzione di applicazioni all'interno di containers
, che sono ambienti standardizzati che possono essere facilmente replicati, indipendentemente dal sistema host. Mentre in Red Hat Enterprise Linux 7 Docker era ufficialmente supportato, nella nuova versione di questo sistema operativo open source, è stato sostituito da una serie di altri strumenti sviluppati dalla stessa Red Hat:buildah
e podman
.
Utilizzando un repository esterno, tuttavia, è ancora possibile installare Docker CE (Community Edition). In questo tutorial vedremo come installare questo repository; si noti tuttavia che originariamente era pensato per CentOS 7
(un clone RHEL) e la versione community di Docker non ha supporto ufficiale per Red Hat Enterprise Linux. Per questo motivo, esistono problemi:li discutiamo di seguito.
Aggiunta del repository esterno
Poiché Docker non è disponibile su RHEL 8 / CentOS 8, è necessario aggiungere un repository esterno per ottenere il software. In questo caso utilizzeremo il repository ufficiale di Docker CE CentOS:questo è, al momento in cui scriviamo, l'unico modo per installare Docker CE su RHEL 8 / CentOS 8.
Il dnf config-manager
utility ci consente, tra le altre cose, di abilitare o disabilitare facilmente un repository nella nostra distribuzione. Per impostazione predefinita, solo appstream
e baseos
i repository sono abilitati su Rhel8; dobbiamo aggiungere e abilitare anche il docker-ce
repo. Tutto quello che dobbiamo fare per portare a termine questo compito, è eseguire il seguente comando:
$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Possiamo verificare che il repository sia stato abilitato, osservando l'output del seguente comando:
$ sudo dnf repolist -v
Il comando sopra restituirà informazioni dettagliate su tutti i repository abilitati. Questo è ciò che dovresti vedere a questo punto:
Repo-id : docker-ce-stable Repo-name : Docker CE Stable - x86_64 Repo-revision: 1549905809 Repo-updated : Mon 11 Feb 2019 06:23:29 PM CET Repo-pkgs : 30 Repo-size : 618 M Repo-baseurl : https://download.docker.com/linux/centos/7/x86_64/stable Repo-expire : 172,800 second(s) (last: Mon 18 Feb 2019 10:23:54 AM CET) Repo-filename: /etc/yum.repos.d/docker-ce.repo Repo-id : rhel-8-for-x86_64-appstream-rpms Repo-name : Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs) Repo-revision: 1542158694 Repo-updated : Wed 14 Nov 2018 02:24:54 AM CET Repo-pkgs : 4,594 Repo-size : 4.9 G Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/appstream/os Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:55 AM CET) Repo-filename: /etc/yum.repos.d/redhat.repo Repo-id : rhel-8-for-x86_64-baseos-rpms Repo-name : Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs) Repo-revision: 1542158719 Repo-updated : Wed 14 Nov 2018 02:25:19 AM CET Repo-pkgs : 1,686 Repo-size : 925 M Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/baseos/os Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:56 AM CET) Repo-filename: /etc/yum.repos.d/redhat.repo Total packages: 6,310
Installazione di Docker-ce
Il docker-ce-stable
repository è ora abilitato sul nostro sistema. Il repository contiene diverse versioni di docker-ce
pacchetto, per visualizzarli tutti, possiamo eseguire:
$ dnf list docker-ce --showduplicates | sort -r docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
Quale versione installare? Bene, Red Hat sembra aver bloccato in qualche modo l'installazione di containerd.io
> 1.2.0-3.el7
, che è una dipendenza di docker-ce
. Per questo motivo, è sufficiente eseguire sudo dnf install docker-ce
comando, non funzionerà. Come vedremo tra un minuto, è ancora possibile aggirare questo problema; una volta docker-ce
è installato, tuttavia, diventa evidente un altro problema:fintanto che firewalld
, il gestore del firewall di sistema è abilitato, DNS resolution
all'interno dei contenitori Docker non funziona.
Questo è, ovviamente, un problema critico. Tuttavia, se vuoi comunque procedere con l'installazione, ecco i possibili metodi che possono essere utilizzati per evitare problemi di dipendenze:
- Installa una versione specifica di
docker-ce
che richiede una versione installabile dicontainerd.io
pacchetto; - Forza l'installazione fornendo il
--nobest
opzione - Installa l'ultimo
containerd.io
disponibile rpm manualmente;
Installa una versione specifica di docker-ce
Al momento della scrittura le versioni di docker-ce
installati senza problemi sono:
- docker-ce-3:18.09.1-3.el7
- docker-ce-18.06.3.ce-3.el7;
- docker-ce-17.12.1.ce-1.el7.centos
Per installare una versione specifica, tutto ciò che dobbiamo fare è fornire il nome completo del pacchetto, ad esempio:
$ sudo dnf install docker-ce-3:18.09.1-3.el7
Forza l'installazione di docker-ce con l'opzione –nobest
Normalmente, quando si installa un pacchetto, il miglior candidato disponibile viene selezionato da un repository. In questo caso, ad esempio, l'installazione dell'ultima versione di docker-ce
viene tentato (e fallisce). Usando il --nobest
opzione, possiamo modificare questo comportamento in modo che la prima versione di docker-ce
con dipendenze soddisfacenti è selezionato come “fallback”, in questo caso 3:18.09.1-3.el7
.
$ sudo dnf install --nobest docker-ce Dependencies resolved. Problem: package docker-ce-3:19.03.2-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed - cannot install the best candidate for the job - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded - package containerd.io-1.2.2-3.el7.x86_64 is excluded - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded ======================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================= Installing: docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 M Installing dependencies: containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 M docker-ce-cli x86_64 1:19.03.2-3.el7 docker-ce-stable 39 M container-selinux noarch 2:2.94-1.git1e99f1d.module+el8.0.0+4017+bbba319f rhel-8-for-x86_64-appstream-rpms 43 k tar x86_64 2:1.30-4.el8 rhel-8-for-x86_64-baseos-rpms 838 k libcgroup x86_64 0.41-19.el8 rhel-8-for-x86_64-baseos-rpms 70 k python3-policycoreutils noarch 2.8-16.1.el8 rhel-8-for-x86_64-baseos-rpms 2.2 M python3-libsemanage x86_64 2.8-5.el8 rhel-8-for-x86_64-baseos-rpms 127 k python3-setools x86_64 4.2.0-2.el8 rhel-8-for-x86_64-baseos-rpms 598 k checkpolicy x86_64 2.8-2.el8 rhel-8-for-x86_64-baseos-rpms 338 k python3-audit x86_64 3.0-0.10.20180831git0047a6c.el8 rhel-8-for-x86_64-baseos-rpms 85 k policycoreutils-python-utils noarch 2.8-16.1.el8 rhel-8-for-x86_64-baseos-rpms 228 k Skipping packages with broken dependencies: docker-ce x86_64 3:19.03.2-3.el7 docker-ce-stable 24 M Transaction Summary ======================================================================================================================================================= Install 12 Packages Skip 1 Package Total download size: 85 M Installed size: 351 M Is this ok [y/N]:
Installa manualmente l'ultimo pacchetto containerd.io disponibile
Se dobbiamo assolutamente installare l'ultima versione di docker-ce
, possiamo installare la versione richiesta di containerd.io
manualmente, eseguendo:
$ sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
Dopo aver installato il pacchetto, possiamo semplicemente installare l'ultimo docker-ce
:
$ sudo dnf install docker-ce Dependencies resolved. ======================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================= Installing: docker-ce x86_64 3:19.03.2-3.el7 docker-ce-stable 24 M Installing dependencies: docker-ce-cli x86_64 1:19.03.2-3.el7 docker-ce-stable 39 M tar x86_64 2:1.30-4.el8 rhel-8-for-x86_64-baseos-rpms 838 k libcgroup x86_64 0.41-19.el8 rhel-8-for-x86_64-baseos-rpms 70 k Transaction Summary ======================================================================================================================================================= Install 4 Packages Total download size: 65 M Installed size: 275 M Is this ok [y/N]:
Questa opzione è meno conveniente dal momento che containerd.io
il pacchetto non è installato come dipendenza di docker-ce
, pertanto non verrà rimosso automaticamente alla disinstallazione di quest'ultimo dal sistema.
Qualunque sia il metodo che utilizziamo per installare docker-ce
, come detto prima, al fine di effettuare DNS resolution
lavorare all'interno dei container Docker, dobbiamo disabilitare firewalld (potrebbe essere necessario anche un riavvio del sistema):
$ sudo systemctl disable firewalld
Avvia e abilita il demone Docker
Una volta docker-ce
è installato, dobbiamo avviare e abilitare il demone docker, in modo che venga avviato automaticamente anche all'avvio. Il comando che dobbiamo eseguire è il seguente:
$ sudo systemctl enable --now docker
A questo punto possiamo confermare che il demone è attivo eseguendo:
$ systemctl is-active docker active
Allo stesso modo, possiamo verificare che sia abilitato all'avvio, eseguendo:
$ systemctl is-enabled docker enabled
Installazione di Docker-Compose
Docker compose è un pacchetto molto utile che ci permette di gestire applicazioni multi-container, come ad esempio quelle basate sullo stack LAMP, dove ogni parte dell'ambiente (PHP, Apache, MariaDB) è fornita da un container dedicato (se sei interessato nell'argomento, dai un'occhiata al nostro tutorial sulla creazione di una pila di lampade basata su docker). Il pacchetto non è disponibile su Rhel8, né esiste un equivalente da utilizzare con gli strumenti Rhel. Tuttavia, è possibile installarlo in molti modi:continua a leggere e decidi cosa ti si addice di più.
Installazione globale
Il modo in cui dovremmo installare docker-compose
varia a seconda se vogliamo installarlo globalmente o solo per un singolo utente. Al momento in cui scrivo, l'unico modo per installarlo globalmente è scaricare il binario dalla pagina github del progetto:
$ curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o docker-compose
Una volta scaricato il file binario, lo spostiamo in /usr/local/bin
e lo rendiamo eseguibile:
$ sudo mv docker-compose /usr/local/bin && sudo chmod +x /usr/local/bin/docker-compose
Il /usr/local
la gerarchia non è scelta a caso. Questa struttura di directory è realizzata per essere utilizzata per i file installati manualmente dall'amministratore locale (per il software compilato dal sorgente, ad esempio), in modo da garantire la separazione dal software installato con il gestore di pacchetti di sistema.
Sebbene sia possibile per un utente normale eseguire comandi relativi alla finestra mobile se fa parte della docker
group (il gruppo viene creato automaticamente quando installiamo docker-ce), per impostazione predefinita devono essere eseguiti con privilegi di root per motivi di sicurezza. Quando abbiamo bisogno di fare quest'ultimo, dal momento che /usr/local/bin
directory non è nel PATH
dell'utente root , dobbiamo chiamare il file binario specificandone la posizione o aggiungere /usr/local/bin
al PATH
si. La prima opzione è quella che consiglio in questo caso.
Installazione per utente
Se il nostro utente fa parte della docker
gruppo, e quindi è consentito eseguire comandi docker, e poiché docker-compose
è disponibile come pacchetto python, possiamo anche installarlo usando pip
, il gestore di pacchetti Python. Innanzitutto, assicurati che pip stesso sia installato:
$ sudo dnf install python3-pip
Per ottenere docker-compose eseguiamo:
$ pip3.6 install docker-compose --user
Tieni presente che anche se fosse possibile eseguire pip come root per installare un pacchetto a livello globale, questo non è raccomandato e altamente sconsigliato.
Testo Docker
Abbiamo installato docker e docker-compose, ora per verificare che tutto funzioni come previsto, possiamo provare a costruire un'immagine ed eseguire un container:in questo caso utilizzeremo il httpd
ufficiale uno. Tutto quello che dobbiamo fare è lanciare il seguente comando:
sudo docker run --rm --name=linuxconfig-test -p 80:80 httpd
Dal momento che il httpd
l'immagine non esiste localmente verrà automaticamente recuperata e creata. Infine, verrà lanciato in primo piano un contenitore basato su di esso (verrà rimosso automaticamente quando viene interrotto). Dovremmo essere in grado di vedere It works!
messaggio quando raggiungiamo l'ip della nostra macchina tramite browser.
Conclusioni
Red Hat Enterprise Linux 8 non supporta Docker:su questa distribuzione è stato sostituito da strumenti propri di Red Hat come buildah
e podman
, che sono compatibili con Docker ma non necessitano di un'architettura server/client per essere eseguiti. L'utilizzo di strumenti nativi, ove possibile, è sempre la strada consigliata, ma per un motivo o per l'altro potresti comunque voler installare il Docker originale. In questo tutorial abbiamo visto come è possibile installare Docker CE
su Rhel8, utilizzando il repository Docker ufficiale per CentOS7, che è un clone compatibile al 100%.
Questa non è una soluzione ideale e, come abbiamo visto, al momento sono necessarie alcune soluzioni alternative per far funzionare Docker su RHEL8. Se sorgono nuovi problemi o vengono trovate soluzioni migliori ai problemi sopra menzionati, questo articolo verrà aggiornato di conseguenza. Resta sintonizzato.