Apache Docker Compose esempio configurazione

Negli articoli precedenti abbiamo visto come installare Docker e Docker Compose su MacOS e Docker Compose su Debian. Oggi approfondiamo il tema e vediamo come installare e configurare Apache su Docker Compose.

Abbiamo parlato ampiamente negli articoli precedentemente elencati dei vantaggi offerti dai container, e delle versioni contenerizzate dei software in generale. Di cosa parlo? Prima di tutto della facilità di porting tra sistemi operativi diversi. Per non parlare del fatto che possiamo evitarci fastidiose operazioni di compilazione o di istallazione che richiedono privilegi di root.

Indice dei contenuti

Let’s go!

Apache Docker Compose prerequisiti

Affinché possiamo configurare il nostro Webserver Apache su Docker Compose, sarà prima necessario verificare che abbiamo Docker installato sulla nostra macchina e che ci sia il plugin Compose.

Verifica Docker Compose su Linux

Se hai seguito la nostra guida d’installazione di Docker su Linux, sai che il modo per verificare la sua presenza è quello di lanciare il comando:

docker-compose 
ShellScript

Nel caso non siate nella cartella dedicata a Docker Compose è probabile che riceviate un messaggio simile a:

docker@Fabios-MacBook-Pro ~ % docker-compose      

Usage:  docker compose [OPTIONS] COMMAND

Docker Compose

Options:
      --ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default
                                   "auto")
      --compatibility              Run compose in backward compatibility mode
      --env-file string            Specify an alternate environment file.
  -f, --file stringArray           Compose configuration files
      --parallel int               Control max parallelism, -1 for unlimited (default -1)
      --profile stringArray        Specify a profile to enable
      --project-directory string   Specify an alternate working directory
                                   (default: the path of the, first specified, Compose file)
  -p, --project-name string        Project name
ShellScript

Questo è sintomatico del fatto che Docker Compose sia installato sul vostro server. A questo punto non vi resta che andare nella home directory che avete dedicato a Compose, all’interno della quale troverete il file docker-compose.yml che sarà quello su cui andremo a lavorare per configurare il nostro Webserver Apache httpd.

Verifica Docker Compose su MacOS

Su MacOS in realtà non ci sono molte verifiche da eseguire. Come avrete notato nel tutorial dedicato all’installazione di Docker su MacOS, quando andremo a Installare Docker, verrà installato automaticamente anche Compose. Pertanto, l’unica verifica da fare è quelle di controllare che Docker Desktop sia installato sul vostro Mac.

Per farlo sarà sufficiente premere contenporaneamente i tasti Command + Spazio e scrivere Docker. Dovrebbe apparire una schermata simile a questa:

docker desktop macos
docker desktop macos

Se il primo risultato è quello che vedete nell’immagine qui sopra, allora siete pronti.

httpd su docker hub

Una volta accertati che il Compose è disponibile sulla nostra macchina possiamo aprire il nostro file yaml per prepararci a scrivere le righe necessarie al raggiungimento del nostro obiettivo.

Ovviamente prima di iniziare a modificare il file, dobbiamo decidere quale versione di Apache dobbiamo installare. In questo esempio utilizzeremo un’immagine base di Apache. Per trovare l’immagine, la cosa migliore da fare è quella di visitare Docker Hub e cercare per httpd. Ecco quello che appare e che dovremo scegliere se cerchiamo proprio per httpd:

httpd docker hub
httpd docker hub

Quindi, cliccando sulla scritta httpd in alto a sinistra, andremo nel dettaglio del container che ci fornirà le istruzioni per utilizzare httpd tramite Docker. E possiamo vedere che il comando da utilizzare è:

docker pull httpd:latest
ShellScript

Vediamo come adattare il comando pull all’interno del file docker-compose.yml.

Esempio docker-compose.yml per Apache

Entriamo subito nel vivo. Se volessimo far partire Apache httpd senzaDocker compose, probabilmente lanceremo un comando simile a:

docker run -d --name apache-app -p 8080:80 -v $(PWD)/docroot:/usr/local/apache2/htdocs/ httpd:latest
ShellScript

Ovviamente esistono anche altre opzioni aggiuntive che fanno sì che il container httpd venga eseguito come processo daemon e rimuova il container al termine dell’esecuzione.

Tutta la configurazione delle porte, la denominazione dei container e la mappatura del volume Docker possono essere inserite in un file docker-compose.yaml. Vediamolo:

version: '3.9'
services:
  apache:
    image: httpd:latest
    hostname: apache-app
    container_name: apache-app
    volumes:
      - $PWD/apache/htdocs:/var/www/html 
      - $PWD/apache/logs:/var/log/apache2
    ports:      
      - 8080:80
Docker

Start container Apache con docker-compose up

A questo punto, l’unica cosa che dovremo fare per far partire il container con Apache httpd sarà lanciare, dalla directory in cui è presente il file di configurazione appena scritto, il comando:

  docker-compose up -d
ShellScript

Come potete vedere il comando docker-compose è seguito da up -d. Dove “up” significa “start” e “d” significa daemon, ovvero come daemon in background. Se facessimo lo start con il solo up, e poi facessimo CTRL+C, il container si stopperebbe.

Se invece volete vedere se il container sta girando correttamente, sarà sufficiente lanciare il comando:

docker-compose ps -a
ShellScript

Vediamo più dettagliatamente la configurazione riportata nel file di configurazione con particolare attenzione all’aspetto dei volumes.

La string su riportata:

volumes:
  - $PWD/apache/htdocs:/var/www/html 
  - $PWD/apache/logs:/var/log/apache2
ports:      
  - 8080:80
ShellScript

Questo sta a significare che la docroot di Apache del container verrà copiata nel nostro path locale: $PWD/apache/htdocs, dove $PWD rappresenta la cartella in cui è collocato il nostro file docker-compose.yml. Ecco come appare la mia cartella contenente il file yml:

fabioiegri@Fabios-MacBook-Pro-13 docker % ls -latr
total 48
-rw-r--r--   1 fabioiegri  staff   123 Feb 15 16:30 .env
drwxr-xr-x@  9 fabioiegri  staff   288 Mar  1 13:54 apache
-rw-r--r--@  1 fabioiegri  staff  2177 Mar  1 14:12 docker-compose.yml
ShellScript

Come potete vedere c’è una cartella che si chiama “apache“. Questo ci permetterà di eseguire una mappatura tra i i files del container Apache appena configurato e il nostro file-system. Se quindi volessimo aggiungere una pagina html al nostro container, ci basterà copiarlo nella cartella locale $PWD/apache/htdocs.

Allo stesso modo possiamo ragionare per le porte. Ovvero, la porta 8080 locale corrisponderà alla porta 80 del container Docker di Apache httpd configurato con Docker Compose. Se quindi volessimo visitare l’istanza Apache appena configurata sarà sufficiente aprire il browser e richiamare la pagina: http://localhost:8080 che erogherà i contenuti dalla porta 80 del container appena creato.

Conclusioni

Abbiamo visto come configurare Apache httpd con Docker Compose. I passi da seguire sono veramente semplici. Questa è solo una configurazione base. Allo stesso modo infatti si potranno configurare Apache con PHP e Mysql in modo da creare il nostro stack LAMP e, perchè no, installare anche una versione di WordPress. Ma di questo ne parleremo in un articolo successivo.

A questo punto, spero che l’articolo vi sia risultato utile, in tal caso, potreste condividerlo 🙂 .

Se avete dei dubbi o se volete condividere il vostro punto di vista, scrivete nei commenti e cercherò di rispondere al più presto.

Se volete restare in contatto, vi lascio anche il link della mia newsletter di LinkedIn.

2 commenti

  1. Andrea F.

    Ciao Fabio, complimenti per questo utile articolo, che ho trovato un pò per caso.
    Funziona tutto, e da browser posso vedere la pagina “It works!”.
    Ma ora vorrei inserire una mia pagina, e non so dove collocarla, Se la metto nella cartella mappata apache/htdocs, non si vede nulla.
    Qualche suggerimento? Grazie.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *