Docker: saran ala

Docker: saran ala

Nalika aku sinau nyopir mobil, ing wulangan pisanan, instruktur nyopir menyang persimpangan kanthi mbalikke, banjur ujar manawa sampeyan ora kudu nindakake - ora tau. Aku langsung ngelingi aturan iki lan ing salawas-lawase uripku.

Sampeyan maca "Saran Bad" dening Grigory Oster kanggo anak, lan sampeyan ndeleng carane gampang lan alamiah iku dawns ing wong-wong mau ora kudu nindakake iki.

Akeh artikel sing wis ditulis babagan carane nulis Dockerfile kanthi bener. Nanging aku ora nemoni instruksi babagan carane nulis Dockerfiles sing salah. Aku ngisi longkangan iki. Lan bisa uga ing proyek sing ditampa dhukungan, bakal luwih sithik file docker.

Kabeh karakter, kahanan lan Dockerfile iku fiktif. Yen sampeyan ngenali dhewe, nuwun sewu.

Nggawe Dockerfile, ominous lan elek

Peter (Senior java/rubby/php developer): Colleague Vasily, apa sampeyan wis upload modul anyar kanggo Docker?
Vasily (junior): Ora, aku ora duwe wektu, Aku ora bisa tokoh metu karo Docker iki. Ana akeh artikel babagan iki, dadi mumet.

Peter: Kita duwe deadline setahun kepungkur. Ayo kula nulungi sampeyan, kita bakal ngerti ing proses kasebut. Ngomong apa sing ora bisa kanggo sampeyan.

Vasily: Aku ora bisa milih gambar dhasar supaya minimal, nanging duwe kabeh sing perlu.
Peter: Njupuk gambar ubuntu, wis kabeh sing perlu. Lan apa sing akeh sing ora perlu bakal migunani mengko. Lan aja lali masang tag paling anyar supaya versi kasebut tansah paling anyar.

Lan baris pisanan katon ing Dockerfile:

FROM ubuntu:latest

Peter: Apa sabanjure, apa sing kita gunakake kanggo nulis modul kita?
Vasily: Dadi ruby, ana server web lan sawetara daemon layanan kudu diluncurake.
Peter: Ya, apa sing kita butuhake: ruby, bundler, nodejs, imagemagick lan liya-liyane.
Vasily: Lan kita ora bakal nggawe pangguna supaya ora ana ing oyod?
Peter: Jancok, banjur sampeyan isih kudu bodho karo hak.
Vasily: Aku butuh wektu, kira-kira 15 menit, kanggo nggabungake kabeh dadi siji perintah, aku maca ...
(Peter ora sopan nyetop junior sing tliti lan pinter banget.)
Peter: Tulis ing printah kapisah, iku bakal luwih gampang kanggo maca.

Dockerfile tuwuh:

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

Banjur Igor Ivanovich, DevOps (nanging luwih akeh Ops tinimbang Dev), nyembur menyang kantor bengok-bengok:

AI: Petya, pangembang sampeyan ngrusak database panganan maneh, kapan iki rampung ...

Sawise skirmish cilik, Igor Ivanovich cools mudhun lan wiwit kanggo mangerteni apa kolega nindakake kene.

AI: Kowe lagi ngapa?
Vasily: Peter mbantu aku nggawe Dockerfile kanggo modul anyar.
AI: Ayo kula ndeleng ... Apa sing sampeyan tulis ing kene, sampeyan ngresiki repositori kanthi perintah sing kapisah, iki minangka lapisan tambahan ... Nanging kepiye carane nginstal dependensi yen sampeyan durung nyalin Gemfile! Lan ing umum, iki ora apik.
Pétrus: Mangga tindakake bisnis sampeyan, kita bakal ngerti piye wae.

Igor Ivanovich sighs sedhih lan ninggalake kanggo tokoh metu sing nyuwil database.

Peter: Ya, nanging dheweke pancen bener babagan kode kasebut, kita kudu nyurung menyang gambar kasebut. Lan ayo langsung nginstal ssh lan supervisor, yen ora, kita bakal miwiti daemon.

Vasily: Banjur aku bakal nyalin Gemfile lan Gemfile.lock dhisik, banjur aku bakal nginstal kabeh, banjur aku bakal nyalin kabeh proyek. Yen Gemfile ora ngganti, lapisan bakal dijupuk saka cache.
Peter: Apa sampeyan kabeh karo lapisan iki, nyalin kabeh bebarengan. Langsung copy. Baris pisanan.

Dockerfile saiki katon kaya iki:

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: Terus, terus apa? Apa sampeyan duwe konfigurasi kanggo supervisor?
Vasily: Ora, ora. Nanging aku bakal nindakake kanthi cepet.
Pétrus: Banjur kowé bakal nglakoni. Ayo saiki nggawe sketsa skrip init sing bakal mbukak kabeh. Oke, supaya sampeyan miwiti ssh, karo nohup, supaya kita bisa nyambung menyang wadhah lan ndeleng apa salah. Banjur mbukak supervisor kanthi cara sing padha. Nah, banjur sampeyan mung mbukak penumpang.
P: Nanging aku maca kudu ana siji proses, supaya Docker bakal ngerti yen ana sing salah lan bisa miwiti maneh wadhah kasebut.
P: Aja ngganggu sirahmu karo omong kosong. Lan ing umum, carane? Kepiye carane sampeyan mbukak kabeh iki ing siji proses? Ayo Igor Ivanovich mikir babagan stabilitas, ora kanggo apa-apa yen dheweke entuk gaji. Tugas kita yaiku nulis kode. Lan umume, ayo matur nuwun amarga kita nulis Dockefile kanggo dheweke.

10 menit lan rong video babagan kucing mengko.

P: Aku wis rampung kabeh. Aku nambah komentar liyane.
P : Tuduhna!

Versi paling anyar saka 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: Apik, aku seneng. Lan komentar kasebut ana ing basa Rusia, trep lan bisa diwaca, kabeh wong bakal kaya ngono. Aku mulang sampeyan kabeh, sampeyan bisa nindakake liyane dhewe. Ayo nyruput kopi...

Saiki, kita duwe Dockerfile sing nggegirisi, sing bakal nggawe Igor Ivanovich pengin mandheg lan mripate bakal lara sajrone seminggu maneh. Dockerfile, mesthi, bisa uga luwih elek, ora ana watesan kanggo kesempurnaan. Nanging kanggo wiwitan, iki bakal ditindakake.

Aku pengin mungkasi karo kutipan saka Grigory Oster:

Yen sampeyan durung yakin
Kita milih dalan ing urip,
Lan sampeyan ora ngerti apa sebabe
Miwiti perjalanan kerja sampeyan,
Pecah lampu ing lorong -
Wong bakal ngomong "Matur nuwun" kanggo sampeyan.
Sampeyan bakal mbantu wong
Ngirit listrik.

Source: www.habr.com

Add a comment