Docker: kwete zano rakaipa

Mumashoko echinyorwa changu Docker: zano rakaipa pakanga paine zvikumbiro zvakawanda zvekutsanangura kuti sei Dockerfile yakatsanangurwa mairi yaityisa.

Pfupiso yechikamu chapfuura: Vagadziri vaviri vanogadzira Dockerfile pasi penguva yakaoma. Muchiitiko ichi, Ops Igor Ivanovich anouya kwavari. Iyo Dockerfile inokonzeresa yakashata zvekuti iyo AI iri padanho rekurwadziwa kwemoyo.

Docker: kwete zano rakaipa

Zvino ngationei kuti chii chakashata neiyi Dockerfile.

Saka, vhiki yapfuura.

Dev Petya anosangana naOps Igor Ivanovich muimba yekudyira pamusoro pekapu yekofi.

P: Igor Ivanovich, wakabatikana zvikuru? Ndoda kuona kuti takakanganisa papi.

AI: Izvo zvakanaka, hauwanzo kusangana nevagadziri vanofarira kushandiswa.
Kutanga, ngatibvumirane pazvinhu zvishoma:

  1. Docker ideology: mudziyo mumwe - imwe maitiro.
  2. Iyo diki mudziyo, zviri nani.
  3. Iyo yakawanda iwe yaunotora kubva kune cache, zviri nani.

P: Sei pachifanira kuva nemaitiro mugaba rimwe chete?

AI: Docker, paunotanga mudziyo, inotarisisa mamiriro ekuita ne pid 1. Kana iyo nzira ikafa, Docker anoedza kutangazve mudziyo. Toti une maapplication akati wandei arikumhanya mucontainer, kana main application haisi kushanda nepid 1. Kana iyo process ikafa, Docker haazive nezvazvo.

Kana iwe usina mimwe mibvunzo, ndapota tiratidze yako Dockerfile.

Uye Petya akaratidza:

FROM ubuntu:latest

# Копируем исходный код
COPY ./ /app
WORKDIR /app

# Обновляем список пакетов
RUN apt-get update 

# Обновляем пакеты
RUN apt-get upgrade

# Устанавливаем нужные пакеты
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# Устанавливаем bundler
RUN gem install bundler

# Устанавливаем nodejs используется для сборки статики
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# Устанавливаем зависимости
RUN bundle install --without development test --path vendor/bundle

# Чистим за собой кэши
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 
RUN rake assets:precompile
# Запускаем скрипт, при старте контейнера, который запустит все остальное.
CMD ["/app/init.sh"]

AI: Ah, ngatitorei muhurongwa. Ngatitange nemutsetse wekutanga:

FROM ubuntu:latest

Iwe tora tag latest. Kushandisa tag latest zvinotungamirira kumigumisiro isingatarisirwi. Fungidzira, muchengeti wemufananidzo anovaka vhezheni itsva yemufananidzo nerunyoro rwakasiyana rwesoftware, mufananidzo uyu unogamuchira tag yazvino. Uye mudziyo wako, pakunyanya, unomira kuvaka, uye zvakanyanya, unobata tsikidzi dzisipo kare.

Iwe unotora mufananidzo une yakazara-yakazara OS ine yakawanda isingakoshi software, iyo inowedzera huwandu hwemudziyo. Uye iyo yakawanda software, iyo yakawanda maburi uye kusagadzikana.

Mukuwedzera, iyo yakakura mufananidzo, iyo yakawanda nzvimbo inotora pamusoro pemuiti uye mune registry (unochengeta mifananidzo pane imwe nzvimbo)?

P: Hongu, hongu, isu tine registry, iwe wakamisa.

AI: Saka, ndiri kutaura nezvei? Nokuda kwechifananidzo chimwe chete izvi hazvioneki, asi kana pane chivakwa chinoramba chiripo, miedzo uye kutumirwa, zvinoonekwa. Uye kana iwe usina maitiro aMwari paAWS, iwe zvakare uchawana cosmic bhiri.

Naizvozvo, iwe unofanirwa kusarudza iyo yakanyatsokodzera mufananidzo, ine chaiyo vhezheni uye shoma software. Somuenzaniso, tora: FROM ruby:2.5.5-stretch

P: Ah, ndaona. Ndingaona sei uye kupi mifananidzo iripo? Ndinoziva sei kuti ndeipi yandinoda?

AI: Kazhinji mifananidzo inotorwa kubva dockerhub, usapesane ne pornhub :). Iko kazhinji kune akawanda magungano echifananidzo:
Alpine: mifananidzo inounganidzwa pane minimalistic Linux mufananidzo, chete 5 MB. Kukanganisa kwayo: inosanganiswa neyayo libc kuita, akajairwa mapakeji haashande mairi. Kutsvaga uye kuisa pasuru inodiwa kunotora nguva yakawanda.
Scratch: mufananidzo wekutanga, hauna kushandiswa kugadzira mimwe mifananidzo. Yakagadzirirwa chete kumhanyisa mabhinari, akagadzirirwa data. Yakanakira kumhanyisa mabhinari maapplication ayo anosanganisira zvese zvaunoda, senge GO application.
Kubva pane chero OS, senge Ubuntu kana Debian. Zvakanaka, handifungi kuti pane chikonzero chekutsanangura.

AI: Iye zvino tinoda kuisa zvese zvekuwedzera. mapakeji uye bvisa cache dzako. Uye iwe unogona kuzvikanda pakarepo zvakakodzera-tanga kusimbisa. Zvikasadaro, nekuvaka kwega kwega, kunyangwe iyo yakagadziriswa tag yeiyo base image, mifananidzo yakasiyana ichawanikwa. Kuvandudza mapakeji mumufananidzo ibasa remuchengeti uye rinoperekedzwa nekuchinja tag.

P: Ehe, ndakaedza kuzviita, zvakazoitika seizvi:

WORKDIR /app
COPY ./ /app

RUN curl -sL https://deb.nodesource.com/setup_9.x | bash - 
    && apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle

RUN rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

AI: Hazvina kushata, asi pane zvakare chimwe chinhu chekushanda. Tarisa, heino murairo uyu:

RUN rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*  

... haibvisi data kubva pamufananidzo wekupedzisira, asi inongogadzira imwe yekuwedzera isina iyi data. Zvakanaka seizvi:

RUN curl -sL https://deb.nodesource.com/setup_9.x | bash - 
    && apt-get -y install libpq-dev imagemagick gsfonts nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle   
    && rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

Asi handizvo zvoga. Unei ikoko, Ruby? Ipapo haufanirwe kukopa purojekiti yese pakutanga. Zvakakwana kukopa Gemfile uye Gemfile.lock.

Neiyi nzira, kuisa bundle hakuzoitwe kune yega yega shanduko, asi chete kana iyo Gemfile kana Gemfile.lock yachinja.

Idzo nzira dzakafanana dzinoshanda kune mimwe mitauro ine maneja anotsamira, senge npm, pip, muimbi uye nevamwe zvichibva pafaira rine runyorwa rwekutsamira.

Uye pakupedzisira, rangarira pakutanga ndakataura nezve Docker ideology "mudziyo mumwe - imwe maitiro"? Izvi zvinoreva kuti mutariri haadiwi. Iwe haufanirwe zvakare kuisa systemd, nekuda kwezvikonzero zvakafanana. Chaizvoizvo, Docker pachayo ndiye mutariri. Uye kana iwe ukayedza kumhanya akawanda maitiro mairi, zvakafanana nekumhanyisa akawanda maapplication mune imwe mutariri maitiro.
Paunenge uchivaka, iwe unogadzira mufananidzo mumwechete, uye wobva watanga nhamba inodiwa yemidziyo kuitira kuti imwe nzira iite mune imwe neimwe.

Asi zvakawanda pamusoro pazvo gare gare.

P: Ndinofunga ndinonzwisisa. Tarisa zvinoitika:

FROM ruby:2.5.5-stretch

WORKDIR /app
COPY Gemfile* /app

RUN curl -sL https://deb.nodesource.com/setup_9.x | bash - 
    && apt-get -y install libpq-dev imagemagick gsfonts nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle   
    && rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

COPY . /app
RUN rake assets:precompile

CMD ["bundle”, “exec”, “passenger”, “start"]

Tinogona here kupfuudza kuvhurwa kwemadhimoni kana tichitanga mudziyo?

AI: Hongu, ndizvozvo. Nenzira, unogona kushandisa ese CMD uye ENTRYPOINT. Uye kuziva kuti musiyano chii ibasa rako rechikoro. Pane yakanaka pane iyi nyaya paHabré chinyorwa.

Saka, ngatienderere mberi. Iwe unotora faira kuti uise node, asi hapana vimbiso yekuti ichava nezvaunoda. Tinofanira kuwedzera kusimbiswa. Semuenzaniso, seizvi:

RUN curl -sL https://deb.nodesource.com/setup_9.x > setup_9.x 
    && echo "958c9a95c4974c918dca773edf6d18b1d1a41434  setup_9.x" | sha1sum -c - 
    &&  bash  setup_9.x 
    && rm -rf setup_9.x 
    && apt-get -y install libpq-dev imagemagick gsfonts nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle   
    && rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

Uchishandisa checksum unogona kuona kuti wakadhawunirodha faira chairo.

P: Asi kana iyo faira ikachinja, iyo inovaka ichakundikana.

AI: Hongu, uye zvisinganzwisisike, izvi zvakare kuwedzera. Iwe uchaziva kuti faira rachinja, uye iwe uchakwanisa kuona zvakachinjwa ipapo. Iwe hauzive, ivo vakawedzera, toti, script inodzima zvese zvayaigona kusvika, kana kugadzira yekumashure.

P: Maita basa. Zvinoitika kuti iyo yekupedzisira Dockerfile ichaita seizvi:

FROM ruby:2.5.5-stretch

WORKDIR /app
COPY Gemfile* /app

RUN curl -sL https://deb.nodesource.com/setup_9.x > setup_9.x 
    && echo "958c9a95c4974c918dca773edf6d18b1d1a41434  setup_9.x" | sha1sum -c - 
    &&  bash  setup_9.x 
    && rm -rf setup_9.x 
    && apt-get -y install libpq-dev imagemagick gsfonts nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle   
    && rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

COPY . /app
RUN rake assets:precompile

CMD ["bundle”, “exec”, “passenger”, “start"]

P: Igor Ivanovich, ndinokutendai nerubatsiro rwenyu. Yave nguva yekuti ndimhanye, ndinofanira kuita mamwe gumi nhasi.

Igor Ivanovich, achimisa shamwari yake yekukurumidzira nekutarisa kwake, anotora kofi yakasimba. Mushure mekufunga kwemasekonzi mashoma nezve 99.9% SLA uye bug-isina kodhi, anobvunza mubvunzo.

AI: Unochengetera kupi matanda?

P: Ehe, mune production.log. Nenzira, hongu, asi tingavawana sei pasina ssh?

AI: Kana ukavasiya mumafaira, mhinduro yakatogadzirirwa iwe. Iyo docker exec command inobvumidza iwe kuita chero kuraira mumudziyo. Semuenzaniso, unogona kuita katsi yematanda. Uye kushandisa kiyi -izvo uye kumhanya bash (kana yakaiswa mumudziyo) inokupa iwe yekudyidzana kupinda mumudziyo.

Asi haufanirwe kuchengeta matanda mumafaira. Pazvishoma, izvi zvinotungamirira kukura kusingadzorwi kwemudziyo, uye hapana anotenderera matanda. Marogi ese anofanira kutumirwa kustdout. Ikoko vanogona kutoonekwa vachishandisa murairo docker logs.

P: Igor Ivanovich, pamwe ndinogona kuisa matanda mudhairekitori rakasimudzwa, pane node yemuviri, se data remushandisi?

AI: Zvakanaka kuti hauna kukanganwa kubvisa iyo data yakatakurwa pane node's disk. Iwe unogona kuita izvi nematanda zvakare, usakanganwa kuseta kutenderera.
Ndizvozvo, unogona kumhanya.

P: Igor Ivanovich, unogona kundiraira kuti ndiverenge?

AI: Kutanga, verenga mazano kubva kuDocker Developers, hapana anoziva Docker zviri nani kupfuura ivo.

Uye kana iwe uchida kuwana internship, enda intensive. Pashure pezvose, dzidziso isina muitiro yakafa.

Source: www.habr.com

Voeg