Sådan oprettes og konfigureres automatisk brugerdefinerede Docker-billeder med Dockerfile - Del 3


Denne vejledning koncentrerer sig om, hvordan man bygger et brugerdefineret Docker-billede baseret på Ubuntu med Apache-tjenesten installeret. Hele processen automatiseres ved hjælp af en Dockerfile.

Docker-billeder kan automatisk bygges fra tekstfiler, der hedder Dockerfiles. En Docker-fil indeholder trinvis bestilte instruktioner eller kommandoer, der bruges til at oprette og konfigurere et Docker-billede.

  • Installer Docker og Lær Docker Container Manipulation - Del 1
  • Implementér og kør applikationer under Docker Containers - del 2

Dybest set indeholder en Docker-fil forskellige instruktioner for at opbygge og konfigurere en bestemt container baseret på dine krav. Følgende instruktioner er de mest anvendte, hvoraf nogle er obligatoriske:

  1. FRA = Obligatorisk som den første instruktion i en Docker-fil. Pålægger Docker at trække det basisbillede, hvorfra du bygger det nye billede. Brug et tag til at angive det nøjagtige billede, du bygger fra:

Ex: FROM ubuntu:20.04

  1. VEDLIGEHOLDER = Forfatter til build-billedet
  2. RUN = Denne instruktion kan bruges på flere linjer og kører alle kommandoer, efter at et Docker-billede er oprettet.
  3. CMD = Kør enhver kommando, når Docker-billedet startes. Brug kun én CMD-instruktion i en Dockerfile.
  4. ENTRYPOINT = Samme som CMD men bruges som hovedkommando for billedet.
  5. EXPOSE = instruerer containeren om at lytte på netværksporte, når den kører. Containerportene kan som standard ikke nås fra værten.
  6. ENV = Indstil variabler for containermiljø.
  7. ADD = Kopier ressourcer (filer, mapper eller filer fra URL'er).

Trin 1: Oprettelse eller skrivning af Dockerfile Repository

1. Lad os først oprette en slags Dockerfile-arkiver for at genbruge filer i fremtiden til at oprette andre billeder. Opret en tom mappe et eller andet sted i /var -partitionen, hvor vi opretter filen med de instruktioner, der skal bruges til at opbygge det nyligt Docker-billede.

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

2. Start derefter med at redigere filen med følgende instruktioner:

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

Dokerfile uddrag:

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

Lad os nu gennemgå filinstruktionerne:

Den første linje fortæller os, at vi bygger fra et Ubuntu-billede. Hvis der ikke er indsendt et tag, siger f.eks. 14:10, bruges det seneste billede fra Docker Hub.

På anden linje har vi tilføjet navn og e-mail til billedskaberen. De næste to RUN-linjer udføres i containeren, når billedet bygges, og installerer Apache-dæmonen og ekko noget tekst på standard-apache-websiden.

EXPOSE-linjen instruerer Docker-containeren om at lytte på port 80, men porten er ikke tilgængelig udefra. Den sidste linje instruerer containeren i at køre Apache-tjenesten i forgrunden, efter at containeren er startet.

3. Den sidste ting, vi skal gøre, er at begynde at oprette billedet ved at udstede nedenstående kommando, som lokalt opretter et nyt Docker-billede med navnet ubuntu-apache baseret på Dockerfile oprettet tidligere, som vist i dette eksempel:

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

4. Når billedet er oprettet af Docker, kan du liste alle tilgængelige billeder og identificere dit billede ved at udstede følgende kommando:

# docker images

Trin 2: Kør containeren og få adgang til Apache fra LAN

5. For at køre containeren kontinuerligt (i baggrunden) og få adgang til containereksponerede tjenester (porte) fra værten eller anden fjernmaskine i dit LAN skal du køre nedenstående kommando på din værtsterminalprompt:

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

Her kører indstillingen -d ubuntu-apache beholderen i baggrunden (som en dæmon), og indstillingen -p kortlægger containerporten 80 til din localhost-port 81. Udenfor LAN kan du kun få adgang til Apache-tjenesten via port 81.

Netstat-kommandoen giver dig en idé om, hvilke porte værten lytter til.

Når containeren er startet, kan du også køre kommandoen docker ps for at se status for den kørende container.

6. Websiden kan vises på din vært fra kommandolinjen ved hjælp af curl-værktøjet mod din maskins IP-adresse, localhost eller docker-netgrænseflade på port 81. Brug IP-kommandolinjen til at vise IP-adresser på netværksgrænsefladen.

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

7. For at besøge containerwebsiden fra dit netværk skal du åbne en browser på en ekstern placering og bruge HTTP-protokol, IP-adressen på den maskine, hvor containeren kører, efterfulgt af port 81 som vist på nedenstående billede.

http://ip-address:81

8. For at få et indblik i, hvilke processer der kører inde i containeren, skal du udføre følgende kommando:

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

9. For at stoppe kommandoen med kommandoen docker stop efterfulgt af container-id eller navn.

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

10. Hvis du vil tildele et beskrivende navn til containeren, skal du bruge indstillingen --name som vist i nedenstående eksempel:

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

Nu kan du kun henvise til beholderen til manipulation (start, stop, top, statistik osv.) Ved kun at bruge det tildelte navn.

# docker stats my-www

Trin 3: Opret en systemdækkende konfigurationsfil til Docker Container

11. På CentOS/RHEL kan du oprette en systemd-konfigurationsfil og administrere containeren, som du normalt gør for enhver anden lokal service.

For eksempel skal du oprette en ny systemd-fil med navnet, lad os sige, apache-docker.service ved hjælp af følgende kommando:

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

apache-docker.service fil uddrag:

[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. Når du er færdig med at redigere filen, skal du lukke den, genindlæse systemdemon for at afspejle ændringer og starte containeren ved at udstede følgende kommandoer:

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

Dette var bare et simpelt eksempel på, hvad du kan gøre med en simpel Dockerfile, men du kan forudbygge nogle ret sofistikerede applikationer, som du kan fyre op på bare få sekunder med minimale ressourcer og kræfter.

Yderligere læsning: