docker ps
Команда docker ps выводит список всех контейнеров, запущенных к настоящему моменту:
docker ps [options]
Напомню, что в каждом контейнере выполняется только один процесс. В данном примере нет ни одного запущенного контейнера, поэтому список пуст.
Попробуем выполнить команду ps с ключом –a, чтобы увидеть список всех контейнеров, даже не запущенных:
Как видите, после выхода из командной оболочки контейнер Ubuntu был остановлен и стал неактивным, но при этом он не был удален. При необходимости его можно повторно запустить.
docker restart
Команда docker restart перезапускает указанный контейнер:
docker restart [options] container
Перезапустим контейнер Ubuntu, указав его идентификатор, который мы видели в примерах выше:
Если снова выполнить команду docker ps, мы увидим, что контейнер активен:
docker attach
Команда docker attach позволяет передать указанный активный контейнер под интерактивное управление или увидеть его стандартный вывод:
docker attach [options] container
Подключим контейнер ubuntu с идентификатором 8fe941401f91, чтобы получить возможность взаимодействовать с командной оболочкой в нем:
Как видите, приглашение к вводу появилось вновь, и мы можем продолжить работу.
Важно отметить, что мы всегда будем получать приглашение к вводу после каждого перезапуска контейнера. Это поведение по умолчанию нельзя изменить, потому что мы определили его, собрав контейнер с ключом --interactive в команде run. Конечно, мы можем запустить тот же образ Ubuntu с другими ключами и параметрами. В этом заключается особая прелесть Docker.
docker rm
Команда docker rm удаляет указанные контейнеры:
docker rm [options] containers
Попробуем для примера удалить контейнер ubuntu. Перед удалением контейнер нужно остановить или передать команде rm ключ –f (force – принудительно), действие которого заключается в отправке сигнала SIGKILL процессу, выполняющемуся в контейнере:
docker stop [options] containers
Как видите, контейнер больше не выполняется. Он получил статус Exited (завершился) с кодом 137, который свидетельствует о том, что контейнер получил сигнал SIGKILL.
Команда stop сначала посылает сигнал SIGTERM, а затем, выждав некоторое время, сигнал SIGKILL. Период ожидания можно изменить, передав ключ –t с числом секунд. Эта возможность может очень пригодиться в случаях, когда требуется, чтобы процесс в контейнере успел завершить обработку запроса (например, запроса HTTP).
Также можно воспользоваться командой docker kill, которая немедленно посылает сигнал SIGKILL, но в этом случае процесс в контейнере не получит возможности завершиться обычным путем. Однако эта команда имеет ключ, позволяющий послать процессу в контейнере другой сигнал, отличный от SIGKILL.
Остановив контейнер, удалим его и вновь выполним команду ps –a:
Обратите внимание, что контейнер удален бесследно, а команда ps –a не обнаружила никаких напоминаний о нем.
docker exec
Команда docker exec позволяет удаленно выполнить другую команду в уже запущенном контейнере.
docker exec [options] container command [arg...]
Создадим контейнер и запустим его через команду:
docker run -d --interactive --tty ubuntu sh
Мы добавили флаг -d для запуска контейнера в фоновом режиме.
Давайте попробуем выполнить эту команду в контейнере ubuntu:
docker exec dcf8cda72903 ls -a