Zoeken op website

Hoe u automatisch aangepaste Docker-images kunt bouwen en configureren met Dockerfile - Deel 3


Deze tutorial concentreert zich op het bouwen van een aangepaste Docker-image op basis van Ubuntu met de Apache-service geïnstalleerd. Het hele proces wordt geautomatiseerd met behulp van een Dockerfile.

Docker-afbeeldingen kunnen automatisch worden opgebouwd uit tekstbestanden, genaamd Dockerfiles. Een Docker-bestand bevat stapsgewijze instructies of opdrachten die worden gebruikt om een Docker-image te maken en te configureren.

Vereisten

  • Installeer Docker en leer Docker Container Manipulatie – Deel 1
  • Applicaties implementeren en uitvoeren onder Docker Containers – Deel 2

Kortom, een Docker-bestand bevat verschillende instructies om een specifieke container te bouwen en te configureren op basis van uw vereisten. De volgende instructies worden het meest gebruikt, waarvan sommige verplicht zijn:

  1. FROM=Verplicht als eerste instructie in een Docker-bestand. Geeft Docker de opdracht om de basisimage op te halen waaruit u de nieuwe image bouwt. Gebruik een tag om de exacte afbeelding op te geven waaruit u bouwt:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=Auteur van de build-image
  2. RUN=Deze instructie kan op meerdere regels worden gebruikt en voert alle opdrachten uit nadat een Docker-image is gemaakt.
  3. CMD=Voer een willekeurige opdracht uit wanneer de Docker-image wordt gestart. Gebruik slechts één CMD-instructie in een Dockerfile.
  4. ENTRYPOINT=Hetzelfde als CMD maar gebruikt als hoofdopdracht voor de afbeelding.
  5. EXPOSE=Instrueert de container om tijdens het uitvoeren op netwerkpoorten te luisteren. De containerpoorten zijn standaard niet bereikbaar vanaf de host.
  6. ENV=Stel containeromgevingsvariabelen in.
  7. ADD=Kopieer bronnen (bestanden, mappen of bestanden van URL's).

Stap 1: Dockerfile Repository maken of schrijven

1. Laten we eerst een soort Dockerfile-opslagplaatsen maken, zodat we bestanden in de toekomst kunnen hergebruiken om andere afbeeldingen te maken. Maak ergens in de /var partitie een lege map waar we het bestand zullen maken met de instructies die zullen worden gebruikt om de nieuwe Docker-image te bouwen.

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

2. Begin vervolgens met het bewerken van het bestand met de volgende instructies:

vi /var/docker/ubuntu/apache/Dockerfile

Dokerfile-fragment:

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

Laten we nu de bestandsinstructies doornemen:

De eerste regel vertelt ons dat we bouwen op basis van een Ubuntu-afbeelding. Als er geen tag wordt ingediend, bijvoorbeeld 14:10, wordt de nieuwste afbeelding van Docker Hub gebruikt.

Op de tweede regel hebben we de naam en het e-mailadres van de maker van de afbeelding toegevoegd. De volgende twee RUN regels zullen in de container worden uitgevoerd tijdens het bouwen van de afbeelding en zullen de Apache daemon installeren en wat tekst echo in de standaard apache-webpagina plaatsen .

De EXPOSE regel zal de Docker container instrueren om op poort 80 te luisteren, maar de poort zal niet beschikbaar zijn voor buitenstaanders. De laatste regel instrueert de container om de Apache-service op de voorgrond uit te voeren nadat de container is gestart.

3. Het laatste wat we moeten doen is beginnen met het maken van de afbeelding door het onderstaande commando uit te voeren, waarmee lokaal een nieuwe Docker-afbeelding wordt gemaakt met de naam ubuntu-apache, gebaseerd op de Dockerfile eerder gemaakt, zoals weergegeven in dit voorbeeld:

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

4. Nadat de afbeelding is gemaakt door Docker, kunt u alle beschikbare afbeeldingen weergeven en uw afbeelding identificeren door de volgende opdracht te geven:

docker images

Stap 2: Voer de container uit en krijg toegang tot Apache vanuit LAN

5. Om de container continu (op de achtergrond) te laten draaien en toegang te krijgen tot de aan de container blootgestelde services (poorten) vanaf de host of een andere externe machine in uw LAN, voert u de onderstaande opdracht uit op de prompt van uw hostterminal :

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

Hier voert de optie -d de ubuntu-apache container op de achtergrond uit (als een daemon) en de optie -p wijst de containerpoort toe 80 naar uw localhost-poort 81. Buiten LAN-toegang tot de Apache-service is alleen mogelijk via poort 81.

De Netstat-opdracht geeft u een idee van naar welke poorten de host luistert.

Nadat de container is gestart, kunt u ook de opdracht docker ps uitvoeren om de status van de actieve container te bekijken.

6. De webpagina kan op uw host worden weergegeven vanaf de opdrachtregel met behulp van het hulpprogramma curl tegen het IP-adres van uw machine, localhost of docker net-interface op poort 81. Gebruik de IP-opdracht lijn om de IP-adressen van de netwerkinterface weer te geven.

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

7. Om de containerwebpagina vanuit uw netwerk te bezoeken, opent u een browser op een externe locatie en gebruikt u het HTTP-protocol, het IP-adres van de machine waarop de container draait, gevolgd door poort 81, zoals geïllustreerd op de onderstaande afbeelding.

http://ip-address:81

8. Om inzicht te krijgen in welke processen er in de container worden uitgevoerd, voert u de volgende opdracht uit:

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

9. Om de container te stoppen, geeft u de opdracht docker stop op, gevolgd door de container-ID of -naam.

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

10. Als u een beschrijvende naam aan de container wilt toewijzen, gebruikt u de optie --name, zoals weergegeven in het onderstaande voorbeeld:

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

Nu kunt u alleen naar de container verwijzen voor manipulatie (start, stop, top, statistieken, enz.) door de toegewezen naam te gebruiken.

docker stats my-www

Stap 3: Maak een systeembreed configuratiebestand voor Docker Container

11. Op CentOS/RHEL kunt u een systemd configuratiebestand maken en de container beheren zoals u dat normaal doet voor elke andere lokale service.

Maak bijvoorbeeld een nieuw systemd-bestand met de naam apache-docker.service met behulp van de volgende opdracht:

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

apache-docker.service bestandsfragment:

[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. Nadat u klaar bent met het bewerken van het bestand, sluit u het, laadt u de systemd-daemon opnieuw om de wijzigingen weer te geven en start u de container door de volgende opdrachten te geven:

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

Dit was slechts een eenvoudig voorbeeld van wat u kunt doen met een eenvoudig Dockerfile, maar u kunt een aantal behoorlijk geavanceerde applicaties vooraf bouwen die u binnen enkele seconden kunt opstarten met minimale middelen en moeite.

Verder lezen: