Запуск контейнера Docker
Технологія Docker набирає все більшої популярності серед розробників і DevOps-фахівців у наші дні, оскільки дозволяє без особливих труднощів налаштувати різні оточення один раз, а потім відтворювати їх на, здавалося б, зовсім не сумісному устаткуванні. Але почнемо наш цикл статей про Docker з азів.
У сьогоднішній статті ми поговоримо про створення контейнерів і, відповідно, про їхній запуск. У Docker контейнер є оточення для виконання будь-якого одного процесу. Це ізольоване середовище, в якому є все необхідне для виконання потрібного процесу, і немає нічого зайвого. Створення контейнера Docker виконується в момент його запуску, і ці процеси запускаються за допомогою команди docker run. Давайте спочатку розглянемо її синтаксис та опції.
Синтаксис та опції docker run
Синтаксис команди docker run схожий на синтаксис інших команд Linux і виглядає так:
$ docker run опції образ команда
Утиліть обов'язково треба передати образ, на основі якого буде створено контейнер. Образ може бути локальним або вказувати на образ, який потрібно завантажити з мережі. Ми розглянемо це на прикладах нижче. Опції дозволяють налаштувати контейнер та параметри його запуску детальніше. Сама команда дозволяє перевизначити програму, яка виконується після запуску контейнера. Наприклад, виконавши /bin/bash, ви можете підключитися до контейнера.
Розглянемо основні опції утиліти, які ми використовуватимемо. Опцій дуже багато, тому я не можу перерахувати їх усі:
- -d - запускає контейнер у фоновому режимі;
- -t - Прикріплює до контейнера псевдо-TTY-консоль;
- -i - виводить у термінал STDIN потік контейнера;
- --name - ім'я контейнера, яким потім можна буде до нього звертатися;
- --dns - Встановлює DNS-сервери для контейнера;
- --network - тип мережі для контейнера може приймати такі значення: bridge (використовується за замовчуванням), none, host. Можна також передати ідентифікатор мережі Docker, до якої потрібно підключитися;
- --add-host - додає рядок /etc/hosts;
- --restart - Вказує, коли треба перезапускати контейнер. Можливі значення: no, on-failure, always, unless-stopped;
- --rm - видаляє контейнер після завершення роботи;
- -m, --memory - кількість оперативної пам'яті, доступна Docker-контейнеру;
- --memory-swap - Об'єм пам'яті розділу підкачки, доступний в контейнері;
- --cpus - кількість ядер процесора, доступних у контейнері;
- --shm-size - Розмір файлу /dev/shm;
- --device - дозволяє монтувати пристрої з папки /dev у контейнер;
- --entrypoint - дозволяє перевизначити скрипт, який виконується під час запуску контейнера, перед запуском основної команди;
- --expose - дозволяє прокинути кілька портів із контейнера в хост-систему;
- -P - прокидає всі порти контейнера в хост-систему;
- -p - переносить всі порти контейнера до хост-системи без зміни номера порту;
- --link - дозволяє налаштувати зв'язок контейнерів Docker;
- -e - додає змінну оточення у контейнер;
- -v, --volume - дозволяє монтувати папки хоста у контейнер;
- -w - Змінює робочу директорію контейнера.
Це основні опції, які ми будемо використовувати в цій статті, а тепер розглянемо на прикладах, як створити контейнер Docker в Linux.
Створення контейнера Docker
1. Звичайний контейнер
Щоб створити та запустити контейнер із параметрами, заданими в образі за промовчанням, просто запустіть команду без параметрів. Давайте скористаємося контейнером hello-world, який для цього і призначений:
docker run hello-world
Після запуску контейнера Docker буде виведено повідомлення з вітанням, і процес у контейнері завершиться.
Для пошуку готових образів для контейнерів можна використовувати веб-сайт DockerHub. Тут є образи для більшості дистрибутивів та системних сервісів, таких як Nginx, Apache, PHP-FPM, PhpMyAdmin та багато інших.
Вгорі відображається назва контейнера, а трохи нижче доступні версії. При створенні контейнера версія записується через двокрапку. Наприклад, давайте створимо та запустимо контейнер з Ubuntu 18.04. Щоб до контейнера було легко отримати доступ потім, задамо ім'я за допомогою опції --name:
docker run --name Ubuntu1804 ubuntu:18.04
2. Підключення до контейнера
Образ Ubuntu 18.04, на основі якого ми створили контейнер вище, не містить команди, яка постійно виконувалася б, тому якщо ви спробуєте підключитися до нього за допомогою команди docker attach, то отримаєте помилку: Ви не можете подумати про те, як завантажити container, start it first:
docker attach Ubuntu1804
Так відбувається тому, що оточення не може працювати без основного процесу, для якого створено контейнер. Поки працює процес, працюватиме і контейнер. Як тільки процес завершено, контейнер завершується, і створений нами раніше контейнер повністю марний. Ви не зможете до нього підключитися, тому що він падатиме відразу ж після старту, а до контейнера, що впав, підключитися не можна. Його можна видалити:
docker rm Ubuntu1804
А нам треба створити контейнер із командою, яка виконуватиметься. Для цього просто передайте команду після імені образу, наприклад, /bin/bash. Щоб контейнер був доступний інтерактивно, створюйте його з опціями -i і -t:
docker run -it --name Ubuntu1804 ubuntu:18.04 /bin/bash
Тепер ви у контейнері та можете виконувати дії прямо в ізольованому оточенні.
3. Змінні оточення
Найчастіше для зміни налаштувань контейнера використовуються змінні оточення. Ви задаєте якусь змінну оточення, а потім її значення використовується вашою програмою в самому контейнері для виконання різних дій. Для завдання змінних оточення використовується опція -e. Запуск контейнера Docker:
docker run -it -e "FOO=bar" --name Ubuntu1804_2 ubuntu:18.04 /bin/bash
4. Монтування папок та сховищ
Коли вам потрібно, щоб контейнер міг працювати з вихідними кодами програми або з даними, що часто змінюються, рекомендую зробити спеціальне налаштування - буде незручно щоразу копіювати інформацію в контейнер. Куди простіше вмонтувати папку хоста в контейнер, і всі зміни вихідних даних будуть відразу доступні в контейнері. Це дуже зручно. Для встановлення папки слід передати її опції -v. Наприклад, примонтуємо папку ~/test_docker у контейнер:
docker run -it -v "~/test_docker:/mnt" --name Ubuntu1804_3 ubuntu:18.04 /bin/bash
Сховища дозволяють монтувати у контейнер віртуальний диск, який видаляється при видаленні контейнера. Таке сховище буде автоматично створено, якщо передати папку, що не існує, а ім'я для нового сховища:
docker run -it -v docker_volume:/mnt --rm --name Ubuntu1804_4 ubuntu:18.04 /bin/bash
Нагадую, що опція --rm видаляє контейнер одразу ж після того, як він завершить свою роботу.
5. Порти контейнера
Якщо вам потрібно отримати доступ до якогось сервісу контейнера порту, наприклад до веб-інтерфейсу, цей порт треба прокинути в хост-систему. -p. Давайте встановимо Nginx і прокинемо його порт в хост-систему:
docker run --name Nginx -p 8080:80 -d nginx
6. Зв'язування контейнерів
Зв'язування контейнерів дозволяє налаштувати взаємодію між ними. --linkЩоб закріпити знання, отримані вище, давайте створимо контейнер з базою даних MySQL, а потім зв'яжемо його з PhpMyAdmin.
Спочатку створюємо контейнер MySQL з постійним сховищем у /var/lib/mysql. У змінних оточення йому треба передати пароль суперкористувача. -d, щоб контейнер запустився у фоновому режимі:
docker run -v mysql_volume:/var/lib/mysql --name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0
Потім створюємо контейнер з PhpMyAdmin для доступу до цієї бази даних та зв'язуємо з ним контейнер MySQL під ім'ям db:
docker run --name PhpMyAdmin -d --link MySQL:db -p 8080:80 phpmyadmin/phpmyadmin
Також тут ми прокидаємо порт 80 у хост-систему, щоб отримати доступ до веб-інтерфейсу. Тепер можна перевіряти у браузері.
7. Мережа для контейнерів
Контейнери можна зв'язувати.Якщо треба поєднати три і більше контейнерів між собою, то куди зручніше відразу зв'язати їх в одну спільну мережу, ніж створювати безліч підключень для кожного з цих контейнерів. Всі об'єкти в одній мережі матимуть доступ до один одного за їхнім ім'ям. Спочатку необхідно створити мережу:
docker network create -d bridge docker_network
Переглянути список створених мереж можна командою:
Тепер її можна використовувати. Об'єднаємо за допомогою мережі наш MySQL- та PhpMyAdmin-сервера. Для цього треба їх зупинити та видалити:
docker stop MySQL
docker stop PhpMyAdmin
docker rm MySQL
docker rm PhpMyadmin
docker run -v mysql_volume:/var/lib/mysql --network docker_network --name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0
А для PhpMyAdmin тепер треба передати хост, на якому розташована база даних у змінному оточенні PMA_HOST:
docker run --name PhpMyAdmin -d --network docker_network -e PMA_HOST=MySQL -p 8080:80 phpmyadmin/phpmyadmin
Висновки
У цій статті ми розглянули, як запустити контейнер Docker та налаштувати його параметри. Як бачите, Docker може бути дуже корисним для швидкого розгортання робочих оточень. Але рідко для цього використовують саму команду docker run. Зазвичай використається інструмент docker-compose. Чи цікаво вам прочитати цей інструмент? Напишіть у коментарях!
Посібник з Docker. Частина 1: образ, контейнер, зіставлення портів та основні команди
Docker — це платформа з відкритим вихідним кодом для створення, розгортання та керування контейнеризованими додатками.
Уявіть, як ви інсталюєте програмне забезпечення, яке потребує встановлення всіх його залежностей.Прийде зіткнутися з безліччю помилок, вручну з'ясувати і усунути всі їхні причини. Щоразу – спроби запустити всю систему заново, щоб нарешті правильно завершити установку. Саме в цей момент на допомогу приходить Docker, намагаючись полегшити життя.
Зміст:
- Образи та контейнери.
- Запуск першої програми в Docker.
- Основні команди контейнерів Docker.
- Командний рядок Docker-контейнер.
- Образи користувача Docker.
- Запуск веб-програми в Docker.
- Docker та зіставлення портів.
- Висновки.
1. Образи та контейнери
Найважливіші концепції Docker!
Образ — це файл, який зберігає всю конфігурацію запуску програми у контейнері Docker. Подивитися на список образів, створених у системі, можна за допомогою наступної команди:
Контейнер - Це екземпляр образу. Docker-контейнер діє як віртуальна машина, але не має окремої операційної системи. Кожен контейнер встановлює програми або програмне забезпечення, дотримуючись інструкцій, записаних у файлах образу.
Кількість контейнерів не обмежена, всі вони працюють на загальній інфраструктурі хоста та загальній операційній системі. Подивитися на список контейнерів можна за допомогою команди:
2. Запуск першої програми в Docker
Насамперед потрібно вивести на екран фразу "Hello, world!".
У Docker кожному контейнеру потрібен образ, тому, щоб запустити hello-world, введіть у консоль або термінал команду:
docker run hello-world
Спроба створення та запуску контейнера. Згідно з документацією API-клієнта Docker, в установленому порядку виконуються такі дії.
- Консоль: виконує команду docker run hello-world
- Docker client (CLI): отримує команду та виконує дії на її основі.
- Сервер Docker: зв'язується з CLI, щоб видати клієнту з кешу образів (Image Cache) потрібний образ з назвою hello-world. Якщо такого образу немає, сервер Docker зв'язується з хабом Docker, де завантажує образ із зазначеним ім'ям.
- Docker Hub: хаб Docker отримує запит від сервера Docker на завантаження конкретного файлу образу загальнодоступного сховища.
- Сервер Docker: знову шукає образ у розділі “Image Cache”, Потім створює контейнер – екземпляр образу hello-world.
- Контейнер Docker: згідно з початковими установками з образу, в контейнері запускається проста програма hello-world.
- Консоль: в результаті успішного виконання всіх вищевикладених етапів відобразить інформацію зі скріншота.
3. Основні команди контейнерів Docker
Прочитайте список команд управління поведінкою контейнерів без зміни образів.
- Вивести на екран stderr та stdout від запущених у контейнері програм, логування контейнера Docker:
4. Командний рядок Docker-контейнера
Розглянемо набір найчастіших питань про введення команд з клавіатури безпосередньо в контейнери Docker.
Exec дозволяє виконувати команди в контейнері, а прапор -it дозволяє прийом введення від користувача до процесу, а також виведення в термінал як результату виконання процесу, так і повідомлень про помилки.
Іноді зручно безпосередньо взаємодіяти з командним рядком контейнера. Для пошуку помилок та налагодження, або ви можете запустити там усі команди Linux одночасно. Переконайтеся, що контейнер запущено, а потім введіть наступну команду:
sh видасть дозвіл на введення підказок (prompt), і ви зможете виконувати всередині контейнера різні завдання, наприклад:
Припустимо, що ви хочете відразу після завантаження з хаба Docker запустити образ під назвою busybox. Що ви зробите?
Тепер, щоб відповісти на вищезазначене запитання, виконайте наступну команду:
docker run -it busybox sh
Тепер усі знання про корисні команди з двох пунктів посібника допоможуть вам підготуватися до наступного кроку.
5. Образи користувача Docker
Як додати файли до контейнера та яку операційну систему вибрати для образу?
Основний файл, який зберігає всі інструкції. Кожен dockerfile однаково структурований. Щоб створити dockerfile для користувача образу необхідно вказати:
- Базовий образ.
- Усі залежності та умови запуску програми.
- Команду для запуску програми під час старту контейнера.
- Docker Client
Після створення dockerfile ви одразу спробуєте зібрати образ. Отже, Dockerfile надсилається клієнту Docker.
Далі клієнт Docker передає всі інструкції серверу Docker, який, у свою чергу, виконує всю брудну роботу, а саме всі команди всередині dockerfile і створює образ. Потім образ запускається, у результаті створюється контейнер, екземпляр образу.
- Як створити образ Docker?
- Спочатку напишіть dockerfile.
- Потім виконайте команду docker build.
- Тепер запустіть образ командою docker run.
Розглянемо простий dockerfile, в якому встановлений сервер бази даних Redis:
Тепер, дивлячись на Dockerfile, у вас, напевно, виникли питання! Відповімо на них зараз:
У жодного контейнера немає власної операційної системи. Якщо ви хочете створити контейнер, йому потрібна відправна точка або базовий образ, з якого він може почати роботу.
Alpine Linux це як Windows і macOS, де можна встановити майже все, що вам потрібно. Alpine займає мало пам'яті, що добре підходить для встановлення Redis. Базовий образ завантажується через інструкцію FROM.
Подивіться, в dockerfile написано інструкцію 'RUN', яка виконує команди всередині контейнера.APK означає менеджер пакетів Alpine Linux. Команди apk застосовуються в будь-якій працюючій системі на базі Alpine Linux для видалення, встановлення, оновлення програмного забезпечення.
Інструкцією CMD задається команда за замовчуванням, яка виконуватиметься лише при запуску контейнера без вказівки команди. Наведений вище приклад запустить сервер Redis.
Тепер поговоримо детальніше про команду docker build. Що відбувається перед тим, як результат виконання з'являється на екрані?
- Завантажується контейнер із образом alpine.
- Файлова система з образу alpine переноситься у тимчасовий контейнер, у ньому виконуються інструкції з встановлення бази даних Redis. Після встановлення тимчасовий контейнер видаляється, а файлова система переноситься назад в образ alpine, тим самим оновлюючи його. Тепер у новому образі встановлено Redis.
- За аналогією створюється ще один тимчасовий контейнер для встановлення команди запуску сервера Redis під час кожного запуску образу в контейнері. Відтак тимчасовий контейнер видаляється, а оновлена файлова система встановлюється в кінцевому образі користувача.
- Нарешті, для запуску контейнера за шаблоном образа користувача виконується команда docker run .
Примітка: якщо ви оновите dockerfile образу і спробуєте перезбирати його, Docker отримає кеш з попереднього образу, щоб пропустити той же процес. Він оновить лише доданий розділ в Dockerfile. Порядок у Dockerfile також важливий. Якщо ви зміните порядок команд, кеш обнуляться!
6. Запуск веб-програми в Docker
У цьому розділі створимо і докеризуємо простий додаток на Node.js на основі образа користувача. Не турбуйтесь, вам не потрібні знання про Node.js для виконання пунктів посібника.
- Крок 1
Напишіть файл package.json , адже Express.js - це бекенд-фреймворк для веб-застосунків на Node.js. Вкажіть в ньому останню версію за допомогою символу зірочки * , а потім вкажіть запуск за промовчанням для команди node index.js , де index.js це основний веб-файл.
- Крок 2
Напишіть простий файл index.json. Планується, що фреймворк Express.js через/отримує запити та відправляє назад відповідь. Щоб отримати запит та відповідь, необхідно встановити порт для прослуховування.
- Крок 3
Напишіть dockerfile. Пам'ятаєте усі ключові кроки? Якщо забули, то підніміться вгору розділами і освіжіть знання. Проте цілком очевидно, що для запуску програми знадобляться встановлені, готові до роботи Node.js та NPM.
- Крок 5
Запустіть контейнер з програмою, запам'ятайте порт, що прослуховується.
- Крок 5
Перевірте, чи можна отримати доступ до програми з браузера, чи дійсно вона працює?
О ні! Щось пішло не так? Настав час з'ясувати.
Можливо, у вас зараз на увазі одне питання: навіщо в dockerfile написана команда WORKDIR /usr/app ?
Основна мета - поділ робочих файлів, щоб строго необхідні роботи програми файли не змішувалися з іншими директоріями, а легко відокремлювалися від інших за необхідності, якщо виникнуть проблеми. Отже, всередині контейнера файли веб-застосунку зберігаються в каталозі /usr/app .
7. Docker та зіставлення портів
Розглянемо, як розібратися в налаштуваннях та правильно встановити зіставлення портів!
При надсиланні запиту на порт 8080 вашої локальної машини він не перенаправляється автоматично на контейнер, так як у контейнера власне мережне відображення.
Зіставлення портів дозволить запиту на порт 8080 з локальної машини перенаправити запит на порт 8080 Docker-контейнера лише для вхідних запитів.
Однак за промовчанням Docker також дозволяє вихідні запити. Цікаво, як це зробити? Перевірте залежність у dockerfile , де NPM з контейнера безпосередньо звертається до Інтернету.
- У команді запуску контейнера перший порт це порт хост-машини або локальної машини, а другий порт це порт контейнера:
docker run -p 8080:8080 mahedi/simpleweb
Висновки
Веб-програма запущена та доступна при зверненні до порту 8080 локальної машини.
Незважаючи на успіх, варто згадати три поширені помилки, які допускаються в процесі роботи з Docker Server та Docker Client.
- Вибір базового образу неправильний.
- Відсутність у dockerfile команд ADD або COPY для перенесення файлів хост-машини у контейнер.
- Неправильне зіставлення портів під час створення контейнера.
Далі додаються скріншоти правильно запущеного в Docker веб-застосунку Node.js, щоб ви могли з ними звіритися.
Самостійно ознайомтеся з файлом dockerfile для побудови образа користувача і запуску веб-програми на Node.js.
Проаналізуйте зображений на скріншоті файл index.js із простим прикладом веб-програми на Node.js. Цей файл запускається в контейнері Docker за допомогою відповідної команди з dockerfile .
На сьогодні все! У наступній частині керівництва йтиметься про послідовне створення кількох контейнерів та докеризацію складних веб-систем з безліччю залежностей.
Як запустити Docker контейнер: покрокове керівництво
У цій статті ми розглянемо покрокове посібник із запуску контейнера, починаючи з установки Docker і закінчуючи запуском вашої першої програми.Цей інструмент для контейнеризації дозволяє створювати, тестувати та розгортати програми в ізольованих середовищах.
Docker являє собою ізольовану пісочницю для запуску додатків на сервері, яку часто використовують розробники. Якщо ви починаєте працювати з ним або хочете освіжити свої знання, цей матеріал допоможе вам швидко освоїти основи і успішно запустити контейнери на вашому комп'ютері.
Що таке Docker
Docker — це платформа для контейнеризації, яка дозволяє розробляти, доставляти та запускати програми в ізольованих середовищах, які називаються контейнерами. Контейнери дозволяють упаковувати програму з усіма її залежностями (бібліотеками, налаштуваннями, файлами тощо) в один образ, який може бути запущений на будь-якому сервері або комп'ютері, де встановлено Docker.
Основні особливості Docker включають ізоляцію додатків, де кожен додаток працює в своєму окремому контейнері, забезпечуючи безпеку і незалежність від інших процесів. Масштабованість контейнерів дозволяє легко збільшувати їх кількість для роботи у великих розподілених системах.
Портативність Docker гарантує однакову роботу контейнерів у будь-якому оточенні, чи це локальний комп'ютер розробника чи хмарна інфраструктура. Крім того, контейнери економлять системні ресурси, оскільки використовують одну й ту саму операційну систему, що робить їх ефективнішими порівняно з віртуальними машинами.
Docker став важливим інструментом для DevOps, тому що спрощує розгортання, масштабування та керування програмами в різних середовищах.
Для чого потрібний контейнер
Контейнер потрібен для того, щоб ізолювати додаток та його залежність у самостійному середовищі, що робить його незалежним від операційної системи та конфігурації хоста, на якому воно виконується.
- Ізоляція оточення: контейнери дозволяють програмам працювати в ізольованому середовищі з їх власними бібліотеками та залежностями. Це запобігає конфліктам між додатками, які можуть вимагати різні версії тих самих бібліотек.
- Портативність: контейнери можуть бути легко переміщені та запущені на різних серверах або платформах (локально, у хмарі тощо), не вимагаючи змін у коді програми або конфігурації.
- Швидкість розгортання: контейнери запускаються набагато швидше, ніж віртуальні машини, тому що вони використовують ядро операційної системи хост-машини та не вимагають повного завантаження ОС.
- Легкість масштабування: контейнери дозволяють швидко масштабувати програму, запускаючи безліч екземплярів одного і того ж контейнера для обробки більшої кількості запитів.
- Економія ресурсів: контейнери використовують менше пам'яті та процесорних ресурсів, ніж традиційні віртуальні машини, оскільки не вимагають повної віртуалізації апаратного забезпечення.
- Зручність у DevOps: контейнери роблять розробку та розгортання більш передбачуваними та автоматизованими, що спрощує інтеграцію із системами CI/CD (безперервної інтеграції та розгортання).
Переваги Docker контейнерів
Docker-контейнери мають безліч переваг: вони забезпечують ізоляцію, дозволяючи програмам працювати незалежно один від одного і виключаючи конфлікти версій і залежностей.Контейнери легко портувати між різними середовищами, це локальна машина, сервер або хмара, що гарантує консистентність роботи додатків.
Вони заощаджують ресурси, оскільки використовують менше пам'яті та процесорних потужностей порівняно з віртуальними машинами, поділяючи ядро операційної системи. Контейнери запускаються миттєво, що прискорює процес розробки та розгортання. Docker спрощує керування програмами, дозволяючи легко створювати, оновлювати та масштабувати їх, особливо в мікросервісних архітектурах.
Також Docker добре інтегрується з інструментами CI/CD, що допомагає автоматизувати процеси розгортання та тестування. Щоб опанувати роботу з Docker, рекомендується пройти спеціальні курси Docker, які детально пояснюють принципи контейнеризації, інструменти та методи роботи з цією технологією.
Необхідні умови
Для успішного проходження даного посібника вам знадобляться лише базові знання роботи з командним рядком та текстовим редактором. Досвід розробки веб-застосунків буде плюсом, але не є обов'язковим. У процесі виконання ми взаємодіятимемо з кількома хмарними сервісами. Для цього потрібно зареєструватись на наступних платформах:
Налаштування системи
Встановлення всіх необхідних інструментів може здатися складним завданням, але, на щастя, Docker досяг високої стабільності, і процес його встановлення на будь-які операційні системи став простим та зручним.
Docker
Ще кілька версій тому запуск Docker на Windows і MacOS викликав чимало проблем. Однак розробники значно покращили процес, і тепер установка стала дуже простою.
Python
На Mac і більшості Linux-дистрибутивів Python вже встановлено.Також починаючи з Windows 10 (оновлення 1903 і вище), під час введення команди «python» у командному рядку відкривається Microsoft Store, де можна швидко встановити останню версію Python. Якщо у вас є стара версія Windows, ви можете оновитися до Windows 11, щоб скористатися цією функцією і отримати зручний доступ до установки Python.
Java (за бажанням)
Для нашого проекту ми будемо використовувати Elasticsearch для зберігання даних та пошуку. Щоб запустити Elasticsearch локально, вам знадобиться Java. Однак у цьому посібнику все буде запускатися в контейнері, тому наявність Java на вашому комп'ютері необов'язково.
Запуск першої програми в Docker
Щоб запустити першу програму Docker, можна використовувати наступний простий приклад. Тут ми створимо контейнер, який виконає програму Hello, World! на базі Python.
Для початку необхідно встановити Docker. Перейдіть на офіційний сайт Docker і дотримуйтесь інструкцій, що підходять для вашої операційної системи.
Створіть папку для вашого проекту, наприклад:
mkdir my-first-docker-app cd my-first-docker-app
Створіть файл app.py з простим Python-кодом, який виведе Hello, World!
Створіть файл Dockerfile у тій самій папці, що і ваш Python-скрипт. Цей файл описуватиме, як зібрати Docker-образ:
# Використовуємо базовий образ Python FROM python:3.9-slim # Копіюємо поточну директорію в контейнер COPY . /app # Задаємо робочу директорію WORKDIR /app # Встановлюємо залежності (якщо вони є) # Наприклад: RUN pip install -r requirements.txt # команда для запуску програми CMD ["python", "app.py"]
Тепер потрібно зібрати образ Docker на основі Dockerfile. У командному рядку виконайте команду:
docker build -t my-first-docker-app .
Після того, як образ буде створено, ви можете запустити контейнер з таким чином:
docker run my-first-docker-app
В результаті ви побачите висновок:
Пояснення цих операцій:
- Dockerfile описує кроки створення Docker-образу. Ми використовуємо базовий образ Python, копіюємо файли програми в контейнер, а потім вказуємо, що контейнер повинен виконати Python-скрипт app.py.
- docker build — команда, яка створює Docker образ на основі Dockerfile.
- docker run команда для запуску контейнера зі створеним чином.
Це базовий приклад запуску програми в Docker. У реальних проектах Docker використовується для упаковки складніших додатків із залежностями, налаштуваннями та сервісами.
Як працює команда docker run
Команда «docker run» ініціює процес створення та запуску контейнера. Система виконує ряд кроків, описаних в офіційній документації Docker API:
- Консоль: запускає команду «docker run hello-world».
- Клієнт Docker (CLI): обробляє команду та починає виконувати необхідні дії.
- Docker-сервер: встановлює зв'язок з CLI, щоб знайти потрібний образ з ім'ям hello-world в локальному кеші образів (Image Cache). Якщо такий образ відсутній, сервер зв'язується з Docker Hub для завантаження.
- Docker Hub: це хмарне сховище, з якого сервер Docker завантажує потрібний образ, якщо його немає в локальному кеші.
- Docker-сервер: після завантаження або знаходження образу в кеші створює контейнер на основі образу "hello-world".
- Контейнер Docker: запущений контейнер виконує програму, вбудовану в образ, в даному випадку це простий додаток "hello-world".
- Консоль: після завершення всіх кроків виводить інформацію, що підтверджує успішне виконання команди.
Цей процес забезпечує виконання ізольованих додатків усередині контейнерів, спрощуючи їх розгортання та керування.
Основні команди контейнерів Docker:
- docker run [OPTIONS] IMAGE [COMMAND] [ARG…] - Запускає новий контейнер на основі зазначеного образу.
- docker ps показує список запущених контейнерів.
- docker ps -a — показує список усіх контейнерів, включаючи завершені.
- docker stop [CONTAINER] - Зупиняє працюючий контейнер.
- docker start [CONTAINER] - Запускає раніше зупинений контейнер.
- docker restart [CONTAINER] - Перезапускає контейнер.
- docker rm [CONTAINER] - Видаляє зупинений контейнер.
- docker rmi [IMAGE] - Видаляє Docker-образ.
- docker exec [OPTIONS] CONTAINER COMMAND [ARG…] - Виконує команду всередині вже запущеного контейнера.
- docker logs [CONTAINER] - Показує логи контейнера.
- docker build [OPTIONS] PATH | URL | - — збирає образ із
- docker pull [IMAGE] — завантажує образ із Docker Hub або іншого репозиторію.
- docker commit [CONTAINER] [NEW_IMAGE_NAME] - Створює новий образ з існуючого контейнера.
- docker network ls показує список усіх мереж Docker.
- docker volume ls показує список томів Docker.
Висновки статті
Docker значно спрощує роботу з контейнерами, забезпечуючи швидкий та ефективний запуск програм на різних операційних системах. Docker широко використовується для розробки, тестування та розгортання програм, особливо в хмарних середовищах.
Не забувайте вчасно видаляти непотрібні контейнери та образи для оптимізації ресурсів. Завдяки своїй гнучкості та високій швидкості, цей інструмент став ідеальним для розробників та системних адміністраторів.
