Блог компанії 3v-Hosting
Як використовувати docker exec для виконання команд у контейнері Docker
5 хв.
Docker - це найкраще рішення для розробки контейнерних додатків. Він забезпечує ефективний і масштабований спосіб розгортання та управління програмним забезпеченням. docker exec - одна з основних команд для взаємодії із запущеними контейнерами. Вона дає змогу виконувати команди всередині активного контейнера, не зупиняючи і не перезапускаючи його. Ця можливість дуже важлива для налагодження, управління сервісами та виконання адміністративних завдань.
Що таке docker exec
Команда docker exec використовується для запуску процесу всередині вже працюючого контейнера. Docker exec взаємодіє з наявним контейнером, на відміну від команди Docker run, яка запускає новий екземпляр контейнера. Використовуйте її для перевірки контейнеризованих додатків, усунення неполадок і виконання завдань з обслуговування всередині працюючого середовища.
Основний синтаксис
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS: Додаткові прапори для зміни поведінки команди.
CONTAINER: ім'я або ідентифікатор цільового запущеного контейнера.
COMMAND [ARG...]: Команда для виконання всередині контейнера разом із будь-якими аргументами.
Виконання простих команд
Найчастіше docker exec використовується для виконання базових команд оболонки всередині контейнера. Наприклад, щоб перевірити змінні оточення всередині запущеного контейнера, ви можете використовувати:
docker exec my_container env
Це виведе всі змінні оточення для контейнера з ім'ям my_container.
Аналогічно, щоб перерахувати файли в каталозі /var/www/html контейнера, ви можете виконати команду:
docker exec my_container ls -l /var/www/html
Запуск інтерактивної оболонки
Одна з найкорисніших функцій docker exec - можливість відкрити інтерактивну сесію оболонки всередині запущеного контейнера. Це можна зробити за допомогою прапора -it:
docker exec -it my_container /bin/bash
-i (interactive): тримає сесію відкритою для введення.
-t (TTY): Виділяє псевдотермінал для сесії.
Для контейнерів, що використовують Alpine Linux або мінімальні дистрибутиви, /bin/bash може бути недоступний. Замість цього використовуйте:
docker exec -it my_container sh
Ця інтерактивна сесія дає змогу переміщатися по файловій системі контейнера, перевіряти процеси і виконувати команди в режимі реального часу.
Виконання команд від імені іншого користувача
За замовчуванням docker exec виконує команди від імені користувача root всередині контейнера. Однак ви можете вказати іншого користувача за допомогою опції -u. Наприклад, якщо в контейнері є користувач developer, ви можете запускати команди від його імені:
docker exec -u developer my_container whoami
Це допоможе забезпечити дотримання політик безпеки та запобігти випадковим змінам системних файлів усередині контейнера.
Запуск фонових процесів
Якщо вам потрібно виконати команду у фоновому режимі, не тримаючи відкритою термінальну сесію, ви можете використовувати:
docker exec -d my_container some_command
Прапор -d запускає команду у від'єднаному режимі, дозволяючи контейнеру продовжувати роботу, не чекаючи виведення команди.
Наприклад, щоб запустити фоновий процес усередині контейнера, ви можете використовувати:
docker exec -d my_container nohup some_script.sh &
Перевірка журналів і процесів
Під час усунення неполадок у контейнері корисно перевірити його журнали та запущені процеси. Команда docker logs надає доступ до стандартних вихідних журналів, але docker exec можна використовувати для безпосередньої перевірки запущених процесів:
docker exec my_container ps aux
Щоб постійно відстежувати активність системи, можна виконати команду:
docker exec -it my_container top
Ця команда надає інформацію про використання процесора і пам'яті в реальному часі для процесів, запущених усередині контейнера.
Робота з дозволами та безпекою
Виконання команд всередині контейнера має бути обережним, особливо якщо ви працюєте від імені root. Деякі найкращі практики включають:
- Виконувати команди від імені користувача, який не є root, коли це можливо.
- Використовувати docker exec для пошуку та усунення несправностей і налагодження, а не для виконання звичайних завдань автоматизації.
- Переконайтеся, що контейнери мають мінімальні привілеї, використовуючи такі функції безпеки Docker, як seccomp і AppArmor.
Відмінності між docker exec і docker attach
Важливо розрізняти docker exec і docker attach, оскільки вони служать різним цілям:
docker exec - запускає новий процес всередині наявного контейнера.
docker attach - підключається до вже запущеного процесу всередині контейнера.
Наприклад, docker attach корисний для повторного підключення до основного процесу контейнера, тоді як docker exec краще підходить для запуску додаткових команд всередині контейнера.
Висновок
Використовуйте команду docker exec для взаємодії із запущеними контейнерами. Цей важливий інструмент дає змогу адміністраторам і розробникам ефективно виконувати команди, відкривати сеанси командного рядка й усувати неполадки в застосунках. Розберіться в його можливостях і найкращих практиках, щоб більш ефективно використовувати Docker для управління контейнерними додатками.