Android

Cum se construiesc imagini docker cu dockerfile

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

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

Cuprins:

Anonim

O imagine Docker este modelul containerelor Docker care conține aplicația și tot ceea ce aveți nevoie pentru a rula aplicația. Un container este o instanță de execuție a unei imagini.

În acest tutorial, vă vom explica ce este Dockerfile, cum să creați unul și cum să construiți o imagine Docker cu Dockerfile.

Ce este Dockerfile

Un Dockerfile este un fișier text care conține toate comenzile pe care un utilizator le-ar putea rula pe linia de comandă pentru a crea o imagine. Include toate instrucțiunile necesare Docker pentru a construi imaginea.

Imaginile Docker sunt alcătuite dintr-o serie de straturi de sistem de fișiere reprezentând instrucțiuni în fișierul Dockerfile al imaginii care alcătuiește o aplicație software executabilă.

Fișierul Docker are următoarea formă:

# Comment INSTRUCTION arguments

INSTRUCTION nu este sensibilă la caz, dar convenția este de a utiliza UPPERCASE pentru numele sale.

Mai jos este lista cu o scurtă descriere a unora dintre cele mai utilizate instrucțiuni Dockerfile:

  • ARG - Această instrucțiune vă permite să definiți variabile care pot fi transmise la timp de construire. Puteți seta, de asemenea, o valoare implicită. FROM - Imaginea de bază pentru construirea unei noi imagini. Această instrucțiune trebuie să fie prima instrucțiune care nu comentează în Dockerfile. Singura excepție de la această regulă este atunci când doriți să utilizați o variabilă în argumentul FROM . În acest caz, FROM poate fi precedat de una sau mai multe instrucțiuni ARG . LABEL - Folosit pentru a adăuga metadate la o imagine, cum ar fi descriere, versiune, autor.. etc. Puteți specifica mai mult de un LABEL și fiecare instrucțiune LABEL este o pereche cheie-valoare. RUN - Comenzile specificate în această instrucțiune vor fi executate în timpul procesului de compilare. Fiecare instrucțiune RUN creează un nou strat în partea de sus a imaginii curente. ADD - Folosit pentru copierea fișierelor și directoarelor din sursa specificată la destinația specificată din imaginea docker. Sursa poate fi fișiere sau directoare locale sau o adresă URL. Dacă sursa este o arhivă de gudron local, atunci aceasta este despachetată automat în imaginea Docker. COPIE - Similar cu ADD dar sursa poate fi doar un fișier sau director local. ENV - Această instrucțiune vă permite să definiți o variabilă de mediu. CMD - Se folosește pentru a specifica o comandă care va fi executată atunci când rulați un container. Puteți utiliza o singură instrucțiune CMD în Dockerfile. ENTRYPOINT - Similar cu CMD , această instrucțiune definește ce comandă va fi executată la rularea unui container. WORKDIR - Această directivă stabilește directorul de lucru curent pentru instrucțiunile RUN , CMD , ENTRYPOINT , COPY și ADD . UTILIZATOR - Setați numele de utilizator sau UID care îl folosiți atunci când executați următoarele instrucțiuni RUN , CMD , ENTRYPOINT , COPY și ADD . VOLUM - Vă permite să montați un director de mașină gazdă pe container. EXPOSE - Folosit pentru a specifica portul pe care containerul îl ascultă la runtime.

Pentru a exclude fișierele și directoarele de la adăugarea la imagine, creați un fișier .dockerignore în directorul contextual. Sintaxa .dockerignore este similară cu cea a fișierului .gitignore de la Git.

Pentru o referință completă și explicație detaliată a instrucțiunilor Dockerfile, consultați pagina oficială de referință Dockerfile.

Creați un Dockerfile

Cel mai frecvent scenariu la crearea de imagini Docker este să trageți o imagine existentă dintr-un registru (de obicei din Docker Hub) și să specificați modificările pe care doriți să le faceți pe imaginea de bază. Imaginea de bază cea mai frecvent utilizată la crearea imaginilor Docker este Alpine, deoarece este mică și optimizată pentru a fi rulată în RAM.

Docker Hub este un serviciu de registru bazat pe cloud care, printre alte funcționalități, este utilizat pentru păstrarea imaginilor Docker, fie într-un depozit public sau privat.

În acest exemplu, vom crea o imagine Docker pentru serverul Redis. Vom folosi cea mai recentă ubuntu 18.04 ca imagine de bază.

Mai întâi, creați un director care va conține Dockerfile și toate fișierele necesare:

mkdir ~/redis_docker

Navigați la director și creați următorul 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

Să explicăm semnificația fiecăreia dintre liniile din Dockerfile:

  • În linia 1 definim imaginea de bază. Instrucțiunea RUN care începe în linia 3 va actualiza indexul apt, va instala pachetul „redis-server” și va curăța memoria cache apt. Comenzile utilizate în instrucțiuni sunt aceleași cu comenzile pe care le-ați folosi pentru a instala redis pe serverul Ubuntu. Instrucțiunea EXPOSE definește portul pe care ascultă serverul redis. În ultima linie, utilizăm instrucțiunea CMD pentru a seta comanda implicită care va fi executat la rularea containerului.

Salvați fișierul și închideți editorul.

Construirea imaginii

Următorul pas este construirea imaginii. Pentru aceasta, executați următoarea comandă din directorul în care se află Dockerfile:

docker build -t linuxize/redis.

Opțiunea -t specifică numele imaginii și, opțional, un nume de utilizator și o etichetă în formatul „nume de utilizator / imagename: etichetă”.

Rezultatul procesului de compilare va arăta astfel:

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

După finalizarea procesului de construire, noua imagine va fi prezentată în lista de imagini:

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

Rularea unui container

Acum că imaginea este creată, rulați un container de pe ea rulând:

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

Opțiunile -d îi spun lui Docker să ruleze containerul în modul detașat, opțiunea -p 6379:6379 va publica portul 6379 mașinii gazdă, iar opțiunea - --name redis specifică numele containerului. Ultimul argument linuxize/redis este numele imaginii, care este utilizat pentru a rula containerul.

Când pornește containerul, utilizați următoarea comandă pentru a enumera toate containerele care rulează:

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

Pentru a verifica dacă totul funcționează așa cum ar trebui să utilizeze redis-cli pentru a vă conecta la containerul docker:

redis-cli ping

Serverul redis ar trebui să răspundă cu PONG .

Concluzie

Acest tutorial a acoperit doar elementele de bază ale utilizării Dockerfiles pentru a construi imagini. Pentru a afla mai multe despre cum se scrie Dockerfiles și despre cele mai bune practici recomandate, consultați Cele mai bune practici pentru scrierea Dockerfiles.

docher