Hoe voer ik een Docker-instantie uit vanuit een Dockerfile?

Hoe Voer Ik Een Docker Instantie Uit Vanuit Een Dockerfile



Docker is een geliefd open platform dat universeel wordt gebruikt voor het bouwen, testen, implementeren en verzenden van applicaties in een containeromgeving. Docker maakt gebruik van het besturingssysteemniveau van virtualisatie en ondersteunt verschillende componenten, zoals Docker-containers, afbeeldingen, netwerken en Docker-volumes.

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?

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 belangrijkste
importeren (
'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 -f . ”:

havenarbeider gebouwd -T go-img -F Dockerbestand .

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 ” commando:

docker-afbeeldingen go-img

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-img

In 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.8

WERKDIR / 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 ps

Uit 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 -f . commando. Voer nu de containerimage uit om de Docker-instantie te starten. Gebruikers kunnen Docker Compose ook gebruiken om de Docker-instantie vanuit Dockerfile uit te voeren. Dit bericht heeft geïllustreerd hoe u een Docker-instantie vanuit een Dockerfile kunt uitvoeren.