Docker: ọ bụghị ndụmọdụ ọjọọ

N'okwu m kwuru Docker: ndụmọdụ ọjọọ enwere ọtụtụ arịrịọ iji kọwaa ihe kpatara Dockerfile akọwara na ya ji dị egwu.

Nchịkọta nke ihe omume gara aga: Ndị mmepe abụọ na-edepụta Dockerfile n'okpuru oge ngwụcha. N'ime usoro ahụ, Ops Igor Ivanovich na-abịakwute ha. Dockerfile na-esi na ya pụta dị njọ nke na AI dị na njedebe nke nkụchi obi.

Docker: ọ bụghị ndụmọdụ ọjọọ

Ugbu a, ka anyị chọpụta ihe dị njọ na Dockerfile a.

Ya mere, otu izu agafeela.

Dev Petya zutere Ops Igor Ivanovich n'ime ụlọ iri nri n'elu otu iko kọfị.

P: Igor Ivanovich, ị na-arụsi ọrụ ike? Ọ ga-amasị m ịchọpụta ebe anyị kpara nkata.

AI: Nke ahụ dị mma, ị naghị ezutekarị ndị mmepe nwere mmasị na nrigbu.
Nke mbụ, ka anyị kwekọrịta n'ihe ole na ole:

  1. Docker ideology: otu akpa - otu usoro.
  2. Obere akpa ahụ, ọ ka mma.
  3. Ka ị na-enwetakwu na cache, ọ ka mma.

P: Gini mere enwere ike inwe otu usoro n'ime otu akpa?

AI: Docker, mgbe ị na-amalite akpa, na-enyocha ọnọdụ nke usoro ahụ na pid 1. Ọ bụrụ na usoro ahụ anwụọ, Docker na-agbalị ịmalitegharị akpa ahụ. Ka anyị kwuo na ị nwere ọtụtụ ngwa na-agba ọsọ n'ime akpa, ma ọ bụ ngwa ngwa anaghị arụ ọrụ na pid 1. Ọ bụrụ na usoro ahụ anwụọ, Docker agaghị ama maka ya.

Ọ bụrụ na ịnweghị ajụjụ ọzọ, biko gosi anyị Dockerfile gị.

Na Petya gosipụtara:

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: Oh, ka anyị were ya n'usoro. Ka anyị jiri ahịrị nke mbụ malite:

FROM ubuntu:latest

Ị na-ewere mkpado ahụ latest. Iji mkpado latest na-ebute nsonaazụ na-enweghị atụ. Cheedị echiche, onye na-echekwa ihe onyonyo na-ewu ụdị onyonyo ọhụrụ na ndepụta ngwanrọ dị iche, onyonyo a na-enweta mkpado kacha ọhụrụ. Na akpa gị, nke kachasị mma, na-akwụsị ịrụ ọrụ, na nke kachasị njọ, ị na-enweta ahụhụ ndị na-adịghị adị na mbụ.

Ị na-ese onyinyo nwere OS zuru oke nke nwere ọtụtụ ngwanrọ na-adịghị mkpa, nke na-eme ka olu nke akpa ahụ dịkwuo elu. Na ngwa ngwa ndị ọzọ, ka oghere na adịghị ike.

Tụkwasị na nke ahụ, ka onyinyo ahụ buru ibu, ka ọ na-ewekwu ohere na onye ọbịa na na ndekọ (ị na-echekwa ihe oyiyi ebe)?

P: Ee, n'ezie, anyị nwere ndekọ, ị melite ya.

AI: Ya mere, gịnị ka m na-ekwu?... Oh ee, mpịakọta ... Ibu dị na netwọk na-etokwa. Maka otu onyonyo nke a anaghị ahụ anya, mana mgbe enwere ụlọ na-aga n'ihu, ule na ntinye, a na-ahụ ya. Ma ọ bụrụ na ị nweghị ọnọdụ Chineke na AWS, ị ga-enwetakwa ụgwọ igwe.

Ya mere, ị ga-ahọrọ ihe oyiyi kachasị mma, yana ụdị mbipute na nke kacha nta. Dịka ọmụmaatụ, were: FROM ruby:2.5.5-stretch

P: Oh, ahụrụ m. Kedu na ebee ka m nwere ike ịhụ onyonyo ndị dị? Kedu ka m ga-esi mara nke m chọrọ?

AI: A na-ejikarị foto eme ihe dockerhub, emegharịla ya na pornhub :). A na-enwekarị ọtụtụ mgbakọ maka onyonyo:
Alpine: A na-anakọta onyonyo na onyonyo Linux pere mpe, naanị 5 MB. Ọdịmma ya: a na-ejikọta ya na mmejuputa libc nke ya, ngwugwu ọkọlọtọ anaghị arụ ọrụ na ya. Ịchọta na ịwụnye ngwugwu achọrọ ga-ewe oge buru ibu.
Icha: isi ihe oyiyi, ejighị ya wuo ihe oyiyi ndị ọzọ. Ezubere ya naanị maka ịgba ọsọ ọnụọgụ abụọ, data akwadoro. Ọ dị mma maka ịme ngwa ọnụọgụ abụọ gụnyere ihe niile ịchọrọ, dị ka ngwa GO.
Dabere na OS ọ bụla, dị ka Ubuntu ma ọ bụ Debian. Ọfọn, echeghị m na ọ dị mkpa ịkọwa.

AI: Ugbu a, anyị kwesịrị ịwụnye mgbakwunye niile. ngwugwu ma kpochapụ cache gị. I nwekwara ike ịtụfu ya ozugbo apt-nweta nweta nkwalite. Ma ọ bụghị ya, na-ewu nke ọ bụla, n'agbanyeghị mkpado edozi nke ihe oyiyi isi, a ga-enweta ihe oyiyi dị iche iche. Imelite ngwugwu dị na onyonyo a bụ ọrụ nke onye na-elekọta ma na-esonyere ya na ịgbanwe mkpado.

P: Ee, m gbalịrị ime ya, ọ tụgharịrị dị ka nke a:

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: Ọ bụghị ihe ọjọọ, mana enwerekwa ihe a ga-arụ ọrụ na ya. Lee, nke a bụ iwu a:

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

... anaghị ehichapụ data site na foto ikpeazụ, ma ọ bụ naanị na-emepụta oyi akwa ọzọ na-enweghị data a. N'ezie dị ka nke a:

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/* 

Ma ọ bụghị naanị nke ahụ. Kedu ihe ị nwere ebe ahụ, Ruby? Mgbe ahụ, ịkwesighi iṅomi dum oru ngo na mmalite. O zuru ezu iji detuo Gemfile na Gemfile.lock.

Site na usoro a, a gaghị eme nrụnye ngwugwu maka mgbanwe isi mmalite ọ bụla, mana ọ bụrụ na Gemfile ma ọ bụ Gemfile.lock agbanweela.

Otu ụzọ ahụ na-arụ ọrụ maka asụsụ ndị ọzọ na onye njikwa dabere, dị ka npm, pip, onye na-ede egwú na ndị ọzọ dabere na faịlụ nwere ndepụta ndabere.

N'ikpeazụ, cheta na mbido m kwuru maka echiche Docker "otu akpa - otu usoro"? Nke a pụtara na ọ dịghị mkpa onye nlekọta. I kwesịghịkwa ịwụnye systemd, maka otu ihe ahụ. N'ezie, Docker n'onwe ya bụ onye nlekọta. Na mgbe ị na-agbalị ịme ọtụtụ usoro na ya, ọ dị ka ịme ọtụtụ ngwa n'otu usoro nlekọta.
Mgbe ị na-ewu ụlọ, ị ga-eme otu ihe oyiyi, wee malite nọmba achọrọ nke arịa ka otu usoro na-agba ọsọ na nke ọ bụla.

Ma ọzọ na nke ahụ mechara.

P: Echere m na m ghọtara. Lee ihe na-eme:

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"]

Anyị nwere ike ịkwụsị mmalite nke daemons mgbe ị na-amalite akpa ahụ?

AI: Ee, ọ bụ eziokwu. Site n'ụzọ, ịnwere ike iji ma CMD na ENTRYPOINT. Na ịchọpụta ihe dị iche bụ ihe omume ụlọ akwụkwọ gị. Enwere nke ọma na isiokwu a na Habré otu isiokwu.

Yabụ, ka anyị gaa n'ihu. Ị na-ebudata faịlụ iji wụnye ọnụ, mana enweghị nkwa na ọ ga-enwe ihe ị chọrọ. Anyị kwesịrị ịgbakwunye nkwado. Dịka ọmụmaatụ, dịka nke a:

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/* 

Iji checksum ị nwere ike ịchọpụta na ibudatara faịlụ ziri ezi.

P: Ma ọ bụrụ na faịlụ gbanwere, ihe owuwu ahụ ga-ada.

AI: Ee, na n'ụzọ dị ịtụnanya, nke a bụkwa mgbakwunye. Ị ga-amarakwa na faịlụ ahụ agbanweela, ị ga-enwe ike ịhụ ihe gbanwere ebe ahụ. Ị maghị, ha gbakwụnyere, sị, edemede na-ehichapụ ihe niile ọ nwere ike iru, ma ọ bụ mepụta ọnụ ụzọ azụ.

P: Daalụ. Ọ tụgharịrị na Dockerfile ikpeazụ ga-adị ka nke a:

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, daalụ maka enyemaka gị. Oge erugo ka m na-agba ọsọ, ọ dị m mkpa ịme 10 ọzọ taa.

Igor Ivanovich, na-akwụsị onye ọrụ ibe ya ngwa ngwa na anya ya, na-aṅụ kọfị siri ike. Mgbe o chechara maka sekọnd ole na ole gbasara SLA 99.9% na koodu enweghị ahụhụ, ọ jụrụ ajụjụ.

AI: Ebee ka ị na-echekwa ndekọ?

P: N'ezie, na production.log. Site n'ụzọ, ee, mana kedu ka anyị ga-esi nweta ha na-enweghị ssh?

AI: Ọ bụrụ na ị hapụ ha na faịlụ, e mepụtalarị gị ihe ngwọta. Iwu docker exec na-enye gị ohere ịme iwu ọ bụla n'ime akpa. Dịka ọmụmaatụ, ị nwere ike ịme pusi maka osisi. Na iji igodo -ọbụ na bash na-agba ọsọ (ọ bụrụ na etinyere ya na akpa) ga-enye gị ohere mmekọrịta na akpa ahụ.

Mana ị gaghị echekwa ndekọ na faịlụ. Opekempe, nke a na-eduga na uto na-achịkwaghị achịkwa nke akpa, ọ dịghịkwa onye na-atụgharị ndekọ. Ekwesịrị izipu ndekọ niile na stdout. N'ebe ahụ enwere ike ịlele ha site na iji iwu ahụ docker ndekọ.

P: Igor Ivanovich, ma eleghị anya, m nwere ike tinye ndekọ na a ndokwasa ndekọ, na a anụ ahụ ọnụ, dị ka onye ọrụ data?

AI: Ọ dị mma na ịchefughị ​​iwepu data eburu na diski ọnụ. Ị nwekwara ike ime nke a na ndekọ, naanị echefula ịtọ ntụgharị.
Ọ bụ ya, ị nwere ike ịgba ọsọ.

P: Igor Ivanovich, ị nwere ike ịgwa m ihe m ga-agụ?

AI: Mbụ, gụọ ndụmọdụ sitere n'aka ndị mmepe Docker, o siri ike na onye ọ bụla maara Docker karịa ha.

Ma ọ bụrụ na ị chọrọ inweta ọzụzụ, gaa na kpụ ọkụ n'ọnụ. A sị ka e kwuwe, ozizi na-enweghị omume anwụọla.

isi: www.habr.com

Tinye a comment