De Docker-containers zijn een van de essentiële componenten van het Docker-platform dat het programma, de configuratie-instellingen en afhankelijkheden verpakt met behulp van de Docker-image. De Docker-image is een eenvoudige sjabloon of momentopname van een container die de container begeleidt bij het containeriseren van een applicatie. Deze afbeeldingen zijn meestal beschikbaar in het officiële Docker-hubregister. Gebruikers kunnen deze afbeeldingen ook ontwerpen volgens projectvereisten met behulp van Dockerfile.
In deze blog wordt uitgelegd:
- Wat is een Dockerbestand?
- Basisopdrachten van Dockerfile
- Hoe voer ik een instance uit vanuit een Dockerfile in Docker?
- Hoe voer ik een instance uit vanuit een Dockerfile in Docker Compose?
- Conclusie
Wat is een Dockerbestand?
Een Dockerfile is een normaal tekstbestand dat opdrachten en instructies bevat die de basisstructuur van een Docker-container definiëren. Deze instructies kunnen zonder enig bestand in de terminal worden uitgevoerd, maar het één voor één uitvoeren van elke opdracht is een hectische en complexe taak. Met Dockerfile kunnen ontwikkelaars eenvoudig alle vereisten en instructies in één bestand specificeren. Dit bestand wordt vervolgens gebruikt om de containersjabloon te bouwen, een Docker-image. Daarna wordt de docker-installatiekopie uitgevoerd om de instantie in de Docker-container te starten.
Basisopdrachten van Dockerfile
Enkele basisopdrachten van Dockerfile die worden gebruikt om de basismomentopname van de container te definiëren, worden hieronder in tabelvorm weergegeven:
Commando's | Beschrijving |
VAN | De ' VAN De opdracht wordt gebruikt om de basisafbeelding voor de containersjabloon te definiëren. Deze afbeeldingen worden uit het officiële Docker-register Docker Hub gehaald. |
ONDERHOUDER | De ' ONDERHOUDER De opdracht definieert de auteursinformatie (naam en e-mailadres) die de Docker-afbeelding maakt. |
WERKDIR | Het specificeert de werkmap van een containerapplicatie. |
KOPIËREN | Wordt gebruikt om de bron- en configuratiebestanden van het hostsysteem naar het opgegeven pad van de Docker-container te kopiëren. |
TOEVOEGEN | De ' TOEVOEGEN ' commando is vergelijkbaar met het ' KOPIËREN ', maar het ondersteunt ook de externe URL om het bestand van de URL toe te voegen aan het containerpad, zoals van de GitHub-repository naar het containerpad. |
LOOP | De ' LOOP ” wordt gebruikt om de opdrachten in de container uit te voeren. In Dockerfile wordt het meestal gebruikt om extra afhankelijkheden in de container te beheren en te installeren. |
CMD | “ CMD ” definieert de standaardpunten van Docker-containers. Het definieert in feite de uitvoerbare bestanden en standaardparameters van de “ INGANGSPUNT ”. |
INGANGSPUNT | De ' INGANGSPUNT De opdracht wordt ook gebruikt om de uitvoerbare bestanden van de Docker-container in te stellen. Het stelt in principe de standaardapplicaties in die elke keer in een container worden gebruikt. Het ENTRYPOINT-commando wordt ook eenmalig gebruikt in een Dockerfile. |
GEBRUIKER | Deze opdracht wordt gebruikt om de UID (gebruikersnaam) in te stellen om de opdrachten in Container uit te voeren |
VOLUME | De ' VOLUME De opdracht wordt gebruikt om het externe volume (bestandssysteem) te binden of te koppelen met een container. |
ENV | De ' ENV De opdracht wordt gebruikt om de omgevingsvariabelen van de container in te stellen. |
ARG | De ' ARG ” wordt gebruikt om de argumenten in de container door te geven. |
BLOOTGEVEN | De ' BLOOTGEVEN De opdracht specificeert de blootliggende poorten waarop de container wordt uitgevoerd. |
ONBOUW | Het leest instructies van de basisafbeelding, maar activeert deze instructies via de stroomafwaartse afbeelding. |
ETIKET | De ' ETIKET ” wordt gebruikt om de metagegevens van de containermomentopname te specificeren. |
Hoe voer ik een Docker-instantie uit vanuit een Dockerfile in Docker?
Als u een Docker-instantie of container wilt uitvoeren met Dockerfile, maakt u eerst een Dockerfile. Maak vervolgens de basismomentopname voor de container met behulp van Dockerfile. Voer daarna de momentopname uit om de Docker-instantie te starten.
Volg de onderstaande instructies ter illustratie.
Stap 1: Maak een Dockerbestand
Maak eerst een Dockerfile. Houd er rekening mee dat Dockerfile geen bestandsextensie heeft. Plak daarna de volgende opdrachten in het bestand:
VAN golang: 1.8
WERKDIR / gaan / src / app
KOPIEER main.go .
REN, ga bouwen -O web Server .
BLOOTGEVEN 8080 : 8080
INGANGSPUNT [ './web Server' ]
Stap 2: Programmabestand maken
Maak vervolgens een nieuw bestand met de naam “ hoofd.go ”dat het eenvoudige Golang-programma bevat. Plak hiervoor het volgende programma in het bestand:
pakket belangrijksteimporteren (
'fmt'
'loggen'
'net/http'
)
func-handler ( In http.ResponseWriter, r * http.Verzoek ) {
fmt.Fprintf ( In , 'Hallo! Welkom bij LinuxHint-zelfstudie' )
}
func hoofd ( ) {
http.HandleFunc ( '/' , behandelaar )
log.Fataal ( http.ListenAndServe ( '0.0.0.0:8080' , nul ) )
}
Stap 3: Genereer een containermomentopname
Bouw nu de Docker-momentopname van de container met behulp van “ docker build -t
In het bovenstaande commando wordt de “ -T ' optie stelt de naam of tag van de afbeelding in, ' -F De optie specificeert het pad naar het Dockerbestand waarvan de Docker-engine de buildcontext moet lezen:
Om te controleren of de afbeelding succesvol is gemaakt of niet, voert u de opdracht “ docker-images
Uit de uitvoer blijkt dat we met succes de momentopname van de container hebben gemaakt op basis van het Dockerfile:
Stap 4: Voer de momentopname uit om de container te starten
Start nu het exemplaar van Docker in de Docker-container door de momentopname van de container uit te voeren die in de bovenstaande stap is gemaakt:
havenarbeider uitgevoerd -P 8080 : 8080 --naam ga verder -D go-imgIn het bovenstaande commando wordt de “ -P ' optie voert de container uit op de ' 8080 ‘poort,’ -naam ” stelt de naam van de container in en de “ -D 'optie voert de container uit in vrijstaande modus (achtergrondservice):
Om te verifiëren of de container wordt uitgevoerd of niet, vermeldt u de actieve containers met behulp van de “ havenarbeider ps ” commando:
havenarbeider ps
Navigeer nu naar “ http://localhost:8080 ' en controleer of de toepassing op de blootliggende poort draait of niet:
De bovenstaande uitvoer geeft aan dat we de Docker-instantie effectief hebben gestart met behulp van Dockerfile.
Hoe voer ik een instance uit vanuit een Dockerfile in Docker Compose?
Docker compose is een andere belangrijke plug-in van het Docker-platform waarmee we meerdere instances in verschillende containers tegelijk kunnen uitvoeren. Gebruikers kunnen de Docker-instantie ook vanuit Dockerfile uitvoeren met behulp van de Docker Compose-plug-in. Volg ter illustratie de gegeven stappen.
Stap 1: Dockerbestand maken
Maak eerst een Dockerfile. We gebruiken bijvoorbeeld hetzelfde Dockerbestand en hetzelfde programmabestand als in de bovenstaande sectie:
VAN golang: 1.8WERKDIR / gaan / src / app
KOPIEER main.go .
REN, ga bouwen -O web Server .
BLOOTGEVEN 8080 : 8080
INGANGSPUNT [ './web Server' ]
Stap 2: Maak een docker-compose.yml-bestand
Maak vervolgens een “ docker-compose.yml ”-bestand en kopieer de volgende sleutelparen naar het bestand:
versie: '3'Diensten:
web:
bouwen: .
poorten:
- 8080 : 8080
In het bovengenoemde geknipte:
- “ Diensten ” wordt gebruikt om de compositieservices te specificeren die in een afzonderlijke container zullen worden uitgevoerd. Ter illustratie hebben we slechts één service geconfigureerd “ web ”om de code schoon en eenvoudig te houden.
- “ bouwen Het sleutelpaar wordt gebruikt om de buildcontext uit het Dockerbestand te lezen. Hier leest docker de instructies uit het Dockerbestand en bouwt de container dienovereenkomstig.
- “ havens De sleutel definieert de blootliggende poorten waarop de container zal worden uitgevoerd.
Stap 3: Start Docker-instantie
Voer nu de Docker-instantie uit in een container met behulp van de “ docker-componeren ” commando:
docker-componeren -D
Controleer ter verificatie de lijst met actieve compose-containers met behulp van de “ docker-componeren ps ” commando:
docker-componeren psUit de uitvoer blijkt dat de “ web ' service wordt met succes uitgevoerd in de ' golangapp-web-1 ” container:
Navigeer naar de blootliggende poort van de compose-service en controleer of het programma wordt uitgevoerd of niet. Het onderstaande resultaat laat zien dat we met succes de Docker-instantie vanuit Dockerfile hebben gestart met behulp van Docker Compose:
Dat gaat allemaal over het uitvoeren van een docker-instantie vanuit een Dockerfile.
Conclusie
Om een Docker-instantie uit te voeren in een container vanuit een Dockerfile, maakt u eerst Dockerfile. Voeg de opdrachten in het bestand toe om de afbeelding of sjabloon van de Docker-container te maken. Maak vervolgens de containerimage of momentopname met behulp van de “ docker build -t