Начало работы с контейнерами (часть 6)
- Начало работы с контейнерами (часть 2)
В предыдущей статье этой серии я показал вам, как можно установить некоторые образы контейнеров, а затем применить к этим образам теги. В этой статье я хочу продолжить обсуждение, показав вам, как создать контейнер Docker.
Как вы помните, в предыдущей статье я создал два разных образа Docker. Один из этих образов был образом сервера Nano, а другой — образом ОС Windows Server Core. Однако это не единственные базовые образы, которые вы можете установить. Вы можете создать свои собственные базовые образы из любого из образов, которые мы развернули в предыдущей статье, или вы можете загрузить некоторые готовые образы из Microsoft.
Если вы хотите проверить библиотеку образов контейнеров Microsoft, все, что вам нужно сделать, это открыть PowerShell и ввести следующую команду:
докер поиск майкрософт
Как видно на рис. A, Microsoft предоставляет несколько образов, которые вы можете загрузить. Некоторые из этих образов основаны на сервере Nano, а другие — на ядре сервера Windows.
Рисунок A: Microsoft предоставляет обширную библиотеку изображений.
Для демонстрации предположим, что после просмотра списка вы решили загрузить образ сервера MySQL, основанный на сервере Nano. Вы можете легко сделать это, используя команду Docker pull, за которой следует имя образа, который вы хотите установить. В этом случае команда будет такой:
Вы можете увидеть, как выглядит этот процесс на рисунке B.
Рисунок B: Вы можете использовать команду Docker pull для загрузки образов из Microsoft.
После завершения загрузки вы можете убедиться, что образ добавлен на ваш сервер, с помощью команды Docker Images, как показано на рисунке C.
Рисунок C. Новый образ был установлен на мой сервер Docker.
Конечно, сделать базовый образ доступным для использования на вашем сервере — это только отправная точка. Настоящая цель — создать контейнер на основе образа. К счастью, создавать контейнеры Docker относительно просто.
Для развертывания контейнера Docker используется команда Docker Run. При вводе этой команды есть несколько параметров, которые вам нужно будет использовать.
Первый параметр -d. Параметр -d запускает команду в автономном режиме. Отсоединенный режим обычно используется при выполнении команд вручную, как в данном случае.
Другой параметр, который мы могли бы использовать (в зависимости от типа создаваемого нами контейнера), — это -p. Параметр -p является параметром портов. Он используется для сопоставления портов контейнера с портом хоста. Например, в случае веб-сервера вы можете использовать -p 80:80, чтобы сопоставить порт 80 контейнера с портом 80 хоста.
Параметр -t указывает, что вы хотите использовать TTY. Эта концепция не очень хорошо документирована, но, по сути, она приводит к регистрации вывода команды. Я покажу вам пример этого позже.
Итак, с учетом сказанного, давайте продолжим и создадим контейнер ядра сервера. Вы можете сделать это с помощью этой команды:
Вам, вероятно, на самом деле не нужен переключатель -p в этом случае, но я все равно использовал его, чтобы вы могли увидеть, как он работает.
Часть команды -ping -t localhost отражает команду, которая будет выполняться внутри контейнера. Это приведет к тому, что контейнер будет постоянно пинговать сам себя, а параметр -t заставит выходные данные пинга записываться в файл журнала.
Когда вы создаете контейнер, Docker предоставляет очень большое шестнадцатеричное число, которое действует как идентификатор контейнера. Вы можете увидеть пример этого на рисунке D.
Рисунок D. Вот как вы создаете контейнер Docker.
Теперь, когда контейнер создан, давайте взглянем на него. Для этого введите следующую команду:
Как видно на рисунке E, эта команда показывает часть идентификатора контейнера, образ контейнера и некоторую другую информацию.
Рисунок E: Команда Docker ps отображает существующие контейнеры.
Теперь, когда я создал контейнер, я хочу немного вернуться назад и немного рассказать о параметре -t, о котором я упоминал ранее. Если вы посмотрите на команду, которую я использовал для создания контейнера, вы заметите, что -t был указан в середине команды ping. Команда была:
Я упомянул, что параметр -t использовался для ведения журнала, но вы можете думать об этом как о механизме перенаправления вывода. В этом случае я добавил -t к команде ping, чтобы перенаправить вывод Ping в файл журнала.
Итак, как нам получить доступ к файлу журнала? Для этого вам нужно знать первые несколько символов идентификатора контейнера. В этом случае первые несколько символов моего идентификатора контейнера: 394f7. Таким образом, я могу просмотреть файл журнала с помощью этой команды:
Вы можете увидеть вывод журнала на рисунке F.
Рисунок F. Вы можете использовать команду Docker logs для отображения содержимого журнала.
Так что, если вы хотите увидеть контейнер в режиме реального времени, а не просто просматривать журналы? Для этого просто введите Docker attach, а затем первые несколько символов идентификатора контейнера. Вы можете увидеть, как это выглядит на рисунке G.
Рисунок G. Теперь я присоединен к контейнеру.
На статическом снимке экрана это на самом деле не отличается от того, когда мы просматривали файлы журнала. Тем не менее, это просмотр контейнера в режиме реального времени, и консоль отображает эхо-запросы в реальном времени.
В следующей статье этой серии я планирую показать вам еще несколько вещей, которые можно делать с контейнерами. Однако прямо сейчас я хочу навести порядок, избавившись от созданного мной контейнера с образцами. Обычно первым шагом при этом является остановка контейнера. Для этого введите следующую команду:
Вы, конечно, замените свой собственный идентификатор контейнера на 394f7. После завершения команды вы можете использовать команду Docker ps для проверки контейнера. Однако если вы посмотрите на рисунок H, вы увидите, что команда остановки Docker не просто останавливает контейнер, она удаляет его. Причина этого в том, что мы создали контейнер с помощью ключа -d, который создает отдельный контейнер. Контейнер удалялся автоматически, как только процесс останавливался.
Рисунок H: Остановка контейнера приводит к его удалению.
Вывод
В этой статье я показал вам пример контейнера Docker. В следующей статье я хочу продолжить обсуждение, показав вам, как заставить контейнер делать что-то более полезное.
- Начало работы с контейнерами (часть 2)
- Начало работы с контейнерами (часть 5)