Docker: ʻōlelo aʻo maikaʻi ʻole

Docker: ʻōlelo aʻo maikaʻi ʻole

I koʻu aʻo ʻana i ka hoʻokele kaʻa, i ka haʻawina mua loa, ua hoʻohuli ke kumu aʻo i ke alahele ma hope, a laila ʻōlelo ʻoe ʻaʻole pono ʻoe e hana pēlā - ʻaʻole loa. Hoʻomanaʻo koke wau i kēia lula a no ke koena o koʻu ola.

Heluhelu ʻoe i ka "Bad Advice" na Grigory Oster i nā keiki, a ʻike ʻoe i ka maʻalahi a me ke ʻano maʻamau e ʻike ʻole ai lākou e hana i kēia.

Ua kākau ʻia ka nui o nā ʻatikala e pili ana i ke kākau pololei ʻana i kahi Dockerfile. Akā ʻaʻole au i ʻike i nā ʻōlelo aʻoaʻo e pili ana i ke kākau ʻana i nā Dockerfiles hewa. Ke hoʻopiha nei au i kēia hakahaka. A i loko paha o nā papahana i loaʻa iaʻu ke kākoʻo, e liʻiliʻi ka liʻiliʻi o nā dockerfiles.

ʻO nā kiʻi āpau, nā kūlana a me Dockerfile he mea hoʻopunipuni. Inā ʻike ʻoe iā ʻoe iho, e kala mai.

Ke hana nei i kahi Dockerfile, ʻino a weliweli

Peter (Senior java/rubby/php developer): E ke hoa Vasily, ua hoʻouka mua anei ʻoe i kahi module hou iā Docker?
Vasily (junior): ʻAʻole, ʻaʻohe oʻu manawa, ʻaʻole hiki iaʻu ke ʻike me kēia Docker. Nui nā ʻatikala e pili ana i ia mea, ʻaʻole hoʻi.

Peter: Ua loaʻa iā mākou kahi manawa palena i hoʻokahi makahiki i hala. E ʻae mai iaʻu e kōkua iā ʻoe, e noʻonoʻo mākou ma ke kaʻina hana. E haʻi mai iaʻu i ka mea kūpono ʻole iā ʻoe.

Vasily: ʻAʻole hiki iaʻu ke koho i kahi kiʻi kumu i mea liʻiliʻi, akā loaʻa nā mea āpau āu e pono ai.
Peter: E lawe i ke kiʻi ubuntu, aia nā mea āpau āu e pono ai. A he aha ka nui o nā mea pono ʻole e hiki mai ma hope. A mai poina e kau i ka hōʻailona hou loa i mea mau loa ka mana.

A ʻike ʻia ka laina mua ma ka Dockerfile:

FROM ubuntu:latest

Peter: He aha ka mea aʻe, he aha kā mākou i hoʻohana ai e kākau i kā mākou module?
Vasily: No laila ruby, aia kahi kikowaena pūnaewele a pono e hoʻokuʻu ʻia kekahi mau daemons lawelawe.
Peter: ʻAe, he aha kā mākou mea e pono ai: ruby, bundler, nodejs, imagemagick a me nā mea ʻē aʻe ... A i ka manawa like, e hana i kahi hoʻomaikaʻi e loaʻa i nā pūʻolo hou.
Vasily: ʻAʻole mākou e hana i kahi mea hoʻohana i ʻole mākou ma lalo o ke aʻa?
Peter: E hoʻokuʻu, a laila pono ʻoe e naʻaupō me nā pono.
Vasily: Pono wau i ka manawa, ma kahi o 15 mau minuke, e hoʻohui i nā mea āpau i hoʻokahi kauoha, heluhelu wau i kēlā ...
(Hoʻopau ʻino ʻo Peter i ka ʻōpio akamai a akamai loa.)
Peter: E kākau i nā kauoha ʻokoʻa, e maʻalahi ka heluhelu ʻana.

Ke ulu nei ʻo 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/*

A laila, ʻo Igor Ivanovich, ʻo DevOps (akā ʻoi aku ka nui o nā Ops ma mua o Dev), komo i loko o ke keʻena me ka hoʻōho ʻana:

AI: Petya, ua uhaki hou kāu mau mea hoʻomohala i ka waihona meaʻai, ahea lā e pau ai kēia...

Ma hope o kahi hakakā liʻiliʻi, hoʻomaha ʻo Igor Ivanovich a hoʻomaka e ʻike i ka hana a kāna mau hoa hana ma aneʻi.

AI: He aha kāu e hana nei?
Vasily: Ke kōkua nei ʻo Peter iaʻu e hana i kahi Dockerfile no kahi module hou.
AI: Eʻae mai iaʻu e nānā ... He aha kāu i kākau ai maʻaneʻi, hoʻomaʻemaʻeʻoe i ka waihona me kahi kauoha kaʻawale, he papa hou kēia ... Akā peheaʻoe e hoʻokomo ai i nā hilinaʻi ināʻaʻoleʻoe i kope i ka Gemfile! A ma ka laulā, ʻaʻole maikaʻi kēia.
Peter: E ʻoluʻolu e hele i kāu ʻoihana, e noʻonoʻo mākou i kekahi mea.

Ke kanikau nei ʻo Igor Ivanovich a haʻalele e ʻike i ka mea nāna i wāwahi i ka waihona.

Peter: ʻAe, akā ua pololei ʻo ia e pili ana i ke code, pono mākou e hoʻokomo iā ia i ke kiʻi. A e hoʻokomo koke i ka ssh a me ka supervisor, i ʻole e hoʻomaka mākou i nā daemons.

Vasily: A laila e kope mua wau i ka Gemfile a me Gemfile.lock, a laila e hoʻokomo wau i nā mea a pau, a laila e kope wau i ka papahana holoʻokoʻa. Inā ʻaʻole e loli ka Gemfile, e lawe ʻia ka papa mai ka cache.
Peter: No ke aha ʻoe i kēia mau papa, kope i nā mea āpau i ka manawa hoʻokahi. E kope koke. ʻO ka laina mua loa.

Ua like ka Dockerfile i kēia manawa:

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: No laila, pehea ka hope? Loaʻa iā ʻoe nā configs no ka luna?
Vasily: ʻAʻole, ʻaʻole. Akā, e hana koke wau.
Peter: A laila e hana ʻoe. E kahakiʻi kākou i kahi script init e hoʻomaka i nā mea a pau. ʻAe, no laila hoʻomaka ʻoe i ka ssh, me ka nohup, i hiki iā mākou ke hoʻopili i ka ipu a ʻike i ka mea i hewa. A laila e holo i ka luna ma ke ʻano like. ʻAe, a laila, holo wale ʻoe i ka mea hele.
Nīnau: Akā ua heluhelu au he pono hoʻokahi kaʻina hana, no laila e ʻike ʻo Docker ua hewa kekahi mea a hiki ke hoʻomaka hou i ka ipu.
P: Mai hoopilikia i kou poo me ka lapuwale. A ma ka laulā, pehea? Pehea ʻoe e holo ai i kēia mau mea a pau i ka hana hoʻokahi? E noʻonoʻo ʻo Igor Ivanovich e pili ana i ke kūpaʻa, ʻaʻole ia no ka loaʻa ʻana o ka uku. ʻO kā mākou hana ke kākau code. A ma ka laulā, e ʻōlelo ʻo ia i ka mahalo iā mākou i kākau i ka Dockefile nona.

10 minuke a me ʻelua wikiō e pili ana i nā pōpoki ma hope.

N: Ua hana au i na mea a pau. Ua hoʻohui hou au i nā manaʻo.
P: Hōʻike mai iaʻu!

ʻO ka mana hou o 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: Nui, makemake au. A aia nā ʻōlelo i ka Lūkini, maʻalahi a hiki ke heluhelu ʻia, e hana like nā mea a pau. Ua aʻo au iā ʻoe i nā mea a pau, hiki iā ʻoe ke hana i ke koena iā ʻoe iho. E hele kāua e inu kofe...

ʻAe, i kēia manawa ua loaʻa iā mākou kahi Dockerfile weliweli loa, ʻo ia ka mea e makemake ai ʻo Igor Ivanovich e haʻalele a e ʻeha kona mau maka no kekahi pule. ʻO ka Dockerfile, ʻoiaʻiʻo, ʻoi aku ka hewa, ʻaʻohe palena i ka hemolele. Akā no ka hoʻomaka, e hana kēia.

Makemake wau e hoʻopau me kahi ʻōlelo mai Grigory Oster:

Inā ʻaʻole ʻoe maopopo
Ua koho mākou i ke ala o ke ola,
A ʻaʻole ʻoe maopopo i ke kumu
E hoʻomaka i kāu huakaʻi hana,
E wāwahi i nā ʻōpuʻu kukui ma nā alaloa -
E ʻōlelo ka poʻe "Mahalo" iā ʻoe.
E kōkua ʻoe i nā kānaka
Mālama i ka uila.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka