Блог компанії 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 для управління контейнерними додатками.