Docker: nasihat goréng

Docker: nasihat goréng

Nalika kuring diajar nyetir mobil, dina palajaran anu pangheulana, instruktur nyetir ka simpang sabalikna, teras nyarios yén anjeun henteu kedah ngalakukeun éta - henteu pernah. Kuring émut aturan ieu langsung sareng salami hirup kuring.

Anjeun baca "Saran Bad" ku Grigory Oster ka barudak, jeung anjeun ningali kumaha gampang tur lumrah eta dawns on aranjeunna yen aranjeunna teu kedah ngalakukeun ieu.

Seueur tulisan anu parantos ditulis ngeunaan cara nyerat Dockerfile anu leres. Tapi kuring henteu mendakan petunjuk ngeunaan cara nyerat Dockerfiles anu salah. Abdi ngeusian celah ieu. Sareng panginten dina proyék anu kuring nampi dukungan, bakal aya langkung seueur dockerfiles sapertos kitu.

Sadaya karakter, kaayaan sareng Dockerfile mangrupikeun fiktif. Upami anjeun ngakuan diri anjeun, punten.

Nyieun Dockerfile, ominous tur dahsyat

Peter (Senior java / Rubby / php developer): batur sapagawean Vasily, naha anjeun parantos unggah modul énggal ka Docker?
Vasily (junior): Henteu, kuring henteu gaduh waktos, kuring henteu tiasa terang sareng Docker ieu. Aya seueur tulisan ngeunaan éta, matak pusing.

Peter: Urang kungsi deadline sataun katukang. Hayu atuh mantuan Anjeun, urang bakal manggihan eta dina prosés. Nyarioskeun naon anu henteu dianggo pikeun anjeun.

Vasily: Abdi teu bisa milih hiji gambar dasar meh minimal, tapi boga sagalana nu peryogi.
Peter: Candak gambar ubuntu, éta gaduh sadayana anu anjeun peryogikeun. Sareng naon anu seueur hal anu teu dipikabutuh bakal aya gunana engké. Sarta ulah poho pikeun nempatkeun tag panganyarna supados versi salawasna panganyarna.

Sareng baris kahiji muncul dina Dockerfile:

FROM ubuntu:latest

Peter: Naon salajengna, naon anu kami dipaké pikeun nulis modul urang?
Vasily: Janten Ruby, aya server wéb sareng sababaraha daemon jasa kedah diluncurkeun.
Peter: Hehehehe, naon urang kudu: ruby, bundler, nodejs, imagemagick na naon sejenna ... Sarta dina waktos anu sareng, ngalakukeun pamutahiran mun pasti meunang bungkusan anyar.
Vasily: Sareng urang moal nyiptakeun pangguna supados urang henteu aya dina akar?
Peter: Bangsat eta, mangka anjeun masih kudu fool sabudeureun kalawan hak.
Vasily: Abdi peryogi waktos, sakitar 15 menit, pikeun ngahijikeun sadayana kana hiji paréntah, kuring maca éta ...
(Peter kasar ngaganggu SMP anu taliti sareng pinter pisan.)
Peter: Tulis dina paréntah misah, eta bakal leuwih gampang maca.

Dockerfile tumuwuh:

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

Lajeng Igor Ivanovich, DevOps (tapi leuwih Ops ti Dev), bursts kana kantor shouting:

AI: Petya, pamekar anjeun ngarobih deui database dahareun, iraha ieu bakal réngsé ...

Saatos skirmish leutik, Igor Ivanovich cools handap tur dimimitian pikeun manggihan naon kolega-Na ngalakukeun dieu.

AI: Naon anu anjeun lakukeun?
Vasily: Peter nulungan kuring nyieun Dockerfile pikeun modul anyar.
AI: Hayu atuh nyandak katingal a ... Naon anu anjeun nulis di dieu, Anjeun ngabersihan gudang kalayan paréntah misah, ieu mangrupa lapisan tambahan ... Tapi kumaha anjeun install dependencies lamun teu disalin Gemfile! Sareng sacara umum, ieu henteu saé.
Peter: Mangga buka ngeunaan bisnis anjeun, urang bakal angka kaluar kumaha bae.

Igor Ivanovich sighs hanjelu sarta ninggalkeun pikeun manggihan saha peupeus database.

Peter: Leres, tapi anjeunna leres ngeunaan kodeu, urang kedah nyorong kana gambar. Sareng hayu urang langsung pasang ssh sareng pengawas, upami henteu urang ngamimitian daemon.

Vasily: Lajeng abdi bakal nyalin heula Gemfile na Gemfile.lock, lajeng abdi bakal install sagalana, lajeng abdi bakal nyalin sakabéh proyék. Lamun Gemfile teu robah, lapisan bakal dicokot tina cache nu.
Peter: Naha anjeun sadayana sareng lapisan ieu, nyalin sadayana sakaligus. Nyalin geura. Baris kahiji.

Dockerfile ayeuna siga kieu:

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: Janten, naon salajengna? Dupi anjeun gaduh configs pikeun ngawas?
Vasily: Henteu, henteu. Tapi kuring bakal ngalakukeun éta gancang.
Peter: Lajeng anjeun bakal ngalakukeun eta. Hayu urang ayeuna sketsa kaluar hiji skrip init anu bakal ngajalankeun sagalana. Oke, jadi Anjeun ngamimitian ssh, kalawan nohup, ku kituna urang bisa nyambung ka wadahna tur tingal naon nu salah. Lajeng ngajalankeun supervisor dina cara nu sami. Nah, mangka anjeun ngan ngajalankeun panumpang.
P: Tapi kuring maca yén kedah aya hiji prosés, janten Docker bakal terang yén aya anu salah sareng tiasa ngabalikan deui wadahna.
P: Tong ngaganggu sirah anjeun ku omong kosong. Sarta sacara umum, kumaha? Kumaha anjeun ngajalankeun sadayana ieu dina hiji prosés? Hayu Igor Ivanovich mikir ngeunaan stabilitas, teu keur nanaon yén anjeunna narima gaji a. Tugas urang nulis kode. Sareng sacara umum, hayu anjeunna ngucapkeun hatur nuhun yén kami nyerat Dockefile pikeun anjeunna.

10 menit sareng dua video ngeunaan ucing engké.

Q: Kuring geus rengse sagalana. Kuring nambahan deui koméntar.
P: Témbongkeun!

Versi panganyarna tina 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: Hebat, kuring resep. Sareng koméntarna aya dina basa Rusia, merenah sareng tiasa dibaca, sadayana bakal damel sapertos kitu. Kuring ngajarkeun anjeun sagalana, anjeun tiasa ngalakukeun sésana sorangan. Hayu urang ngopi...

Nya, ayeuna urang gaduh Dockerfile anu dahsyat pisan, anu katingalina bakal ngajantenkeun Igor Ivanovich hoyong lirén sareng panonna bakal nyeri saminggu deui. Dockerfile, tangtosna, tiasa langkung parah, teu aya watesna pikeun kasampurnaan. Tapi pikeun ngamimitian, ieu bakal dilakukeun.

Abdi hoyong mungkas ku cutatan ti Grigory Oster:

Upami anjeun teu acan yakin
Urang milih jalan dina kahirupan,
Sareng anjeun henteu terang kunaon
Mimitian perjalanan kuli anjeun,
Pegatkeun bohlam lampu di lorong -
Jalma bakal nyebutkeun "Hatur nuhun" ka anjeun.
Anjeun bakal nulungan jalma
Ngirit listrik.

sumber: www.habr.com

Tambahkeun komentar