Докер: муу зөвлөгөө

Докер: муу зөвлөгөө

Намайг машин барьж сурч байх үед багш эхний хичээл дээр урвуугаараа уулзвар руу орж ирээд, дараа нь та үүнийг хийх ёсгүй - хэзээ ч болохгүй гэж хэлсэн. Би энэ дүрмийг шууд санаж, амьдралынхаа туршид санаж байсан.

Та Григорий Остерийн "Муу зөвлөгөө" номыг хүүхдүүдэд уншаад, тэдэнд ийм зүйл хийх ёсгүй гэдэг нь ямар амархан бөгөөд аяндаа ойлгогддогийг та харж байна.

Dockerfile-ийг хэрхэн зөв бичих талаар маш олон нийтлэл бичсэн. Гэхдээ би Докер файлыг хэрхэн буруу бичих заавартай тааралдсангүй. Би энэ орон зайг нөхөж байна. Магадгүй миний дэмжлэг авсан төслүүдэд ийм докер файлууд цөөхөн байх болно.

Бүх дүрүүд, нөхцөл байдал болон Dockerfile нь зохиомол юм. Хэрэв та өөрийгөө таньсан бол уучлаарай.

Dockerfile үүсгэх нь аймшигтай бөгөөд аймшигтай

Питер (Java/rubby/php-н ахлах хөгжүүлэгч): Хамтран ажиллагсад Василий, та Docker-д шинэ модуль байршуулсан уу?
Василий (бага): Үгүй ээ, надад цаг байсангүй, би энэ Докероор үүнийг олж чадахгүй байна. Энэ талаар маш олон нийтлэл байгаа тул толгой эргэм байна.

Петр: Бидэнд жилийн өмнө эцсийн хугацаа байсан. Би танд тусалъя, бид үүнийг процессын явцад олж мэдэх болно. Чамд юу тохирохгүй байгааг надад хэлээч.

Василий: Би энгийн зураг сонгох боломжгүй, гэхдээ танд хэрэгтэй бүх зүйл байгаа.
Петр: Ubuntu дүрсийг ав, түүнд хэрэгтэй бүх зүйл бий. Тэгээд ямар их шаардлагагүй зүйл дараа нь хэрэг болно. Хувилбар нь үргэлж хамгийн сүүлийн үеийн байхын тулд хамгийн сүүлийн үеийн шошгыг оруулахаа бүү мартаарай.

Эхний мөр нь Dockerfile дээр гарч ирнэ:

FROM ubuntu:latest

Петр: Дараа нь юу вэ, бид модулиа бичихдээ юу ашигласан бэ?
Василий: Тэгэхээр Руби, вэб сервер байгаа бөгөөд хэд хэдэн үйлчилгээний демонуудыг ажиллуулах хэрэгтэй.
Петр: Тийм ээ, бидэнд юу хэрэгтэй вэ: ruby, bundler, nodejs, imagemagick болон өөр юу ... Мөн үүний зэрэгцээ шинэ багцуудыг авахын тулд шинэчлэлт хий.
Василий: Тэгээд бид root-д орохгүйн тулд хэрэглэгч үүсгэхгүй юу?
Питер: Новш, тэгвэл чи эрхээр тэнэгтэх хэрэгтэй.
Василий: Энэ бүгдийг нэг тушаалд нэгтгэхийн тулд надад 15 минут орчим хугацаа хэрэгтэй байна, би уншсан ...
(Питер нямбай, маш ухаалаг бага охины яриаг бүдүүлгээр таслав.)
Петр: Тусдаа тушаалаар бич, уншихад хялбар байх болно.

Dockerfile ургадаг:

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

Дараа нь Игорь Иванович, DevOps (гэхдээ Дэвээс илүү ажиллагаатай) оффис руу орилж:

AI: Петя, танай хөгжүүлэгчид хүнсний мэдээллийн санг дахин эвдсэн, энэ хэзээ дуусах бол ...

Бага зэргийн мөргөлдөөний дараа Игорь Иванович даарч, хамт ажиллагсад нь энд юу хийж байгааг олж мэдэв.

AI: Чи юу хийж байгаа юм бэ?
Василий: Петр надад шинэ модульд Dockerfile үүсгэхэд тусалж байна.
AI: Би харцгаая ... Та энд юу бичсэн бэ, та тусдаа командаар хадгалах газрыг цэвэрлэнэ, энэ бол нэмэлт давхарга юм ... Гэхдээ хэрэв та Gemfile-г хуулж аваагүй бол хамаарлыг хэрхэн суулгах вэ! Ерөнхийдөө энэ нь сайн зүйл биш юм.
Петр: Та ажлаа хий, бид ямар нэгэн байдлаар шийдэх болно.

Игорь Иванович гунигтай санаа алдаад мэдээллийн санг хэн эвдсэнийг олохоор явав.

Петр: Тийм ээ, гэхдээ тэр кодын талаар зөв байсан, бид үүнийг дүр төрх рүү оруулах хэрэгтэй. Тэгээд даруй ssh ​​болон supervisor суулгацгаая, эс тэгвээс бид демонуудыг эхлүүлнэ.

Василий: Дараа нь би эхлээд Gemfile болон Gemfile.lock-ыг хуулж, дараа нь бүгдийг суулгаж, дараа нь бүх төслийг хуулах болно. Хэрэв Gemfile өөрчлөгдөхгүй бол давхаргыг кэшээс авах болно.
Петр: Та нар яагаад бүгдээрээ энэ давхрагатай байгаа юм бэ, бүгдийг нэг дор хуулж ав. Шууд хуулах. Хамгийн эхний мөр.

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

Петр: Дараа нь яах вэ? Танд удирдагчийн тохиргоо бий юу?
Василий: Үгүй ээ, үгүй. Гэхдээ би үүнийг хурдан хийх болно.
Петр: Тэгвэл чи үүнийг хийх болно. Одоо бүх зүйлийг эхлүүлэх init скриптийг зурцгаая. За, та nohup-тэй ssh-г эхлүүлснээр бид контейнерт холбогдож, юу болсныг харах боломжтой болно. Дараа нь удирдагчийг ижил аргаар ажиллуул. За, тэгвэл та зүгээр л зорчигч гүйлгэнэ.
Асуулт: Гэхдээ би нэг процесс байх ёстой гэж уншсан тул Докер ямар нэг зүйл буруу болсныг мэдээд савыг дахин эхлүүлэх боломжтой.
П: Битгий дэмий зүйлд толгойгоо зовоож бай. Тэгээд ерөнхийдөө яаж? Та энэ бүгдийг нэг процессоор яаж ажиллуулах вэ? Игорь Иванович тогтвортой байдлын талаар бодъё, тэр цалин авдаг нь дэмий хоосон биш юм. Бидний ажил бол код бичих. Ерөнхийдөө бид түүнд зориулж Dockfile бичсэнд баярлалаа гэж хэлээрэй.

Дараа нь 10 минут, муурны тухай хоёр видео.

А: Би бүгдийг хийсэн. Би илүү олон сэтгэгдэл нэмсэн.
П: Надад үзүүл!

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: Гайхалтай, надад таалагдаж байна. Сэтгэгдэл нь орос хэл дээр, тохиромжтой, уншихад хялбар, хүн бүр ингэж ажиллах болно. Би чамд бүх зүйлийг зааж өгсөн, үлдсэнийг нь чи өөрөө хийж чадна. Хоёулаа кофе ууцгаая...

За, одоо бидэнд үнэхээр аймшигтай Dockerfile байгаа бөгөөд үүнийг харсан нь Игорь Ивановичийг ажлаасаа гарахыг хүсч, нүд нь долоо хоногоор өвдөх болно. Мэдээжийн хэрэг Dockerfile үүнээс ч дор байж магадгүй, төгс төгөлдөрт хязгаар байхгүй. Гэхдээ эхлээд үүнийг хийх болно.

Би Григорий Остерийн хэлсэн үгээр дуусгамаар байна.

Хэрэв та хараахан итгэлгүй байгаа бол
Бид амьдралын замыг сонгосон,
Тэгээд яагаад гэдгийг та мэдэхгүй
Хөдөлмөрийн аялалаа эхлүүл,
Коридор дахь гэрлийн чийдэнг хугалах -
Хүмүүс танд "баярлалаа" гэж хэлэх болно.
Та ард түмэнд туслах болно
Цахилгаан хэмнэнэ.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх