Docker: cov lus qhia phem

Docker: cov lus qhia phem

Thaum kuv tab tom kawm tsav tsheb, ntawm thawj zaj lus qhia tus kws qhia tsav tsheb mus rau hauv kev sib tshuam rov qab, thiab tom qab ntawd hais tias koj yuav tsum tsis txhob ua li ntawd - tsis txhob ua txhua yam. Kuv nco qab txoj cai no tam sim ntawd thiab mus tas kuv lub neej.

Koj nyeem "Cov Lus Qhia Tsis Zoo" los ntawm Grigory Oster rau cov menyuam yaus, thiab koj pom tias nws yooj yim npaum li cas nws kaj ntug rau lawv tias lawv yuav tsum tsis txhob ua qhov no.

Ntau cov ntawv tau sau txog yuav ua li cas sau Dockerfile kom raug. Tab sis kuv tsis tau hla cov lus qhia yuav ua li cas sau Dockerfiles tsis raug. Kuv tabtom sau qhov khoob no. Thiab tej zaum hauv cov haujlwm uas kuv tau txais kev txhawb nqa, yuav muaj tsawg dua li dockerfiles.

Tag nrho cov cim, xwm txheej thiab Dockerfile yog qhov tseeb. Yog koj paub koj tus kheej, thov txim.

Tsim ib Dockerfile, ominous thiab txaus ntshai

Peter (Senior java/rubby/php developer): Cov npoj yaig Vasily, koj puas tau muab cov qauv tshiab rau Docker?
Vasily (junior): Tsis yog, Kuv tsis muaj sijhawm, Kuv tsis tuaj yeem xam nws nrog Docker no. Muaj ntau ntau yam ntawm nws, nws kiv taub hau.

Peter: Peb muaj sijhawm kawg ib xyoos dhau los. Cia kuv pab koj, peb mam li xam nws tawm hauv tus txheej txheem. Qhia rau kuv tias qhov twg tsis ua haujlwm rau koj.

Vasily: Kuv tsis tuaj yeem xaiv cov duab yooj yim kom nws tsawg, tab sis muaj txhua yam koj xav tau.
Peter: Coj tus duab ubuntu, nws muaj txhua yam koj xav tau. Thiab dab tsi yog ntau yam tsis tsim nyog yuav los ua ke tom qab. Thiab tsis txhob hnov ​​​​qab muab qhov tseeb tag kom lub version yog qhov tseeb.

Thiab thawj kab tshwm nyob rau hauv Dockerfile:

FROM ubuntu:latest

Peter: Dab tsi ntxiv, peb siv dab tsi los sau peb cov qauv?
Vasily: Yog li ruby, muaj lub vev xaib server thiab ob peb qhov kev pabcuam daemons yuav tsum tau pib.
Peter: Yog lawm, peb xav tau dab tsi: ruby, bundler, nodejs, imagemagick thiab lwm yam ... Thiab tib lub sijhawm, ua kev hloov kho kom tau txais cov pob tshiab.
Vasily: Thiab peb yuav tsis tsim ib tus neeg siv kom peb tsis nyob hauv paus?
Peter: Fuck nws, ces koj tseem yuav tau dag ib puag ncig nrog txoj cai.
Vasily: Kuv xav tau sijhawm, kwv yees li 15 feeb, kom muab tag nrho ua ke rau hauv ib qho lus txib, kuv nyeem tias ...
(Peter rudely cuam tshuam tus neeg siab zoo thiab ntse heev junior.)
Peter: Sau cov lus txib sib cais, nws yuav yooj yim nyeem.

Dockerfile loj hlob:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full
RUN gem install bundler
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/*

Ces Igor Ivanovich, DevOps (tab sis ntau Ops tshaj Dev), tawg mus rau hauv lub chaw ua hauj lwm qw:

AI: Petya, koj cov neeg tsim khoom rhuav tshem cov ntaub ntawv khoom noj dua, thaum twg qhov no yuav xaus ...

Tom qab kev sib cav me me, Igor Ivanovich txias thiab pib nrhiav seb nws cov npoj yaig ua dab tsi ntawm no.

AI: Koj ua dab tsi?
Vasily: Peter tab tom pab kuv tsim Dockerfile rau cov qauv tshiab.
AI: Cia kuv saib ... Koj tau sau dab tsi ntawm no, koj ntxuav lub chaw cia khoom nrog cov lus txib cais, qhov no yog txheej ntxiv ... Tab sis koj yuav ua li cas txhim kho kev vam meej yog tias koj tsis tau theej Gemfile! Thiab feem ntau, qhov no tsis zoo.
Peter: Thov mus hais txog koj lub lag luam, peb yuav txiav txim siab nws li cas.

Igor Ivanovich sighs tu siab thiab tawm mus xyuas seb leej twg tsoo lub database.

Peter: Yog lawm, tab sis nws hais yog txoj cai, peb yuav tsum thawb nws mus rau hauv daim duab. Thiab cia tam sim nruab ssh thiab tus saib xyuas, txwv tsis pub peb yuav pib lub daemons.

Vasily: Tom qab ntawd kuv yuav xub luam lub Gemfile thiab Gemfile.lock, ces kuv yuav nruab txhua yam, thiab tom qab ntawd kuv yuav luam tag nrho qhov project. Yog tias Gemfile tsis hloov, txheej yuav raug coj los ntawm cache.
Peter: Vim li cas koj txhua tus nrog cov khaubncaws sab nraud povtseg, luam txhua yam ib zaug. Luam tam sim ntawd. Thawj kab heev.

Dockerfile tam sim no zoo li no:

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
RUN gem install bundler
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/* 

Peter: Yog li, dab tsi ntxiv? Koj puas muaj configs rau tus saib xyuas?
Vasily: Tsis yog. Tab sis kuv yuav ua sai sai.
Peter: Ces koj yuav ua nws. Wb tam sim no kos tawm ib tsab ntawv init uas yuav tso txhua yam. Okay, yog li koj pib ssh, nrog nohup, yog li ntawd peb tuaj yeem txuas rau lub thawv thiab pom dab tsi tsis ncaj ncees lawm. Ces khiav tus saib xyuas tib yam. Zoo, ces koj cia li khiav neeg nrog caij.
Q: Tab sis kuv tau nyeem tias yuav tsum muaj ib qho txheej txheem, yog li Docker yuav paub tias muaj qee yam yuam kev thiab tuaj yeem rov pib lub thawv.
P: Tsis txhob thab koj lub taub hau nrog tsis muaj dab tsi. Thiab feem ntau, ua li cas? Yuav ua li cas koj khiav tag nrho cov no nyob rau hauv ib tug txheej txheem? Cia Igor Ivanovich xav txog kev ruaj ntseg, nws tsis yog rau tsis muaj dab tsi uas nws tau txais nyiaj hli. Peb txoj haujlwm yog sau cov lej. Thiab feem ntau, cia nws hais ua tsaug uas peb tau sau Dockefile rau nws.

10 feeb thiab ob daim yeeb yaj kiab hais txog miv tom qab.

Q: Kuv tau ua txhua yam. Kuv ntxiv lus ntxiv.
P: Qhia kuv!

Qhov tseeb version ntawm Dockerfile:

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

# ЗапускаСм скрипт, ΠΏΡ€ΠΈ стартС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запустит всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅.
CMD [β€œ/app/init.sh”]

P: Zoo heev, Kuv nyiam nws. Thiab cov lus yog nyob rau hauv Lavxias teb sab, yooj yim thiab nyeem tau, txhua leej txhua tus yuav ua hauj lwm zoo li ntawd. Kuv tau qhia koj txhua yam, koj tuaj yeem ua tus so ntawm koj tus kheej. Wb mus haus kasfes...

Zoo, tam sim no peb muaj qhov txaus ntshai Dockerfile, qhov pom uas yuav ua rau Igor Ivanovich xav tawm thiab nws ob lub qhov muag yuav mob rau lwm lub lim tiam. Dockerfile, tau kawg, tuaj yeem ua phem dua, tsis muaj kev txwv rau kev ua tiav. Tab sis rau qhov pib, qhov no yuav ua.

Kuv xav xaus nrog ib nqe lus los ntawm Grigory Oster:

Yog koj tsis paub meej
Peb xaiv txoj kev hauv lub neej,
Thiab koj tsis paub yog vim li cas
Pib koj txoj kev ua haujlwm,
Tshem cov qhov muag teev nyob rau hauv txoj kev -
Cov neeg yuav hais tias "Ua tsaug" rau koj.
Koj yuav pab tau cov neeg
Txuag hluav taws xob.

Tau qhov twg los: www.hab.com

Ntxiv ib saib