Kuna ma märkasin, et meie koostatud rakendus on oluliselt laienenud, otsustasin leida täiesti uue meetodi selle käivitamise protsessi automatiseerimiseks. Minu jaoks oli oluline leida lahendus, mis võimaldaks uusi funktsioone eraldi aktiveerida.
Sissejuhatus
Lihtsama protsessi automatiseerimise meetodi avastamine parandaks oluliselt nii minu kui ka kogu mu tööd. meeskond. Ma mõtlesin, et miks mitte kasutada Dockerit?"
Ettevalmistusetapis lõin kaks seadistust: ühe front-end rakenduse jaoks ja teise API jaoks. Allpool näete esitlust sellest, mida ma arendusprotsessi käigus õppisin.
Esimene probleem
Ma tahan, et konteineris oleks kloonitud repositoorium, seega lisasin Dockerfile'i käsuga ADD ssh võtme:
ADD ~/.ssh/testowy
Ja pam! Faili ei leitud. Miks?
Oletame, et meil on järgmine kaustade struktuur:
docker/
|-- stuff/
|-- test.txt
|-- Dockerfile
server/
|-- data
| |-- setup.yml
Käskkirja käivitamine ehitada
aastal login-queue
kausta ja saate lisada faile ainult kohalikust kaustast ja selle kohalikest alamkaustadest, nt stuff.
Kui soovite lisada server
kausta, saate teate: "Konteksti ei ole võimalik ette valmistada"
Dockerignore
Olete kunagi mõelnud, miks pildi loomine nii kaua aega võtab? Võib-olla te ei kasutanud .dockerignore
, et ignoreerida faile, mis ei ole pildil vajalikud. Veebileht .git
kaust tuleks automaatselt eemaldada, nagu ka kõik ajutised failid.
Käskude järjekord Dockerfile'is
Docker salvestab iga rea Dockerfile'i kujul ja pärast ehitamist salvestatakse iga rida kihina. Väga oluline on, et teatud käskude järjekorda ei muudetaks liiga tihti.
FROM ubuntu
Käivita apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universum" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y nodejs=0.6.12~dfsg1-1ubuntu1
RUN mkdir /var/www
ADD app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]
Näiteks kui muudate Dockerfile'i viimast rida, laaditakse kõik eelnevad read vahemälust alla, samas kui viimane rida muudetakse. Kui te vahetate rea nr 4 välja, siis muudetakse kõiki ridu alates reast 4 kuni lõpuni. Seetõttu tasub käsud, mida ei muudeta, paigutada faili algusesse.
Failide kopeerimine pildile
Tasub kaaluda, milleks antud pilti kasutatakse. Kui teil on vaja seda teenuse käivitamiseks üks kord, siis kopeerige lihtsalt kood sisu otse pildile:
COPY . /workdir
Kahjuks muudab see failide redigeerimise võimatuks ja iga kord, kui soovite oma koodi muuta, peate pildi uuesti koostama.
Kui kasutate MacOS-i ja soovite kasutada ehitatud kujutist arendamiseks, peate lähenema sellele küsimusele veidi teisiti. Kui te kasutate mahuteid, siis peate olema valmis, et see on äärmiselt aeglane lahendus (nt faili kopeerimine hostilt konteinerisse toimub kiirusega 4,5 MB/s, samas kui konteineri sees kopeerimine toimub 10-20x suurema kiirusega). Õnneks, nagu näete aadressil link, on probleem teada ja selle lahendamine on Dockeri Macile arendamise eest vastutava meeskonna jaoks võtmeküsimus.
Kuidas saab Dockerit sellises olukorras arendamiseks kasutada?
Võite kasutada seda väliste teenuste jaoks, nt Redis/PSQL/Elasticsearch või kasutada valmis lahendusi, mis pakuvad rsync-i: https://github.com/brikis98/docker-osx-dev
Kokkuvõtteks
Kui teil on suur meeskond ja soovite testida uut funktsiooni, on docker ideaalne vahend! Kas ma siiski kasutaksin seda serveri tootmises käivitamiseks? Ma ei ole veel täiesti veendunud...
Lisaks sellele soovitan mõned silmapaistvad artiklid: