What is Dockerfile | How to create and build Dockerfile | Dockerfile Basic Commands
Inhoudsopgave:
Een Docker-afbeelding is de blauwdruk van Docker-containers die de toepassing bevat en alles wat u nodig hebt om de toepassing uit te voeren. Een container is een runtime-instantie van een afbeelding.
In deze zelfstudie leggen we uit wat Dockerfile is, hoe u er een kunt maken en hoe u een Docker-afbeelding kunt maken met Dockerfile.
Wat is Dockerfile
Een Dockerfile is een tekstbestand dat alle opdrachten bevat die een gebruiker op de opdrachtregel zou kunnen uitvoeren om een afbeelding te maken. Het bevat alle instructies die Docker nodig heeft om de afbeelding te bouwen.
Docker-afbeeldingen bestaan uit een reeks bestandssysteemlagen die instructies vertegenwoordigen in het Docker-bestand van de afbeelding en die een uitvoerbare softwaretoepassing vormen.
Het Docker-bestand heeft de volgende vorm:
# Comment INSTRUCTION arguments
INSTRUCTION
is niet hoofdlettergevoelig, maar de conventie is om HOOFDLETTERS te gebruiken voor zijn namen.
Hieronder vindt u de lijst met een korte beschrijving van enkele van de meest gebruikte Dockerfile-instructies:
- ARG - Met deze instructie kunt u variabelen definiëren die tijdens de bouw kunnen worden doorgegeven. U kunt ook een standaardwaarde instellen. VAN - De basisafbeelding voor het bouwen van een nieuwe afbeelding. Deze instructie moet de eerste instructie zonder commentaar in het Docker-bestand zijn. De enige uitzondering op deze regel is wanneer u een variabele in het argument
FROMwilt gebruiken. In dit geval kanFROMworden voorafgegaan door een of meerARGinstructies. LABEL - Wordt gebruikt om metagegevens aan een afbeelding toe te voegen, zoals beschrijving, versie, auteur.. enz. U kunt meer dan éénLABELopgeven en elkeLABELinstructie is een sleutel / waarde-paar. UITVOEREN - De opdrachten die in deze instructie zijn opgegeven, worden tijdens het buildproces uitgevoerd. ElkeRUNinstructie maakt een nieuwe laag bovenop de huidige afbeelding. TOEVOEGEN - Wordt gebruikt om bestanden en mappen te kopiëren van de opgegeven bron naar de opgegeven bestemming op de docker-afbeelding. De bron kan lokale bestanden of mappen of een URL zijn. Als de bron een lokaal teerarchief is, wordt het automatisch uitgepakt in de Docker-afbeelding. COPY - Vergelijkbaar metADDmaar de bron kan alleen een lokaal bestand of map zijn. ENV - Met deze instructie kunt u een omgevingsvariabele definiëren. CMD - Wordt gebruikt om een opdracht op te geven die wordt uitgevoerd wanneer u een container uitvoert. U kunt slechts éénCMDinstructie gebruiken in uw Dockerfile. ENTRYPOINT - Net alsCMDdefinieert deze instructie welke opdracht wordt uitgevoerd bij het uitvoeren van een container. WORKDIR - Deze richtlijn stelt de huidige werkmap in voor de instructiesRUN,CMD,ENTRYPOINT,COPYenADD. GEBRUIKER - Stel de gebruikersnaam ofUIDmoet worden gebruikt bij het uitvoeren van de volgende instructiesRUN,CMD,ENTRYPOINT,COPYenADD. VOLUME - Hiermee kunt u een hostmachinemap naar de container koppelen. EXPOSE - Wordt gebruikt om de poort op te geven waarop de container tijdens runtime luistert.
Als u wilt uitsluiten dat bestanden en mappen aan de afbeelding worden toegevoegd, maakt u een
.dockerignore
bestand in de contextmap. De syntaxis van
.dockerignore
is vergelijkbaar met die van het
.gitignore
bestand van Git.
Zie de officiële Dockerfile-referentiepagina voor een volledige referentie en een gedetailleerde uitleg van de Dockerfile-instructies.
Maak een Docker-bestand
Het meest voorkomende scenario bij het maken van Docker-afbeeldingen is om een bestaande afbeelding uit een register te halen (meestal van Docker Hub) en de wijzigingen op te geven die u in de basisafbeelding wilt aanbrengen. De meest gebruikte basisafbeelding bij het maken van Docker-afbeeldingen is Alpine omdat deze klein en geoptimaliseerd is om in RAM te worden uitgevoerd.
In dit voorbeeld maken we een Docker-afbeelding voor de Redis-server. We gebruiken de nieuwste ubuntu 18.04 als basisafbeelding.
Maak eerst een map met het Docker-bestand en alle benodigde bestanden:
mkdir ~/redis_docker
Navigeer naar de map en maak het volgende Docker-bestand:
cd ~/redis_docker
nano Dockerfile
Dockerfile
FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD
Laten we de betekenis van elk van de regels in het Docker-bestand uitleggen:
- In regel
1definiëren we de basisafbeelding. DeRUNinstructie die begint in regel3werkt de apt-index bij, installeert het pakket "redis-server" en maakt de apt-cache schoon. De opdrachten die in de instructies worden gebruikt, zijn dezelfde als de opdrachten die u zou gebruiken om redis op de Ubuntu-server te installeren. De instructie EXPOSE definieert de poort waarop de redis-server luistert. Op de laatste regel gebruiken we deCMDinstructie om de standaardopdracht in te stellen die wordt uitgevoerd wanneer de container wordt uitgevoerd.
Sla het bestand op en sluit de editor.
De afbeelding opbouwen
De volgende stap is het maken van de afbeelding. Voer hiervoor de volgende opdracht uit vanuit de map waarin het Docker-bestand zich bevindt:
docker build -t linuxize/redis.
De optie
-t
geeft de afbeeldingsnaam en optioneel een gebruikersnaam en tag in de indeling 'gebruikersnaam / imagename: tag' aan.
De output van het bouwproces ziet er ongeveer zo uit:
Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest
Wanneer het bouwproces is voltooid, wordt de nieuwe afbeelding in de lijst met afbeeldingen weergegeven:
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB
Een container uitvoeren
Nu de afbeelding is gemaakt, voert u er een container uit door het volgende uit te voeren:
docker run -d -p 6379:6379 --name redis linuxize/redis
De opties
-d
vertellen Docker om de container in de ontkoppelde modus uit te voeren, de optie
-p 6379:6379
publiceert de poort 6379 naar de
--name redis
en de optie
--name redis
geeft de containernaam aan. Het laatste argument
linuxize/redis
is de naam van de afbeelding, die wordt gebruikt om de container uit te voeren.
Wanneer de container start, gebruikt u de volgende opdracht om alle actieve containers weer te geven:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis
Om te controleren of alles werkt zoals het zou moeten gebruiken de
redis-cli
om verbinding te maken met de
redis-cli
container:
redis-cli ping
De redis-server moet reageren met
PONG
.
Conclusie
Deze tutorial behandelde alleen de basisprincipes van het gebruik van Dockerfiles om afbeeldingen te bouwen. Zie Best practices voor het schrijven van Dockerfiles voor meer informatie over het schrijven van Dockerfiles en de aanbevolen best practices.
Sidekickles: back-up maken, back-ups maken, back-ups maken
Verzameling: 4 back-uphulpprogramma's voor mobiele apparaten om u te stoten om uw dierbare te beschermen data.
Hoe ram op macbook vrij te maken om de ventilator stil te maken
Leer hoe u RAM op uw MacBook vrijmaakt en die stille ventilator.
Verbinding maken met een docker-container
Verbinding maken met een actieve Docker-container is handig als u wilt zien wat er in de container gebeurt. In deze zelfstudie leggen we uit hoe u een koppeling kunt maken met het hoofdwerkproces van de container en hoe u een shell in een actieve container kunt krijgen.







