Android

Sådan oprettes dockerbilleder med dockerfile

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks

Indholdsfortegnelse:

Anonim

Et Docker-billede er planen af ​​Docker-containere, der indeholder applikationen og alt hvad du har brug for for at køre applikationen. En container er en runtime-forekomst af et billede.

I denne tutorial vil vi forklare, hvad Dockerfile er, hvordan man opretter en, og hvordan man bygger et Docker-billede med Dockerfile.

Hvad er Dockerfile

En Dockerfile er en tekstfil, der indeholder alle de kommandoer, en bruger kunne køre på kommandolinjen for at oprette et billede. Det indeholder alle de instruktioner, som Docker har brug for til at opbygge billedet.

Docker-billeder består af en række filsystemlag, der repræsenterer instruktioner i billedets Dockerfile, der udgør en eksekverbar softwareapplikation.

Docker-filen har følgende form:

# Comment INSTRUCTION arguments

INSTRUCTION er ikke store og små bogstaver, men konventionen er at bruge UPPERCASE til dens navne.

Nedenfor er listen med en kort beskrivelse af nogle af de mest brugte Dockerfile instruktioner:

  • ARG - Denne instruktion giver dig mulighed for at definere variabler, der kan videregives ved bygningstid. Du kan også indstille en standardværdi. FRA - Basisbillede til opbygning af et nyt billede. Denne instruktion skal være den første instruktion uden kommentar i Dockerfile. Den eneste undtagelse fra denne regel er, når du vil bruge en variabel i FROM argumentet. I dette tilfælde kan FROM foregå med en eller flere ARG instruktioner. LABEL - Bruges til at tilføje metadata til et billede, såsom beskrivelse, version, forfatter.. osv. Du kan specificere mere end et LABEL , og hver LABEL instruktion er et nøgleværdipar. KØR - De kommandoer, der er specificeret i denne instruktion, udføres under byggeprocessen. Hver RUN instruktion opretter et nyt lag øverst på det aktuelle billede. TILFØJ - Bruges til at kopiere filer og mapper fra den angivne kilde til den specificerede destination på dockerbilledet. Kilden kan være lokale filer eller mapper eller en URL. Hvis kilden er et lokalt tjærarkiv, pakkes den automatisk ud i Docker-billedet. KOPI - Ligner ADD men kilden kan kun være en lokal fil eller bibliotek. ENV - Denne instruktion giver dig mulighed for at definere en miljøvariabel. CMD - Bruges til at specificere en kommando, der udføres, når du kører en container. Du kan kun bruge en CMD instruktion i din Dockerfile. ENTRYPOINT - I lighed med CMD definerer denne instruktion, hvilken kommando der skal udføres, når du kører en container. WORKDIR - Dette direktiv indstiller den aktuelle arbejdsmappe til instruktionerne RUN , CMD , ENTRYPOINT , COPY og ADD . BRUGER - Indstil brugernavnet eller UID skal bruges, når du kører følgende RUN , CMD , ENTRYPOINT , ENTRYPOINT og ADD instruktioner. VOLUME - Gør det muligt at montere et værtsmaskins bibliotek på beholderen. EKSPONERING - bruges til at specificere den port, som containeren lytter til under kørsel.

For at ekskludere filer og mapper fra at blive føjet til billedet skal du oprette en .dockerignore fil i kontekstmappen. Syntaks for .dockerignore ligner den i Git's .gitignore fil.

For en komplet henvisning og detaljeret forklaring af Dockerfile-instruktioner se den officielle Dockerfile-referenceside.

Opret en Dockerfile

Det mest almindelige scenarie, når du opretter Docker-billeder, er at trække et eksisterende billede fra et register (normalt fra Docker Hub) og specificere de ændringer, du vil foretage på basisbilledet. Det mest almindeligt anvendte basisbillede, når du opretter Docker-billeder, er Alpine, fordi det er lille og optimeret til at køre i RAM.

Docker Hub er skybaseret registertjeneste, som blandt andet bruges til at opbevare Docker-billederne enten i et offentligt eller privat oplagringssted.

I dette eksempel opretter vi et Docker-billede til Redis-serveren. Vi bruger den nyeste ubuntu 18.04 som basisbillede.

Opret først et bibliotek, der vil indeholde Dockerfile og alle de nødvendige filer:

mkdir ~/redis_docker

Naviger til biblioteket og opret følgende 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

Lad os forklare betydningen af ​​hver af linjerne i Dockerfile:

  • I linje 1 definerer vi basisbilledet. RUN instruktionen, der starter i linje 3 vil opdatere apt-indekset, installere pakken “redis-server” og rense apt cache. De kommandoer, der bruges i instruktioner, er de samme som de kommandoer, du vil bruge til at installere redis på Ubuntu-server. EXPOSE-instruktionen definerer den port, hvorpå redis-serveren lytter til. I den sidste linje bruger vi CMD instruktionen til at indstille standardkommandoen der udføres, når containeren kører.

Gem filen, og luk redigeringsprogrammet.

Bygning af billedet

Det næste trin er at opbygge billedet. Dette gøres ved at køre følgende kommando fra det bibliotek, hvor Dockerfile er placeret:

docker build -t linuxize/redis.

Indstillingen -t specificerer billednavnet og eventuelt et brugernavn og etiket i formatet 'brugernavn / imagenavn: tag'.

Output fra build-processen vil se sådan ud:

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 byggeprocessen er afsluttet, vises det nye billede på billedlisten:

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

Kører en container

Nu, hvor billedet er oprettet, kører du en container fra det ved at køre:

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

Valgmulighederne -d fortæller Docker at køre containeren i løsrevet tilstand, indstillingen -p 6379:6379 offentliggør porten 6379 til værtsmaskinen, og indstillingen - --name redis specificerer containernavnet. Det sidste argument linuxize/redis er navnet på billedet, der bruges til at køre containeren.

Når containeren starter, skal du bruge følgende kommando til at liste alle kørende containere:

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

For at kontrollere, at alt fungerer som det skal bruge redis-cli til at oprette forbindelse til redis-cli :

redis-cli ping

Redis-serveren skal svare med PONG .

Konklusion

Denne tutorial dækkede kun det grundlæggende ved at bruge Dockerfiles til at opbygge billeder. For at lære mere om, hvordan du skriver Dockerfiles og den anbefalede bedste praksis, se Best practices for skrivning af Dockerfiles.

havnearbejder