Docker: tsis yog lus qhia phem

Nyob rau hauv cov lus rau kuv tsab xov xwm Docker: cov lus qhia phem muaj ntau qhov kev thov los piav qhia vim li cas Dockerfile tau piav qhia hauv nws yog qhov txaus ntshai heev.

Cov ntsiab lus ntawm ntu dhau los: Ob tus neeg tsim tawm tsim Dockerfile nyob rau hauv lub sijhawm kaw. Nyob rau hauv tus txheej txheem, Ops Igor Ivanovich los rau lawv. Qhov tshwm sim Dockerfile yog qhov phem heev uas AI yog nyob rau ntawm lub plawv nres.

Docker: tsis yog lus qhia phem

Tam sim no cia peb txheeb xyuas qhov tsis raug ntawm Dockerfile no.

Yog li ntawd, ib lub lim tiam tau dhau mus.

Dev Petya ntsib Ops Igor Ivanovich hauv chav noj mov dhau ib khob kas fes.

P: Igor Ivanovich, koj tsis khoom heev? Kuv xav paub qhov twg peb screwed.

AI: Qhov ntawd yog qhov zoo, koj tsis tshua ntsib cov neeg tsim khoom uas txaus siab rau kev siv dag zog.
Ua ntej, cia peb pom zoo rau ob peb yam:

  1. Docker ideology: ib lub thawv - ib txheej txheem.
  2. Lub thawv me me, qhov zoo dua.
  3. Qhov ntau koj coj los ntawm cache, qhov zoo dua.

P: Vim li cas thiaj yuav tsum muaj ib txheej txheem hauv ib lub thawv?

AI: Docker, thaum pib lub thawv, saib xyuas lub xeev ntawm cov txheej txheem nrog pid 1. Yog tias txheej txheem tuag, Docker sim rov pib lub thawv. Cia peb hais tias koj muaj ntau daim ntawv thov khiav hauv lub thawv, lossis daim ntawv thov tseem ceeb tsis khiav nrog pid 1. Yog tias cov txheej txheem tuag, Docker yuav tsis paub txog nws.

Yog tias koj tsis muaj lus nug ntxiv, thov qhia koj li Dockerfile rau peb.

Thiab Petya qhia:

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: Auj, cia peb coj nws hauv kev txiav txim. Cia peb pib nrog thawj kab:

FROM ubuntu:latest

Koj coj tag latest. Siv tag latest ua rau muaj qhov tshwm sim tsis tau tshwm sim. Xav txog, tus neeg saib xyuas cov duab tsim cov duab tshiab nrog cov npe sib txawv ntawm cov software, cov duab no tau txais daim ntawv tshiab kawg. Thiab koj lub thawv, qhov zoo tshaj plaws, nres lub tsev, thiab qhov phem tshaj, koj ntes cov kab uas tsis muaj ua ntej.

Koj nqa ib daim duab nrog ib tug puv-fledged OS nrog ntau yam tsis tsim nyog software, uas inflates lub ntim ntawm ntim. Thiab qhov ntau software, ntau qhov thiab qhov tsis zoo.

Tsis tas li ntawd, cov duab loj dua, qhov ntau qhov chaw nws yuav siv sij hawm los ntawm tus tswv tsev thiab hauv kev sau npe (koj puas khaws cov duab nyob qhov twg)?

P: Yog lawm, peb muaj ib daim ntawv teev npe, koj teeb tsa.

AI: Yog li, kuv tham txog dab tsi?.. Huag yog, qhov ntim... Lub nra ntawm lub network tseem loj tuaj. Rau ib daim duab no tsis pom, tab sis thaum muaj kev txhim kho txuas ntxiv, kev sim thiab kev xa tawm, nws pom tau. Thiab yog tias koj tsis muaj Vajtswv hom ntawm AWS, koj kuj yuav tau txais daim nqi cosmic.

Yog li ntawd, koj yuav tsum xaiv cov duab uas haum tshaj plaws, nrog rau qhov tseeb version thiab yam tsawg kawg nkaus software. Piv txwv li, coj: FROM ruby:2.5.5-stretch

P: Aw, I see. Kuv tuaj yeem saib cov duab muaj li cas thiab qhov twg? Kuv yuav paub qhov twg kuv xav tau?

AI: Feem ntau cov duab raug coj los ntawm dockerhub, tsis txhob confuse nrog pornhub :). Feem ntau muaj ntau lub rooj sib txoos rau ib daim duab:
alpine: cov duab tau sau rau ntawm cov duab minimalistic Linux, tsuas yog 5 MB. Nws qhov tsis zoo: nws tau muab tso ua ke nrog nws tus kheej libc kev siv, cov txheej txheem pob tsis ua haujlwm hauv nws. Nrhiav thiab txhim kho lub pob yuav tsum siv sijhawm ntau.
Kos: puag duab, tsis siv los tsim lwm cov duab. Nws tsuas yog npaj rau kev khiav binary, npaj cov ntaub ntawv. Zoo tagnrho rau kev khiav binary daim ntawv thov uas suav nrog txhua yam koj xav tau, xws li GO daim ntawv thov.
Raws li ib qho OS, xws li Ubuntu lossis Debian. Zoo, kuv tsis xav tias yuav tsum tau piav qhia.

AI: Tam sim no peb yuav tsum nruab tag nrho cov khoom ntxiv. pob thiab tshem koj cov caches. Thiab koj tuaj yeem pov nws tam sim ntawd apt-tau txawj tej yam ntxiv. Txwv tsis pub, nrog rau txhua qhov tsim, txawm tias lub cim ruaj khov ntawm cov duab hauv paus, cov duab sib txawv yuav tau txais. Kev hloov kho pob khoom hauv daim duab yog lub luag haujlwm ntawm tus neeg saib xyuas thiab nrog los ntawm kev hloov lub cim npe.

P: Yog, Kuv sim ua nws, nws tau ua zoo li no:

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: Tsis yog phem, tab sis kuj tseem muaj qee yam ua haujlwm. Saib, ntawm no yog lo lus txib no:

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

... tsis rho tawm cov ntaub ntawv los ntawm cov duab kawg, tab sis tsuas yog tsim ib txheej ntxiv yam tsis muaj cov ntaub ntawv no. Zoo li no:

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

Tab sis qhov ntawd tsis yog tag nrho. Koj muaj dab tsi nyob ntawd, Ruby? Tom qab ntawd koj tsis tas yuav luam tag nrho qhov project thaum pib. Nws yog txaus los luam Gemfile thiab Gemfile.lock.

Nrog rau txoj hauv kev no, pob teeb tsa yuav tsis raug tua rau txhua qhov kev hloov pauv, tab sis tsuas yog tias Gemfile lossis Gemfile.lock tau hloov pauv.

Tib txoj kev ua haujlwm rau lwm yam lus nrog tus saib xyuas kev vam khom, xws li npm, pip, kws sau ntawv thiab lwm tus raws li cov ntaub ntawv nrog cov npe ntawm kev vam khom.

Thiab thaum kawg, nco ntsoov thaum pib kuv tau tham txog Docker ideology "ib lub thawv - ib txheej txheem"? Qhov no txhais tau hais tias tsis xav tau tus saib xyuas. Koj yuav tsum tsis txhob nruab systemd, rau tib lub laj thawj. Qhov tseem ceeb, Docker nws tus kheej yog tus saib xyuas. Thiab thaum koj sim khiav ntau cov txheej txheem hauv nws, nws zoo li khiav ntau daim ntawv thov hauv ib tus neeg saib xyuas txheej txheem.
Thaum lub tsev tsim, koj yuav ua ib daim duab, thiab tom qab ntawd tso cov khoom ntim uas yuav tsum tau ua kom ib txheej txheem khiav hauv txhua qhov.

Tab sis ntau ntxiv txog qhov ntawd tom qab.

P: Kuv xav tias kuv nkag siab. Saib dab tsi tshwm sim:

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

Peb puas tuaj yeem hla qhov tso tawm ntawm daemon thaum pib lub thawv?

AI: Yog, yog lawm. Los ntawm txoj kev, koj tuaj yeem siv ob qho tib si CMD thiab ENTRYPOINT. Thiab xam seb qhov txawv yog koj qhov homework. Muaj ib qho zoo ntawm cov ncauj lus no ntawm Habre ib tsab xov xwm.

Yog li, cia peb mus ntxiv. Koj rub tawm cov ntaub ntawv rau nruab node, tab sis tsis muaj kev lees paub tias nws yuav muaj yam koj xav tau. Peb yuav tsum tau ntxiv validation. Piv txwv li, zoo li no:

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

Siv cov checksum koj tuaj yeem paub tseeb tias koj rub tawm cov ntaub ntawv raug.

P: Tab sis yog tias cov ntaub ntawv hloov pauv, kev tsim yuav ua tsis tiav.

AI: Yog, thiab oddly txaus, qhov no kuj yog ib qho ntxiv. Koj yuav paub tias cov ntaub ntawv tau hloov pauv, thiab koj yuav tuaj yeem pom qhov hloov pauv ntawm qhov ntawd. Koj yeej tsis paub, lawv ntxiv, hais, ib tsab ntawv uas tshem tawm txhua yam uas nws tuaj yeem ncav cuag, lossis tsim lub nraub qaum.

P: Ua tsaug. Nws hloov tawm tias Dockerfile kawg yuav zoo li no:

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, ua tsaug rau koj kev pab. Nws yog lub sijhawm rau kuv khiav, Kuv yuav tsum tau ua 10 ntxiv kev cog lus hnub no.

Igor Ivanovich, txwv tsis pub nws cov npoj yaig nrawm nrog nws ntsia, noj ib khob kas fes muaj zog. Tom qab xav ob peb vib nas this txog 99.9% SLA thiab kab-dawb code, nws nug ib lo lus nug.

AI: Koj khaws cov cav qhov twg?

P: Tau kawg, hauv production.log. Los ntawm txoj kev, yog, tab sis peb tuaj yeem nkag mus rau lawv yam tsis muaj ssh?

AI: Yog tias koj tso lawv rau hauv cov ntaub ntawv, kev daws teeb meem twb tau tsim rau koj. Docker exec hais kom ua tso cai rau koj ua txhua yam lus txib hauv lub thawv. Piv txwv li, koj tuaj yeem ua miv rau cav. Thiab siv tus yuam sij -nws thiab khiav bash (yog tias ntsia hauv lub thawv) yuav muab kev sib tham sib nkag mus rau lub thawv.

Tab sis koj yuav tsum tsis txhob khaws cov cav hauv cov ntaub ntawv. Qhov tsawg kawg nkaus, qhov no ua rau kev loj hlob ntawm lub thawv tsis muaj zog, thiab tsis muaj leej twg tig lub cav. Tag nrho cov cav yuav tsum raug xa mus rau stdout. Nyob ntawd lawv tuaj yeem saib tau siv cov lus txib docker cav.

P: Igor Ivanovich, tej zaum kuv tuaj yeem muab cov ntawv teev cia rau hauv cov ntawv teev npe, ntawm lub cev, raws li cov neeg siv cov ntaub ntawv?

AI: Nws yog qhov zoo uas koj tsis txhob hnov ​​​​qab tshem tawm cov ntaub ntawv thauj khoom mus rau ntawm lub disk. Koj tuaj yeem ua qhov no nrog cov cav, tsuas yog tsis txhob hnov ​​​​qab teeb tsa kev sib hloov.
Qhov ntawd yog nws, koj tuaj yeem khiav.

P: Igor Ivanovich, koj tuaj yeem qhia kuv seb yuav nyeem dab tsi?

AI: Ua ntej, nyeem Cov lus pom zoo los ntawm Docker developers, tsis tshua muaj leej twg paub Docker zoo dua li lawv.

Thiab yog tias koj xav tau kev xyaum ua haujlwm, mus rau hnyav heev. Tom qab tag nrho, txoj kev xav tsis muaj kev xyaum yog tuag.

Tau qhov twg los: www.hab.com

Ntxiv ib saib