Android

Hvordan bygge docker-bilder med dockerfile

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

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

Innholdsfortegnelse:

Anonim

Et Docker-bilde er tegningen av Docker-containere som inneholder applikasjonen og alt du trenger for å kjøre applikasjonen. En container er en runtime-forekomst av et bilde.

I denne opplæringen skal vi forklare hva Dockerfile er, hvordan man lager en, og hvordan man bygger et Docker-bilde med Dockerfile.

Hva er Dockerfile

En Dockerfile er en tekstfil som inneholder alle kommandoene en bruker kan kjøre på kommandolinjen for å lage et bilde. Den inneholder alle instruksjonene som Docker trenger for å bygge et bilde.

Docker-bilder består av en serie filsystemlag som representerer instruksjoner i bildets Dockerfile som utgjør et kjørbart program.

Docker-filen har følgende form:

# Comment INSTRUCTION arguments

INSTRUCTION er ikke store og små bokstaver, men konvensjonen er å bruke UPPERCASE for navnene.

Nedenfor er listen med en kort beskrivelse av noen av de mest brukte Dockerfile instruksjonene:

  • ARG - Denne instruksjonen lar deg definere variabler som kan sendes ved byggetid. Du kan også angi en standardverdi. FRA - Basebildet for å bygge et nytt bilde. Denne instruksjonen må være den første instruksjonen uten kommentarer i Dockerfile. Det eneste unntaket fra denne regelen er når du vil bruke en variabel i FROM argumentet. I dette tilfellet kan FROM gå foran en eller flere ARG instruksjoner. LABEL - Brukes til å legge metadata til et bilde, for eksempel beskrivelse, versjon, forfatter.. osv. Du kan spesifisere mer enn ett LABEL , og hver LABEL instruksjon er et nøkkelverdipar. Kjør - Kommandoene spesifisert i denne instruksjonen vil bli utført under byggeprosessen. Hver RUN instruksjon oppretter et nytt lag på toppen av det nåværende bildet. LEGG TIL - Brukes til å kopiere filer og kataloger fra den angitte kilden til den angitte destinasjonen på dockerbildet. Kilden kan være lokale filer eller kataloger eller en URL. Hvis kilden er et lokalt tjærearkiv, pakkes den automatisk inn i Docker-bildet. KOPI - Ligner på ADD men kilden kan bare være en lokal fil eller katalog. ENV - Denne instruksjonen lar deg definere en miljøvariabel. CMD - Brukes til å spesifisere en kommando som skal utføres når du kjører en container. Du kan bare bruke en CMD instruksjon i Dockerfile. ENTRYPOINT - I likhet med CMD definerer denne instruksjonen hvilken kommando som skal utføres når du kjører en container. WORKDIR - Dette direktivet angir gjeldende arbeidskatalog for instruksjonene RUN , CMD , ENTRYPOINT , COPY og ADD . BRUKER - Angi brukernavn eller UID skal brukes når du kjører følgende RUN , CMD , ENTRYPOINT , ENTRYPOINT og ADD instruksjoner. VOLUME - Gjør det mulig å montere en vertsmaskinkatalog til beholderen. EKSPONERING - Brukes til å spesifisere porten som containeren lytter til under kjøretid.

Hvis du vil ekskludere filer og kataloger fra å bli lagt til i bildet, oppretter du en .dockerignore fil i kontekstkatalogen. Syntaks for .dockerignore ligner på den av Git's .gitignore fil.

For den fullstendige referansen og detaljerte forklaringen av Dockerfile-instruksjonene, se den offisielle Dockerfile-referansesiden.

Lag en Dockerfile

Det vanligste scenariet når du oppretter Docker-bilder er å trekke et eksisterende bilde fra et register (vanligvis fra Docker Hub) og spesifisere endringene du vil gjøre på basisbildet. Det mest brukte basebildet når du lager Docker-bilder er Alpine fordi det er lite og optimalisert for å kjøres i RAM.

Docker Hub er skybasert registertjeneste som blant annet brukes til å oppbevare Docker-bildene enten i et offentlig eller privat depot.

I dette eksemplet vil vi lage et Docker-bilde for Redis-serveren. Vi bruker den nyeste ubuntu 18.04 som et grunnbilde.

Lag først en katalog som vil inneholde Dockerfile og alle nødvendige filer:

mkdir ~/redis_docker

Naviger til katalogen og lag 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

La oss forklare betydningen av hver av linjene i Dockerfile:

  • I linje 1 definerer vi grunnbildet. RUN instruksjonen som starter i linje 3 vil oppdatere apt-indeksen, installere pakken “redis-server” og rense apt cache. Kommandoene som brukes i instruksjoner er de samme som kommandoene du vil bruke for å installere redis på Ubuntu-server. EXPOSE-instruksjonen definerer porten som redis-serveren skal lytte til på. I den siste linjen bruker vi CMD instruksjonen for å sette standardkommandoen som vil bli utført når containeren går.

Lagre filen og lukk redigereren.

Bygge bildet

Neste trinn er å bygge bildet. Kjør følgende kommando fra katalogen der Dockerfile ligger:

docker build -t linuxize/redis.

Alternativet -t spesifiserer bildenavnet og eventuelt et brukernavn og etikett i formatet 'brukernavn / imagenavn: tagg'.

Utgangen fra byggeprosessen vil se slik ut:

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 byggeprosessen er fullført, vil det nye bildet vises i bildelisten:

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

Å kjøre en container

Nå som bildet er opprettet, kjører du en container fra det ved å kjøre:

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

Alternativene -d sier til Docker å kjøre beholderen i frittliggende modus, alternativet -p 6379:6379 vil publisere porten 6379 til vertsmaskinen, og alternativet - --name redis spesifiserer beholdernavnet. Det siste argumentet linuxize/redis er navnet på bildet, som brukes til å kjøre containeren.

Når beholderen starter, bruk følgende kommando for å liste alle containere som kjører:

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 å bekrefte at alt fungerer som det skal bruke redis-cli å koble til dockercontaineren:

redis-cli ping

Redis-serveren skal svare med PONG .

Konklusjon

Denne opplæringen dekket bare det grunnleggende om å bruke Dockerfiles til å lage bilder. Hvis du vil lære mer om hvordan du skriver Dockerfiles og anbefalt beste praksis, kan du se Best practices for å skrive Dockerfiles.

Docker