GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come creare e configurare automaticamente immagini Docker personalizzate con Dockerfile – Parte 3

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:

  1. 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
  1. MAINTAINER =Autore dell'immagine build
  2. RUN =Questa istruzione può essere utilizzata su più righe ed esegue qualsiasi comando dopo la creazione di un'immagine Docker.
  3. CMD =Esegui qualsiasi comando all'avvio dell'immagine Docker. Usa solo un'istruzione CMD in un Dockerfile.
  4. ENTRYPOINT =Uguale a CMD ma utilizzato come comando principale per l'immagine.
  5. 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.
  6. ENV =Imposta le variabili di ambiente del contenitore.
  7. 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
Docker
  1. Come utilizzare le immagini Docker, i contenitori e i file Docker in modo approfondito

  2. Come utilizzare un Dockerfile per creare un'immagine Docker

  3. Come imballare e trasferire immagini Docker da un server all'altro

  4. Come modificare le immagini Docker

  5. Come creare un'immagine Docker da un contenitore e un file Docker

Come ripulire ed eliminare le immagini Docker

Come spingere e tirare le immagini Docker con il registro dei contenitori di DigitalOcean

Come creare immagini Docker in una pipeline CI GitLab

Come creare un'immagine di Windows Docker con il tag di build Docker

Come creare un'immagine Docker personalizzata con Dockerfile

Come creare e inviare un'immagine Docker al repository Docker Hub