joi, 5 septembrie 2019

2.5 Optimizarea fisierului tau Docker prin respectare celor mai bune practici

Problema

Vei vrea sa urmezi cele mai bune practici pentru a iti scrie fisierul tau Docker si a iti optimiza imaginea ta Docker.


Solutia

Documentatia Docker a publicat cele mai bune practice pentru a scrie fisiere Docker. Aceasta reteta subliniaza cateva din ele pentru a te pune pe calea builduirii imaginilor bune:
1. Ruleaza un singur process pe container. Chiar daca poti rula mai multe prcese pe container (e.g., Reteta 1.15), creeand imaginicare vor rula numai un process sau cel putin un serviciu functional pe container te va ajuta sa buildui aplicatii  decuplate care pot scala. Profita de avantajul unui container prin linkuirea (vezi Reteta 3.3) sau alte tehnici de container-retea (vezi capitolul 3) pentru a avea containere care comunica intre ele.
2. Nu considera ca containerele tale vor supravietui la infinit; ele sunt efemere si se vor opri si restarta. Ar trebui sa le tratezi ca entitati imuabile, cee ace inseamna ca ar trebui sa nu le modifici ci in schimb sa le restartezi din imaginea ta de baza. Asadar gestioneaza configuratia de runtime si datele din afara containerelor si de asemenea imaginea. Foloseste volumele Docker (vezi Reteta 1.18 si Reteta 1.19) pentru asta.
3. Foloseste fisierul .dockerignore. Cand imaginile se builduie, Docker-ul va  copia contentul directorului de lucru unde exista fisiere Docker(ex: contextual buildului) intr-o imagine. Folosind .dockerignore, poti exclude fisiere si directoare care urmeaza sa fiecopiate in timpul procesului de build. Daca nu folosesti un fisier docker, asigura-te ca ti-ai builduit imaginea intr-un director care are minimul ceru. Verifica sintaxa dintrun fisier .dockerignore.
4. Foloseste imaginile oficiale din docker Hub in locul crarii lor de la zero. Aceste fisiere sunt mentinute si autorizate de proiectele autorizatoare de software. Poti folosi de asemenea si imagini ONBUILD (vezi Reteta 2.10) pentru a simplifica chiar si mi mult imagiile tale.
5. In cele din urma, minimizare numarlui de layere ale imaginilor tale si profita de avantajul cache-ului imaginii. Docker foloseste uniunea fisierelor de system pentru astoca imagini. Asta inseamna ca fiecare imagine este facuta dintr-I imagine de baza plus o colectie de diferente si adaugari de schimbari necesare. Fiecare diferenta reprezinta un layer additional al imaginii. Asta are un impact direct asupra  felului cum iti scrii fisierul Docker si folosesti diverse directive. Urmatoarea sectiune ilustreaza acest punct mai in detaliu.

Discutie

In reteta 2.4, ai vazut primul tau fisier Docker. Care incepe cu urmatoarele directive:
FROM ubuntu:14.04
RUN apt-get update RUN apt-get install -y python RUN apt-get install -y python-pip
RUN apt-get clean
RUN pip install flask
ADD hello.py /tmp/hello.py
...
El contine cateva cateva lucruri care ilustreaza  cateva dintre bunele practici pe care sa le folosesti in schimb. Faptul ca foloseste Ubuntu:14.04 imagine oficiala este bine. Vei incepe prin a iti instala cateva pachete folosind mai multe comenzi RUN. Asta este o practica rea, pentru ca vei adauga layere suplimentare nenecesare imaginii. De asemenea ai folosi conda ADD pentru a copia un fisier simplu. In locul acestui exemplu,  ar trebui sa folosesti comanda COPY (ADD permite scenario de copier a fisierelor mult mai complexe). De aceea fisierul Docker ar trebui sa fie scris in felul urmator:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y \   
python   
python-pip
RUN pip install flask
COPY hello.py /tmp/hello.py
 ...
Asta ar putea fi facut chiar si mai bine folosind imaginea oficiala Python:
FROM python:2.7.10
RUN pip install flask
COPY hello.py /tmp/hello.py
...
N-ar trebui sa fie obositor, dar iti da un gust de cum iti poti optimiza fisierul Docker. Pentru mai multe informtii detaliate, vezi cele mai bune practici recomandate.

Niciun comentariu:

Trimiteți un comentariu