Questo tutorial si concentrerà su come creare un'immagine Docker personalizzata basata su Ubuntu con Apache servizio installato. L'intero processo sarà automatizzato utilizzando un Dockerfile .
Le immagini Docker possono essere create automaticamente da file di testo, denominati File Docker . Un file Docker contiene istruzioni dettagliate o comandi utilizzati per creare e configurare un'immagine Docker.
Requisiti
- Installa Docker e scopri la manipolazione del container Docker – Parte 1
- Distribuisci ed esegui applicazioni in Docker Containers – Parte 2
Fondamentalmente, un file Docker contiene varie istruzioni per creare e configurare un contenitore specifico in base alle tue esigenze. Le seguenti istruzioni sono le più utilizzate, alcune delle quali obbligatorie:
FROM
=Obbligatorio come prima istruzione in un file Docker. Indica a Docker di estrarre l'immagine di base da cui stai creando la nuova immagine. Usa un tag per specificare l'immagine esatta da cui stai costruendo:
Ex: FROM ubuntu:20.04
MAINTAINER
=Autore dell'immagine buildRUN
=Questa istruzione può essere utilizzata su più righe ed esegue qualsiasi comando dopo la creazione di un'immagine Docker.CMD
=Esegui qualsiasi comando all'avvio dell'immagine Docker. Usa solo un'istruzione CMD in un Dockerfile.ENTRYPOINT
=Uguale a CMD ma utilizzato come comando principale per l'immagine.EXPOSE
=Indica al contenitore di rimanere in ascolto sulle porte di rete durante l'esecuzione. Per impostazione predefinita, le porte del contenitore non sono raggiungibili dall'host.ENV
=Imposta le variabili di ambiente del contenitore.ADD
=Copia risorse (file, directory o file da URL).
Passaggio 1:creazione o scrittura del repository Dockerfile
1. Per prima cosa, creiamo una sorta di Dockerfile repository per riutilizzare i file in futuro per creare altre immagini. Crea una directory vuota da qualche parte in /var
partizione dove creeremo il file con le istruzioni che serviranno per costruire la nuova immagine Docker.
# mkdir -p /var/docker/ubuntu/apache # touch /var/docker/ubuntu/apache/Dockerfile
2. Quindi, inizia a modificare il file con le seguenti istruzioni:
# vi /var/docker/ubuntu/apache/Dockerfile
Estratto del file Doker:
FROM ubuntu MAINTAINER your_name <[email protected]> RUN apt-get -y install apache2 RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html EXPOSE 80 CMD /usr/sbin/apache2ctl -D FOREGROUND
Ora, esaminiamo le istruzioni del file:
La prima riga ci dice che stiamo costruendo da un Ubuntu Immagine. Se non viene inviato alcun tag, pronuncia 14:10 ad esempio, l'ultima immagine da Docker Hub viene utilizzato.
Nella seconda riga, abbiamo aggiunto il nome e e-mail del creatore di immagini. I prossimi due RUN le righe verranno eseguite nel contenitore durante la creazione dell'immagine e installeranno Apache demone e eco del testo nella pagina Web di Apache predefinita.
L'ESPOSIZIONE la riga indicherà il Docker container in ascolto sulla porta 80 , ma il porto non sarà disponibile all'esterno. L'ultima riga indica al container di eseguire il servizio Apache in primo piano dopo l'avvio del container.
3. L'ultima cosa che dobbiamo fare è iniziare a creare l'immagine eseguendo il comando seguente, che creerà localmente una nuova immagine Docker denominata ubuntu-apache
in base al Dockerfile creato in precedenza, come mostrato in questo esempio:
# docker build -t ubuntu-apache /var/docker/ubuntu/apache/
4. Dopo che l'immagine è stata creata da Docker , puoi elencare tutte le immagini disponibili e identificare la tua immagine eseguendo il seguente comando:
# docker images
Fase 2:esegui il contenitore e accedi ad Apache dalla LAN
5. Per eseguire il container continuamente (in background) e accedere ai servizi esposti (porte) del container dall'host o da un'altra macchina remota nella tua LAN, esegui il comando seguente sul prompt del tuo terminale host:
# docker run -d -p 81:80 ubuntu-apache
Qui, il -d
l'opzione esegue ubuntu-apache
contenitore in background (come demone) e il -p
l'opzione mappa la porta del container 80 alla tua porta localhost 81 . L'accesso alla LAN esterna al servizio Apache può essere raggiunto tramite la porta 81 solo.
Il comando Netstat ti darà un'idea di quali porte sta ascoltando l'host.
Dopo che il contenitore è stato avviato, puoi anche eseguire docker ps
comando per visualizzare lo stato del contenitore in esecuzione.
6. La pagina web può essere visualizzata sul tuo host dalla riga di comando usando curl utilità rispetto all'indirizzo IP della macchina, all'host locale o all'interfaccia di rete docker sulla porta 81. Utilizzare la riga di comando IP per mostrare gli indirizzi IP dell'interfaccia di rete.
# ip addr [List nework interfaces] # curl ip-address:81 [System Docker IP Address] # curl localhost:81 [Localhost]
7. Per visitare la pagina Web del contenitore dalla rete, apri un browser in una posizione remota e utilizza il protocollo HTTP, l'indirizzo IP della macchina su cui è in esecuzione il contenitore, seguito dalla porta 81 come illustrato nell'immagine seguente.
http://ip-address:81
8. Per avere un'idea di quali processi sono in esecuzione all'interno del contenitore, immetti il seguente comando:
# docker ps # docker top <name or ID of the container>
9. Per interrompere il problema del contenitore docker stop
comando seguito dall'ID o dal nome del contenitore.
# docker stop <name or ID of the container> # docker ps
10. Nel caso in cui desideri assegnare un nome descrittivo al contenitore, usa il --name
opzione come mostrato nell'esempio seguente:
# docker run --name my-www -d -p 81:80 ubuntu-apache # docker ps
Ora puoi fare riferimento al contenitore per la manipolazione (start, stop, top, statistiche, ecc.) solo utilizzando il nome assegnato.
# docker stats my-www
Passaggio 3:crea un file di configurazione a livello di sistema per Docker Container
11. Su CentOS/RHEL puoi creare un sistema file di configurazione e gestisci il container come fai normalmente per qualsiasi altro servizio locale.
Ad esempio, crea un nuovo file systemd chiamato, diciamo, apache-docker.service
utilizzando il seguente comando:
# vi /etc/systemd/system/apache-docker.service
apache-docker.service estratto del file:
[Unit] Description=apache container Requires=docker.service After=docker.service [Service] Restart=always ExecStart=/usr/bin/docker start -a my-www ExecStop=/usr/bin/docker stop -t 2 my-www [Install] WantedBy=local.target
12. Dopo aver finito di modificare il file, chiudilo, ricarica il demone systemd per riflettere le modifiche e avvia il contenitore eseguendo i seguenti comandi:
# systemctl daemon-reload # systemctl start apache-docker.service # systemctl status apache-docker.service
Questo era solo un semplice esempio di cosa puoi fare con un semplice Dockerfile ma puoi pre-creare alcune applicazioni piuttosto sofisticate che puoi avviare in pochi secondi con risorse e sforzi minimi.
Ulteriori letture:
Parte 4 :Come monitorare i contenitori Docker in Linux