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
- Apache Docker Compose prerequisiti
- Docker Hub e httpd
- Esempio docker-compose.yml per Apache
- Start container Apache httpd con docker-compose -up
- Conclusioni
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
ShellScriptNel 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
ShellScriptQuesto è 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:
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:
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
ShellScriptVediamo 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
ShellScriptOvviamente 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
DockerStart 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
ShellScriptCome 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
ShellScriptVediamo 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
ShellScriptQuesto 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
ShellScriptCome 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.
Principal Web Solutions Architect – Technology & Architecture Manager @ Accenture – Google Cloud Certified – Professional Cloud Architect
Parla di #web, #cloud, #websecurity, #webperformance e #webarchitecture
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.
Ciao Andrea.
Creando, per esempio, la pagina test.html e provando a richiamarla con:
http://miosito.xx/test.html, riesci a vederla?
Ovviamente, inutile dirlo, dovrai sostituire “miosito.xx” con l’FQDN che stai utilizzando.
Fammi sapere così proviamo ad andare avanti 🙂