Geschatte leestijd: 3 minuten
De meeste Dockerfiles starten vanuit een parent image. Als u de inhoud van uw image volledig wilt controleren, moet u in plaats daarvan misschien een base image maken.Hier is het verschil:
-
Een parent image is de image waarop uw image is gebaseerd. Het verwijst naar de inhoud van de
FROM
directive in deDockerfile. Elke volgende declaratie in de Dockerfile wijzigt deze parentimage. De meeste Dockerfiles starten vanuit een parent image, in plaats van een base image.De termen worden echter soms door elkaar gebruikt.
Een base image heeft FROM scratch
in zijn Dockerfile.
Dit onderwerp laat je verschillende manieren zien om een base image te maken. Het specifieke proces zal sterk afhangen van de Linux distributie die je wilt verpakken. We hebben een aantal voorbeelden hieronder, en je wordt aangemoedigd om pull requests in te dienen om nieuwe versies bij te dragen.
Maak een volledige image met tar
In het algemeen begin je met een werkende machine waarop de distributie draait die je wilt verpakken als een parent image, hoewel dat niet nodig is voor sommige tools zoals Debian’sDebootstrap, die je ook kunt gebruiken om Ubuntu images te bouwen.
Het kan zo eenvoudig zijn als dit om een Ubuntu-ouderimage te maken:
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xeniala29c15f1bf7a$ docker run xenial cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Er zijn meer voorbeeldscripts voor het maken van ouder-images in de DockerGitHub repository.
Maak een eenvoudig parent image met behulp van scratch
U kunt Docker’s gereserveerde, minimale image, scratch
, gebruiken als een startpunt voor het bouwen van containers. Het gebruik van de scratch
“image” geeft aan het bouwproces aan dat je wilt dat het volgende commando in de Dockerfile
de eerste bestandssysteemlaag in je image wordt.
Terwijl scratch
in Docker’s repository op de hub verschijnt, kun je het niet ophalen, uitvoeren, of een image taggen met de naam scratch
. In plaats daarvan kunt u er naar verwijzen in uw Dockerfile
. Om bijvoorbeeld een minimale container te maken metscratch
:
FROM scratchADD hello /CMD
Aannemende dat u het “hello” uitvoerbare voorbeeld hebt gebouwd door de instructies te volgen ophttps://github.com/docker-library/hello-world/, en je hebt het gecompileerd met de -static
vlag, dan kun je dit Dockerimage bouwen met dit docker build
commando:
docker build --tag hello .
Vergeet het .
teken aan het einde niet, dat de build context instelt op de huidige directory.
Note: Omdat Docker Desktop voor Mac en Docker Desktop voor Windows een Linux VM gebruiken, heb je een Linux binary nodig, in plaats van een Mac of Windows binary.U kunt een Docker-container gebruiken om deze te bouwen:
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essentialcontainer# cd /buildcontainer# gcc -o hello -static -nostartfiles hello.c
Om uw nieuwe image uit te voeren, gebruikt u het docker run
commando:
docker run --rm hello
Dit voorbeeld maakt de hello-world-afbeelding die in de tutorials wordt gebruikt.Als u het wilt uitproberen, kunt u de image repo clonen.
Meer bronnen
Er zijn veel bronnen beschikbaar om u te helpen bij het schrijven van uw Dockerfile
.