ru:https://highload.today/blogs/kak-docker-uproshhaet-rabotu-programmista-komandy-kotorymi-ya-polzuyus/ ua:https://highload.today/uk/blogs/yak-docker-polegshuye-robotu-programista-komandi-yakimi-ya-koristuyusya/
logo
Інструменти      30/09/2022

Як Docker полегшує роботу програміста: команди, якими я користуюся

Олег Коваль BLOG

Python Data Engineer у NIX

У своїй минулій статті на Highload я почав розповідати про особливості Docker та торкнувся елементів Dockerfile та Docker Image. У цій статті ми продовжимо розбирати цей інструмент та поговоримо про Docker Hub, Docker Container та Docker Compose.

Docker Hub

Це сервіс, де зібрані різні Docker Image. Компанія Docker позиціонує його як такий собі аналог GitHub. Але якщо там ми можемо завантажувати свій або витягувати чужий код, то тут — робити те саме з власним чи вже підготовленим іншими фахівцями Docker Image.


У Docker Hub є повноцінний репозиторій зображень. При цьому сервіс позначає офіційні Image, створені відомими компаніями (тим самим Python чи Postgres). Наразі майже всі такі компанії мають свої Images. Є тут і кастомні Image, які створили інші користувачі. Ви також можете вільно використовувати їх.

Для комерційних проєктів все ж таки рекомендується брати лише офіційні версії. Зазвичай у таких продуктах все протестовано, регулярно з’являються оновлення, немає жодних вірусів чи інших проблем.

У кастомних Image ніхто не застрахований від багів. До того ж ви будете залежні у своїй роботі від інших людей.

Також у Docker Hub доступна інтеграція з GitHub. Завантажений із цього сервісу код буде одразу потрапляти в Dockerfile для білдингу Docker Image, а результат — надсилатися до Docker Hub. Інструмент дуже зручний для автоматизації подібних процесів.

Базові команди Docker Hub

У цього сервісу також є декілька ключових команд:

  • docker login / logout — для входу на Docker Hub та виходу з акаунту.

  • docker (image) push [OPTIONS] NAME[:TAG]. Ця команда потрібна для завантаження свого Docker Image на Docker Hub. Припустимо, ви шукаєте надійне місце зберігання для свого Image або ж хочете поділитися ним із колегою. Для цього пропишіть команду з назвою вашого Docker Image та з тегом. Після запуску ви отримаєте кінцеве посилання. Ним і можна поділитися з іншими:
  • Онлайн-курс "Фінансовий директор" від Laba.
    Опануйте інструменти управління грошовими потоками, ризиками та активами компанії, щоби перейти на посаду CFO.
    Приєднатися до курсу

  • docker (image) pull [OPTIONS] NAME[:TAG|@DIGEST]. Допоможе завантажувати і пулити готовий Docker Image із Docker Hub. Принцип аналогічний минулому пункту: прописуєте команду та додаєте назву потрібного Image. У прикладі я пулив той самий Image, який раніше запушив:


Результатом є репозиторій зі сторінкою конкретного Docker Image. Нижче можете побачити всю супровідну інформацію по продукту, тег і команду, за допомогою якої можна пулити цей Docker Image:

Docker Container

Docker Container — це ніби корабель, який вже на плаву, з інструкцією та прописаними залежностями. Для повного розуміння цього інструменту хочу проговорити кілька важливих моментів:

  • Docker Container не є віртуальною машиною. Ми не виділяємо для контейнера оперативну пам’ять та не емулюємо апаратне забезпечення. Docker Container — це лише процес, що виконує команди з Docker Image.
  • Docker Container ізольований від інших. Навіть десятки контейнерів не взаємодіятимуть одне з одним. Це дуже зручно при роботі з кількома веб-застосунками, у яких можуть виникнути проблеми, скажімо, через спільні порти.
  • Docker Container — це Share OS. Вам не потрібно встановлювати кожного разу окрему ОС — достатньо запустити потрібний Image. Він стартує і виконує задані команди, не вимагаючи від вас додаткових зусиль.


Окрім того, технологія контейнеризації дозволяє запускати компактні аналоги віртуальних машин. Наприклад, контейнер з образом Ubuntu займає усього 70 МБ, хоча сама ОС тягне на декілька гігабайтів. Це заощаджує простір та прискорює роботу.

При цьому встановлення віртуальної машини — це тривалий, складний процес, а старт Docker Container проходить максимально швидко.

Онлайн-курс Бізнес-аналіз. Basic Level від Ithillel.
В ході курсу студенти навчаться техніці збору і аналізу вимог, документуванню та управлінню документацією, управлінню ризиками та змінами, а також навчаться моделювати процеси і прототипуванню.
Приєднатися


Основні команди Docker Container

  • docker container --help. Подібно до Image ця команда демонструє пул основних команд та їх короткий опис:

  • docker container ls показує контейнери, які працюють у цей момент. Завдяки додаванню аргументів функціонал може бути розширеним. Наприклад, вказавши тег -a, система відобразить усі наявні на комп’ютері Docker-контейнери.

  • docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]. Команда, яка запускає контейнер. Разом із нею обов’язково треба вказувати назву Docker Image, за яким будете ранити контейнер. Можна додавати й теги. Наприклад, -d запустить Docker Container у фоновому режимі, а --name — задасть назву контейнеру. У прикладі я запустив контейнер під ім’ям test, а потім командою docker container ls перевірив його старт:

  • docker container stop [OPTIONS] CONTAINER [CONTAINER...]. Ця команда зупиняє запущений контейнер. У прикладі я також зробив перевірку, щоб переконатися: потрібний Docker Container дійсно відсутній у списку. Якщо додати при перевірці тег -a, то зупинений з’явиться зверху.

  • docker container start запускає створені, але не запущені контейнери. Це може знадобитися, аби підняти Docker Container, який зупинився. Для коректної роботи команди до неї треба додати назву або ID потрібного контейнера.
  • Онлайн-курс "Комерційний Аудіопродакшн" від Skvot.
    Навчіться створювати, зводити й мастерити музику для комерційних проєктів — кіно, серіалів, улюблених ігр чи вірусних рекламних роликів.
    Детальніше про курс та довід лектора

  • docker container inspect [OPTIONS] CONTAINER [CONTAINER...]. Ця команда схожа на docker image inspect і показує пул властивостей контейнера. Це може бути CMD, Volumes, Images, порти, аргументи, шляхи, версії Python тощо.

  • docker container logs [OPTIONS] CONTAINER. Дуже корисна команда, за допомогою якої можна відстежувати логи контейнера. Наприклад, я використовував Docker Container для тестів аплікухи на PySpark, і мені дійсно були потрібні логи. З ними я міг переконатися, чи всі тести пройшли добре:


Virtualenv

Це віртуальне оточення, яке створюється за допомогою Python або іншого додатку. Припустимо нам потрібно створити venv у Docker container. Уявімо такі собі сходинки, як на ілюстрації. На найвищому рівні розташована віртуальна машина — велика, складна, обтяжлива. Далі йде Docker Container — більш легкий і компактний при запуску та управлінні. На нижчому рівні розташований Virtualenv — ще простіше рішення, яке може знадобитися у певних ситуаціях.

Наприклад, вам потрібні декілька застосунків з одним Python, але з різними бібліотеками. В такому випадку ви можете створити три розділених віртуальних оточення зі своїми наборами бібліотек. Так вдасться не засмічувати один Python з усіма можливими бібліотеками:


Для запуску Virtualenv необхідно встановити Python, створити потрібну кількість віртуальних оточень та інсталювати до них відповідні до ваших потреб бібліотеки. Існує багато способів створення Virtualenv у контейнерах. Я розгляну три основних методи: за допомогою Python Virtual Environment, Poetry та Conda.

Python Virtual Environment

Беремо офіційний Python і створюємо ENV. Це змінна, якій можна присвоїти віртуальний енвайромент, аби він завжди чіплявся до Python. Для цього за допомогою pip встановлюємо virtualenv і робимо віртуальне оточення. А далі залишається активувати Python, встановити реквайерментси та скопіювати проєкт, який надалі вже можна запускати.

Фактично ви прописуєте кроки, які б самі виконували в контейнері:

Онлайн-курс Frontend-разробник від Powercode academy.
Курс на якому ти напишеш свій чистий код на JavaScript, попрацюєш із різними видами верстки, а також адаптаціями проектів під будь-які екрани. .
Зарееструватися

Poetry

Альтернативний варіант — із бібліотекою Poetry. У цьому випадку через pip інсталюємо Poetry, створюємо робочу директорію і копіюємо проєкт. У наведеному нижче прикладі я спочатку скопіював усі необхідні для побудови віртуального оточення команди, а потім ранив це оточення за допомогою Poetry. Щойно все встановилося, копіюємо проєкт та запускаємо Poetry з необхідними бібліотеками:


Conda

Цей спосіб я особисто часто використовую в роботі. Запускаємо наявний контейнер, у якому можна побачити різні команди. Встановлюємо Conda та прописуємо conda activate environment для активації цього інструменту. Після цього ви вже маєте запущений virtual environment від Conda (другий скріншот). Далі можна використовувати Python-команди встановленого віртуального оточення:


Завдяки одній специфічній команді в Docker Container ви можете зайти в контейнер (саме в його CMD) та подивитися, що ж там є. Для цього треба прописати docker exec -it та назву контейнера. А потім — задати команду ls, щоб отримати перелік усіх файлів і переконатися, що нічого не загубилося.

Для створення віртуального енвайронменту в контейнері за допомогою Conda вам знадобиться офіційний Image Conda з Docker Hub. Далі прописуєте variables. У моєму прикладі це Java та Path. Далі необхідно створити робочу директорію, скопіювати проєкт, оновити, встановити Java та видалити всі cache-файли. Після цього — прописати команду conda create -n my_venv  із зазначенням потрібної версії Python, активувати все за допомогою команди echo bin/bash/ -c “source activate my_venv” та встановити ревайроментси. Останні можуть бути якими завгодно. Вони встановлюються при запуску контейнера саме для нашого віртуального оточення:


Docker Compose

На завершення я би хотів розглянути Docker Compose. Перевага Docker над віртуальною машиною вже зрозуміла: він надійно ізолює контейнери один від одного.

Якщо у вас один застосунок, який виконується без різних залежностей та зв’язку з базою даних, тоді Docker Container — ідеальний варіант.

Але ж веброзробникам часто потрібен не один Image. Наприклад, необхідно мати Django та підключити базу даних PostgreSQL. Це неможливо, адже контейнери ізольовані.

В такому разі на допомогу приходить Docker Compose. Він дозволяє керувати кількома контейнерами одночасно і запускати паралельно одразу багато сервісів, які мають працювати один з одним.

Docker Compose встановлює зв’язки між окремими контейнерами та фактично складає їх в єдине ціле. За допомогою декількох команд ви можете прописати всі залежності для веб-застосунку: і згадані Django з PostgreSQL, і nginx, і php, і phpMyAdmin тощо.

Онлайн-курс "Фінансовий аналіз" від Laba.
Навчіться читати фінзвітність так, щоб ухвалювати ефективні бізнес-рішення.Досвідом поділиться експерт, що 20 років займається фінансами і їхньою автоматизацією.
Детальніше про курс


Погляньмо на прикладі, як це працює. Спочатку ви встановлюєте проєкт Django із залежностями та запускаєте його. Далі треба зв’язати вебзастосунок і базу даних. Для цього в Docker Compose позначаєте його версію та сервіси, які мають взаємодіяти. У нашому випадку це web та db.

У вебзастосунку я прописав білдинг, volumes, порти та залежності. Сам застосунок залежатиме від бази даних. У db я вказав потрібний Image (тут це sqlite), шлях volumes та environment variables, який буде використовуватися для запуску. Все це досить просто. Якщо ж виникнуть питання, завжди можна звернутися до Docker Hub. Там зрозуміло описано, як оформити Docker Compose.

Як бачите, Docker може значно спростити вам роботу та підвищити ефективність ваших застосунків.

Цей інструмент дійсно потужний, із розвиненим функціоналом та безліччю додаткових сервісів. У цих двох статтях я описав лише маленьку частину того, що варто знати про Docker. Та ви можете піти далі, вивчати і використовувати всі його можливості задля ще більшої продуктивності.

Читайте також: Зручніше за віртуальну машину: для чого потрібен Docker і як він працює — розбираємо основні команди

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

Бізнес англійська від Englishdom.
Тут навчають за методикою Кембриджу, завдяки якій англійську вивчили понад 1 мільярд людей. Саме вона використовується в найкращих навчальних закладах світу, і саме за нею створені курси.
Інформація про курс

Цей матеріал – не редакційний, це – особиста думка його автора. Редакція може не поділяти цю думку.

Топ-5 найпопулярніших блогерів березня

PHP Developer в ScrumLaunch
Всего просмотровВсього переглядів
2434
#1
Всего просмотровВсього переглядів
2434
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсього переглядів
113
#2
Всего просмотровВсього переглядів
113
Career Consultant в GoIT
Всего просмотровВсього переглядів
95
#3
Всего просмотровВсього переглядів
95
CEO & Founder в Trustee
Всего просмотровВсього переглядів
94
#4
Всего просмотровВсього переглядів
94
Рейтинг блогерів

Найбільш обговорювані статті

Топ текстів

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: