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