Hvordan bygge og konfigurere tilpassede Docker-bilder automatisk med Dockerfile - Del 3


Denne opplæringen vil konsentrere seg om hvordan du bygger et tilpasset Docker-bilde basert på Ubuntu med Apache-tjenesten installert. Hele prosessen vil bli automatisert ved hjelp av en Dockerfile.

Docker-bilder kan bygges automatisk fra tekstfiler, kalt Dockerfiles. En Docker-fil inneholder trinnvise instruksjoner eller kommandoer som brukes til å lage og konfigurere et Docker-bilde.

  • Installer Docker og lær Docker Container Manipulation – Del 1
  • Distribuer og kjør applikasjoner under Docker Containers – Del 2

I utgangspunktet inneholder en Docker-fil forskjellige instruksjoner for å bygge og konfigurere en spesifikk beholder basert på dine krav. Følgende instruksjoner er de mest brukte, noen av dem er obligatoriske:

  1. FROM = Obligatorisk som den første instruksjonen i en Docker-fil. Instruerer Docker å hente basisbildet som du bygger det nye bildet fra. Bruk en tag for å spesifisere det nøyaktige bildet du bygger fra:

Ex: FROM ubuntu:20.04

  1. MAINTAINER = Forfatter av byggebildet
  2. RUN = Denne instruksjonen kan brukes på flere linjer og kjører alle kommandoer etter at et Docker-bilde er opprettet.
  3. CMD = Kjør en hvilken som helst kommando når Docker-bildet startes. Bruk bare én CMD-instruksjon i en Dockerfile.
  4. ENTRYPOINT = Samme som CMD, men brukes som hovedkommando for bildet.
  5. EXPOSE = Instruerer beholderen til å lytte på nettverksporter når den kjører. Beholderportene er ikke tilgjengelige fra verten som standard.
  6. ENV = Angi containermiljøvariabler.
  7. ADD = Kopier ressurser (filer, kataloger eller filer fra URL-er).

Trinn 1: Opprette eller skrive Dockerfile Repository

1. La oss først lage en slags Dockerfile-depoter for å gjenbruke filer i fremtiden for å lage andre bilder. Lag en tom katalog et sted i /var-partisjonen der vi vil lage filen med instruksjonene som skal brukes til å bygge det nylige Docker-bildet.

# mkdir -p /var/docker/ubuntu/apache
# touch /var/docker/ubuntu/apache/Dockerfile

2. Deretter begynner du å redigere filen med følgende instruksjoner:

# vi /var/docker/ubuntu/apache/Dockerfile

Dokerfile utdrag:

FROM ubuntu
MAINTAINER  your_name  <[email >
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

La oss nå gå gjennom filinstruksjonene:

Den første linjen forteller oss at vi bygger fra et Ubuntu-bilde. Hvis ingen tagg sendes inn, for eksempel 14:10, brukes det siste bildet fra Docker Hub.

På den andre linjen har vi lagt til navnet og e-postadressen til bildeskaperen. De neste to RUN-linjene vil bli utført i beholderen når bildet bygges og vil installere Apache-demonen og ekko noe tekst inn i standard apache-nettsiden.

EXPOSE-linjen vil instruere Docker-beholderen om å lytte på port 80, men porten vil ikke være tilgjengelig for utsiden. Den siste linjen instruerer containeren til å kjøre Apache-tjenesten i forgrunnen etter at containeren er startet.

3. Det siste vi trenger å gjøre er å begynne å lage bildet ved å gi kommandoen nedenfor, som lokalt vil lage et nytt Docker-bilde kalt ubuntu-apache basert på Dockerfilen opprettet tidligere, som vist i dette eksemplet:

# docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Etter at bildet er opprettet av Docker, kan du liste opp alle tilgjengelige bilder og identifisere bildet ditt ved å gi følgende kommando:

# docker images

Trinn 2: Kjør Container and Access Apache fra LAN

5. For å kjøre beholderen kontinuerlig (i bakgrunnen) og få tilgang til de beholdereksponerte tjenestene (portene) fra verten eller en annen ekstern maskin i ditt LAN, kjør kommandoen nedenfor på vertsterminalens ledetekst:

# docker run -d -p 81:80 ubuntu-apache

Her kjører -d-alternativet ubuntu-apache-beholderen i bakgrunnen (som en demon) og -p-alternativet kartlegger containerport 80 til din lokale vertsport 81. Utenfor LAN-tilgang til Apache-tjenesten kan kun nås via port 81.

Netstat-kommandoen vil gi deg en idé om hvilke porter verten lytter til.

Etter at beholderen er startet, kan du også kjøre kommandoen docker ps for å se statusen til den kjørende beholderen.

6. Nettsiden kan vises på verten din fra kommandolinjen ved å bruke curl-verktøyet mot maskinens IP-adresse, localhost eller docker-nettgrensesnitt på port 81. Bruk IP-kommandolinjen for å vise nettverksgrensesnittets IP-adresser.

# ip addr               [List nework interfaces]
# curl ip-address:81    [System Docker IP Address]
# curl localhost:81     [Localhost]

7. For å besøke containerwebsiden fra nettverket ditt, åpne en nettleser på et eksternt sted og bruk HTTP-protokollen, IP-adressen til maskinen der containeren kjører, etterfulgt av port 81 som illustrert på bildet nedenfor.

http://ip-address:81

8. For å få en innsikt i hvilke prosesser som kjører inne i beholderen, utfør følgende kommando:

# docker ps
# docker top <name or ID of the container>

9. For å stoppe containerproblemet docker stop-kommandoen etterfulgt av container-ID eller navn.

# docker stop <name or ID of the container>
# docker ps

10. Hvis du ønsker å tilordne et beskrivende navn for beholderen, bruk --name-alternativet som vist i eksemplet nedenfor:

# docker run --name my-www -d -p 81:80 ubuntu-apache
# docker ps

Nå kan du referere til beholderen for manipulering (start, stopp, topp, statistikk osv.) bare ved å bruke det tildelte navnet.

# docker stats my-www

Trinn 3: Lag en systemomfattende konfigurasjonsfil for Docker Container

11. På CentOS/RHEL kan du opprette en systemd konfigurasjonsfil og administrere beholderen som du vanligvis gjør for alle andre lokale tjenester.

Lag for eksempel en ny systemd fil kalt, la oss si, apache-docker.service ved å bruke følgende kommando:

# vi /etc/systemd/system/apache-docker.service

apache-docker.service filutdrag:

[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. Etter at du er ferdig med å redigere filen, lukk den, last systemd-demonen på nytt for å reflektere endringer og start beholderen ved å utstede følgende kommandoer:

# systemctl daemon-reload
# systemctl start apache-docker.service
# systemctl status apache-docker.service

Dette var bare et enkelt eksempel på hva du kan gjøre med en enkel Dockerfile, men du kan forhåndsbygge noen ganske sofistikerte applikasjoner som du kan starte opp på bare noen sekunder med minimale ressurser og innsats.

Videre lesning: