HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Картинка описывает жизненный цикл контейнера. Кружками на нем изображены состояния, жирным выделены консольные команды, а квадратиками показывается то, что в реальности выполняется.</p>
1 <p>Картинка описывает жизненный цикл контейнера. Кружками на нем изображены состояния, жирным выделены консольные команды, а квадратиками показывается то, что в реальности выполняется.</p>
2 <p>Проследите путь команды docker run. Несмотря на то, что команда одна, с точки зрения работы Docker выполняется два действия: создание контейнера и запуск. Существуют и более сложные варианты исполнения, но в этом разделе мы рассмотрим только базовые команды.</p>
2 <p>Проследите путь команды docker run. Несмотря на то, что команда одна, с точки зрения работы Docker выполняется два действия: создание контейнера и запуск. Существуют и более сложные варианты исполнения, но в этом разделе мы рассмотрим только базовые команды.</p>
3 <h2>docker run</h2>
3 <h2>docker run</h2>
4 <p>Запустим nginx так, чтобы он работал в фоне. Для этого после слова<em>run</em>добавляется флаг -d. Дополнительно, зададим контейнеру имя --name=nginx, чтобы упростить обращение к нему.</p>
4 <p>Запустим nginx так, чтобы он работал в фоне. Для этого после слова<em>run</em>добавляется флаг -d. Дополнительно, зададим контейнеру имя --name=nginx, чтобы упростить обращение к нему.</p>
5 <p>Убедитесь в том, что nginx работает, открыв в браузере ссылку localhost:8080. Там вы увидите надпись<em>Welcome to Nginx!</em>.</p>
5 <p>Убедитесь в том, что nginx работает, открыв в браузере ссылку localhost:8080. Там вы увидите надпись<em>Welcome to Nginx!</em>.</p>
6 <h2>docker logs</h2>
6 <h2>docker logs</h2>
7 <p>После запуска в фоне, Docker выводит идентификатор контейнера и возвращает управление в терминал. С одной стороны это позволяет работать программе независимо от терминала, с другой, мы теперь потеряли возможность смотреть логи в том месте, где мы ее запустили. Посмотреть логи можно командой docker logs, которой нужно передать идентификатор контейнера или его имя</p>
7 <p>После запуска в фоне, Docker выводит идентификатор контейнера и возвращает управление в терминал. С одной стороны это позволяет работать программе независимо от терминала, с другой, мы теперь потеряли возможность смотреть логи в том месте, где мы ее запустили. Посмотреть логи можно командой docker logs, которой нужно передать идентификатор контейнера или его имя</p>
8 <p>docker logs выводит текущий лог и завершает работу, что бывает неудобно, если логи нужно просматривать в реальном времени. Для этого можно держать их постоянно открытыми по принципу работы команды tail -f. Для этого запустите docker logs -f 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e. Теперь лог будет обновляться каждый раз, когда вы обновляете страницу в браузере. Выйти из этого режима можно набрав Ctrl+C, при этом сам контейнер остановлен не будет.</p>
8 <p>docker logs выводит текущий лог и завершает работу, что бывает неудобно, если логи нужно просматривать в реальном времени. Для этого можно держать их постоянно открытыми по принципу работы команды tail -f. Для этого запустите docker logs -f 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e. Теперь лог будет обновляться каждый раз, когда вы обновляете страницу в браузере. Выйти из этого режима можно набрав Ctrl+C, при этом сам контейнер остановлен не будет.</p>
9 <p>Теперь выведем информацию о запущенных контейнерах командой docker ps:</p>
9 <p>Теперь выведем информацию о запущенных контейнерах командой docker ps:</p>
10 <p>Расшифровка столбиков:</p>
10 <p>Расшифровка столбиков:</p>
11 <ul><li>CONTAINER_ID - идентификатор контейнера. Так же, как и в git, используется сокращенная запись хеша</li>
11 <ul><li>CONTAINER_ID - идентификатор контейнера. Так же, как и в git, используется сокращенная запись хеша</li>
12 <li>IMAGE - имя образа, из которого был поднят контейнер. Если не указан тег, то подразумевается<em>latest</em></li>
12 <li>IMAGE - имя образа, из которого был поднят контейнер. Если не указан тег, то подразумевается<em>latest</em></li>
13 <li>COMMAND - команда, которая выполнилась на самом деле при старте контейнера</li>
13 <li>COMMAND - команда, которая выполнилась на самом деле при старте контейнера</li>
14 <li>CREATED - время создания контейнера</li>
14 <li>CREATED - время создания контейнера</li>
15 <li>STATUS - текущее состояние</li>
15 <li>STATUS - текущее состояние</li>
16 <li>PORTS - проброс портов</li>
16 <li>PORTS - проброс портов</li>
17 <li>NAMES - алиас. Docker позволяет кроме идентификатора иметь имя. Так гораздо проще обращаться с контейнером. Если при создании контейнера имя не указано, то Docker самостоятельно его придумывает. В выводе выше как раз такое имя у nginx</li>
17 <li>NAMES - алиас. Docker позволяет кроме идентификатора иметь имя. Так гораздо проще обращаться с контейнером. Если при создании контейнера имя не указано, то Docker самостоятельно его придумывает. В выводе выше как раз такое имя у nginx</li>
18 </ul><p>Команда docker ps выводит только запущенные контейнеры. Но кроме них могут быть и остановленные. Причем остановка может происходить как по успешному завершению, так и в случае ошибок. Попробуйте набрать docker run ubuntu ls, а затем docker run ubuntu bash -c "unknown". Эти команды не запускают долгоживущий процесс, они завершаются сразу после выполнения, причем вторая с ошибкой, так как такой команды не существует.</p>
18 </ul><p>Команда docker ps выводит только запущенные контейнеры. Но кроме них могут быть и остановленные. Причем остановка может происходить как по успешному завершению, так и в случае ошибок. Попробуйте набрать docker run ubuntu ls, а затем docker run ubuntu bash -c "unknown". Эти команды не запускают долгоживущий процесс, они завершаются сразу после выполнения, причем вторая с ошибкой, так как такой команды не существует.</p>
19 <p>Теперь выведем все контейнеры командой docker ps -a. Первыми тремя строчками вывода окажутся:</p>
19 <p>Теперь выведем все контейнеры командой docker ps -a. Первыми тремя строчками вывода окажутся:</p>
20 <p>Здесь как раз два последних запуска. Если посмотреть на колонку STATUS, то видно, что оба контейнера находятся в состоянии Exited. То есть запущенная команда внутри них выполнилась, и они остановились. Разница лишь в том, что один завершился успешно (0), а второй с ошибкой (127).</p>
20 <p>Здесь как раз два последних запуска. Если посмотреть на колонку STATUS, то видно, что оба контейнера находятся в состоянии Exited. То есть запущенная команда внутри них выполнилась, и они остановились. Разница лишь в том, что один завершился успешно (0), а второй с ошибкой (127).</p>
21 <h2>docker stop</h2>
21 <h2>docker stop</h2>
22 <p>Теперь попробуем остановить контейнер. Выполним команду:</p>
22 <p>Теперь попробуем остановить контейнер. Выполним команду:</p>
23 <p>Остановка контейнера не удаляет его. Он будет отображаться в списке контейнеров:</p>
23 <p>Остановка контейнера не удаляет его. Он будет отображаться в списке контейнеров:</p>
24 <h2>docker start</h2>
24 <h2>docker start</h2>
25 <p>После остановки контейнер можно даже перезапустить:</p>
25 <p>После остановки контейнер можно даже перезапустить:</p>
26 <p>Запуск контейнера всегда стартует его в фоновом режиме, поэтому вы не увидите лога. Чтобы его посмотреть, воспользуйтесь командой docker logs nginx.</p>
26 <p>Запуск контейнера всегда стартует его в фоновом режиме, поэтому вы не увидите лога. Чтобы его посмотреть, воспользуйтесь командой docker logs nginx.</p>
27 <h2>docker kill</h2>
27 <h2>docker kill</h2>
28 <p>docker stop шлет сигнал SIGTERM, который должен обработать приложение внутри контейнера и остановиться. Если оно настроено неправильно, то этого не произойдет и команда docker stop не сможет остановить контейнер. В этом случае понадобится docker kill. Эта команда использует сигнал SIGKILL, который гарантировано останавливает контейнер. Ее вывод идентичен:</p>
28 <p>docker stop шлет сигнал SIGTERM, который должен обработать приложение внутри контейнера и остановиться. Если оно настроено неправильно, то этого не произойдет и команда docker stop не сможет остановить контейнер. В этом случае понадобится docker kill. Эта команда использует сигнал SIGKILL, который гарантировано останавливает контейнер. Ее вывод идентичен:</p>
29 <p>Если попробовать набрать docker ps -a, то можно увидеть, что статус контейнера будет Exited. Это значит, что работа контейнера остановлена.</p>
29 <p>Если попробовать набрать docker ps -a, то можно увидеть, что статус контейнера будет Exited. Это значит, что работа контейнера остановлена.</p>
30  
30