Apache2

Vi har redan sett hur vi installerar Apache i Ubuntu. För att få igång det i Docker via en Dockerfile gör vi i stort sett likadant, fast med hjälp av kommandot RUN.

#Installera Apache2

Vi börjar med att kika på hur vi installerar Apache.

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get -y install apache2

CMD apachectl -D FOREGROUND

Med nyckelordet CMD talar vi om vilket kommando som ska köras vid uppstart. I detta fallet vill vi starta servern.

Vi bygger imagen med $ docker build -t username/imagename:tag ..

Vi kan i docker run-kommandot specificera vilken port vi vill mappa mot Apache:

$ docker run --rm -it -p 8080:80 username/imagename:tag

Här talar vi om att vi vill mappa den lokala porten 8080 till containerns port 80, vilket är default för webbservern. Om det enbart hade varit en annan Docker-container som behövt access till servern hade vi kunnat skippa flaggan -p i docker run-kommandot och använt EXPOSE 80 i Docker-filen istället. Men vi vill ju kunna nå den via webbläsaren och behöver då använda flaggan.

Vi har dock inga filer att visa eller tillgång till några. Vi tittar på hur vi kan skicka in våra egna filer på olika sätt.

#Apache’s default mapp

Som bekant servar Apache filerna från /var/www/html/. Om vi inte vill ändra i konfigurationsfilen kan vi enbart lägga vår kod i den mappen, förutsatt att vi har mappen example-site lokalt:

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get -y install apache2

COPY example-site/ /var/www/html/

CMD apachectl -D FOREGROUND

Nu når vi sidan i webbläsaren med localhost:8080.

#Config-fil

I början av kursen jobbade vi med Apache’s konfigurationsfil. Ett alternativ är att ha den lokalt och sedan byta ut den mot den vi utgick från när vi gjorde detta i VirtualBox, 000-default.conf. Ibland räcker inte Apache’s egna fil, utan vi vill såklart ha kontroll över den själva.

I exempelmappen finns en mall för en konfigurationsfil. Det förutsätts även att du har en lokal mapp med samma namn som den definierade site-variabeln, där någon index.html-fil finns.

Dockerfile:

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get -y install apache2

COPY example-site/ /var/www/html/
COPY ./example-site.conf /etc/apache2/sites-enabled/000-default.conf

CMD apachectl -D FOREGROUND

Här kopierar vi först in vår kod och lägger den i default-mappen, där Apache automatiskt servar sina filer. Sedan kopierar vi in vår egna konfigfil och byter ut konfigurationsfilen som Apache skapat, rakt in i sites-enabled/.

#Bygga och köra

Nu har vi allt på plats för att bygga vår image…

$ docker build -t username/imagename:tag .

…och köra den:

$ docker run --rm -p 8080:80 username/imagename:tag

Nu kan vi peka webbläsaren mot localhost:8080.

#Revision history

  • 2022-05-11: (B, lew) Uppdatering inför HT22.
  • 2019-03-14: (A, lew) Första versionen.

Document source.