Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.
Innehållsförteckning:
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
FROMargumentet. I detta fall kanFROMföregås av en eller fleraARGinstruktioner. 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 enLABEL, och varjeLABELinstruktion är ett nyckelvärdespar. RUN - Kommandona som anges i denna instruktion kommer att köras under byggprocessen. VarjeRUNinstruktion 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 - LiknarADDmen 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 enCMDinstruktion i din Dockerfile. ENTRYPOINT - I likhet medCMDdefinierar 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 instruktionernaRUN,CMD,ENTRYPOINT,COPYochADD. ANVÄNDARE - Ställ in användarnamn ellerUIDska användas när du kör någon avENTRYPOINT,COPY,ENTRYPOINT,COPYochADDinstruktionerna. 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.
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
1definierar vi basbilden.RUNinstruktionen som startar i rad3kommer 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.EXPOSEinstruktionen definierar porten som redis-servern lyssnar på. I den sista raden använder viCMDinstruktionen 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.
Ledamöter av Europaparlamentet kommer att avgöra om en rad frågor, bland annat hur man reglerar telekomföretag i EU, hur man straffar företag som snedvrider konkurrensen, hur man delar radiofrekvenser som släpps av TV: s migrering till digital sändning och hur man skyddar medborgarnas data i den digitala tiden.
Men de är delade om huruvida IP-adresser ska ses som personuppgifter. "Vi kommer att be kommissionen att formellt lägga fram en rapport om detta", säger Malcolm Harbour, en brittisk konservativ parlamentsledamot som spelar en central roll för att hylla den så kallade telekomrevisionen genom parlamentet.
Det finns ett brett utbud av tablettalternativ för att dumma och förvåna shoppare under semestern. Microsoft har en solid contender med sin nuvarande Surface-tablett, men den kör det mer begränsade Windows RT-operativsystemet som var konstruerat för användning med ARM-baserade processorer. Jag har redan granskat hur Surface RT slår iPad, och hur iPad slår Surface RT, men hur är det med tabletter som driver det kraftfullare Windows 8 Pro OS?
Samsung Series 7 Slate har en Intel Core i5 processor.
Hur man bygger enkla träningsrutiner med vinstkondition
Är du intresserad av att bygga enkla träningsrutiner som du kan prova hemma? Kolla in den här tjänsten som heter GAIN Fitness som hjälper dig att göra det enkelt.







