Android

Hur man bygger dockningsbilder med dockerfile

Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.

Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.

Innehållsförteckning:

Anonim

En Docker-bild är ritningen av Docker-behållare som innehåller applikationen och allt du behöver för att köra applikationen. En behållare är en runtime-instans av en bild.

I denna handledning kommer vi att förklara vad Dockerfile är, hur man skapar en och hur man bygger en Docker-bild med Dockerfile.

Vad är Dockerfile

En Dockerfile är en textfil som innehåller alla kommandon som en användare kan köra på kommandoraden för att skapa en bild. Den innehåller alla instruktioner som behövs av Docker för att bygga bilden.

Docker-bilder består av en serie filsystemlager som representerar instruktioner i bildens Dockerfile som utgör ett körbart program.

Docker-filen har följande form:

# Comment INSTRUCTION arguments

INSTRUCTION är inte skiftlägeskänslig, men konventionen är att använda UPPERCASE för dess namn.

Nedan är listan med en kort beskrivning av några av de mest använda Dockerfile-instruktionerna:

  • ARG - Denna instruktion låter dig definiera variabler som kan skickas vid byggtid. Du kan också ställa in ett standardvärde. FRÅN - Basbilden för att bygga en ny bild. Denna instruktion måste vara den första instruktionen utan kommentarer i Dockerfile. Det enda undantaget från denna regel är när du vill använda en variabel i FROM argumentet. I detta fall kan FROM föregås av en eller flera ARG instruktioner. LABEL - Används för att lägga till metadata till en bild, till exempel beskrivning, version, författare.. osv. Du kan ange mer än en LABEL , och varje LABEL instruktion är ett nyckelvärdespar. RUN - Kommandona som anges i denna instruktion kommer att köras under byggprocessen. Varje RUN instruktion skapar ett nytt lager ovanpå den aktuella bilden. ADD - Används för att kopiera filer och kataloger från den angivna källan till den angivna destinationen på dockningsbilden. Källan kan vara lokala filer eller kataloger eller en URL. Om källan är ett lokalt tjärarkiv packas det upp automatiskt i Docker-bilden. COPY - Liknar ADD men källan kan endast vara en lokal fil eller katalog. ENV - Denna instruktion låter dig definiera en miljövariabel. CMD - Används för att ange ett kommando som ska köras när du kör en container. Du kan bara använda en CMD instruktion i din Dockerfile. ENTRYPOINT - I likhet med CMD definierar denna instruktion vilket kommando som ska köras när du kör en container. WORKDIR - Detta direktiv ställer den aktuella arbetskatalogen för instruktionerna RUN , CMD , ENTRYPOINT , COPY och ADD . ANVÄNDARE - Ställ in användarnamn eller UID ska användas när du kör någon av ENTRYPOINT , COPY , ENTRYPOINT , COPY och ADD instruktionerna. VOLUME - Gör det möjligt att montera en värdmaskinkatalog i behållaren. EXPOSE - Används för att ange vilken port containern lyssnar på vid körning.

För att utesluta filer och kataloger från att läggas till bilden skapar du en .dockerignore fil i kontextkatalogen. Syntaxen för .dockerignore liknar den i .gitignore fil.

För en fullständig referens och detaljerad förklaring av Dockerfile-instruktioner, se den officiella Dockerfile-referenssidan.

Skapa en Dockerfile

Det vanligaste scenariot när du skapar Docker-bilder är att dra en befintlig bild från ett register (vanligtvis från Docker Hub) och ange de ändringar du vill göra på basbilden. Den mest använda basbilden när du skapar Docker-bilder är Alpine eftersom den är liten och optimerad för att köras i RAM.

Docker Hub är molnbaserad registertjänst som bland andra funktioner används för att hålla Docker-bilderna antingen i ett offentligt eller privat lager.

I det här exemplet kommer vi att skapa en Docker-bild för Redis-servern. Vi kommer att använda den senaste ubuntu 18.04 som en basbild.

Skapa först en katalog som innehåller Dockerfile och alla nödvändiga filer:

mkdir ~/redis_docker

Navigera till katalogen och skapa följande Dockerfile:

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

Låt oss förklara innebörden av var och en av raderna i Dockerfile:

  • I rad 1 definierar vi basbilden. RUN instruktionen som startar i rad 3 kommer att uppdatera apt-indexet, installera paketet "redis-server" och rengöra apt-cache. Kommandona som används i instruktioner är desamma som de kommandon du skulle använda för att installera redis på Ubuntu-server. EXPOSE instruktionen definierar porten som redis-servern lyssnar på. I den sista raden använder vi CMD instruktionen för att ställa in standardkommandot som kommer att köras när behållaren körs.

Spara filen och stäng redigeraren.

Bygga bilden

Nästa steg är att bygga bilden. Kör följande kommando från katalogen där Dockerfile finns:

docker build -t linuxize/redis.

Alternativet -t anger bildnamnet och eventuellt ett användarnamn och tagg i formatet "användarnamn / bildnamn: tagg".

Utgången från byggprocessen ser ut så här:

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

När byggprocessen är klar kommer den nya bilden att listas i bildlistan:

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

Att köra en behållare

Nu när bilden skapas kör du en container från den genom att köra:

docker run -d -p 6379:6379 --name redis linuxize/redis

Alternativen -d berättar Docker att köra behållaren i fristående läge, -p 6379:6379 kommer att publicera porten 6379 till värdmaskinen och --name redis anger det behållarens namn. Det sista argumentet linuxize/redis är namnet på bilden, som används för att köra behållaren.

När behållaren startar använder du följande kommando för att lista alla körbara containrar:

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

För att verifiera att allt fungerar som det ska använda redis-cli att ansluta till dockningsbehållaren:

redis-cli ping

Redis-servern ska svara med PONG .

Slutsats

Denna handledning täckte endast grunderna för att använda Dockerfiles för att bygga bilder. För att lära dig mer om hur du skriver Dockerfiles och rekommenderade bästa metoder se Bästa praxis för att skriva Dockerfiles.

hamnarbetare