Как использовать docker container create для подготовки контейнеров

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker create для подготовки Docker-контейнеров без их немедленного запуска. Это позволяет настраивать контейнеры и тома перед выполнением. Вы начнёте с создания контейнера из образа Ubuntu, проверите его статус после создания, а затем запустите и подключитесь к созданному контейнеру.

Далее вы изучите, как инициализировать том с помощью docker create и впоследствии использовать этот инициализированный том в другом контейнере. Этот практический опыт продемонстрирует гибкость и контроль, которые предоставляет команда docker create при управлении жизненным циклом контейнеров и сохранении данных.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/ls -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/ps -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/start -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/attach -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/create -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/pull -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/images -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} docker/volume -.-> lab-555106{{"Как использовать docker container create для подготовки контейнеров"}} end

Создание контейнера без его запуска

На этом шаге вы узнаете, как создать Docker-контейнер без его немедленного запуска. Это полезно, когда требуется настроить конфигурацию контейнера или тома перед его запуском.

Сначала загрузим образ ubuntu из Docker Hub. Этот образ будет использоваться для создания нашего контейнера.

docker pull ubuntu:latest

Вы увидите вывод, указывающий на загрузку образа. После завершения загрузки можно проверить наличие образа локально, выведя список образов.

docker images

Теперь создадим контейнер с именем my-ubuntu-container из образа ubuntu. Для этого воспользуемся командой docker create. Флаги -it обычно используются для интерактивных контейнеров, но docker create только настраивает контейнер, не запуская его. Мы включаем их здесь для согласованности с тем, как вы могли бы впоследствии запустить контейнер.

docker create -it --name my-ubuntu-container ubuntu:latest

Команда docker create создаёт перезаписываемый слой контейнера поверх указанного образа и подготавливает его для выполнения указанной команды. Она не запускает контейнер. В выводе вы увидите длинную строку символов — это идентификатор контейнера.

Чтобы убедиться, что контейнер создан, но не запущен, можно вывести список всех контейнеров, включая остановленные.

docker ps -a

В выводе вы должны увидеть контейнер с именем my-ubuntu-container и статусом Created. Это подтверждает, что контейнер успешно создан, но ещё не запущен.

Запуск созданного контейнера и подключение к нему

На предыдущем шаге вы создали Docker-контейнер с именем my-ubuntu-container, но не запустили его. В этом шаге вы узнаете, как запустить этот созданный контейнер и подключить терминал к его стандартным потокам ввода, вывода и ошибок.

Для запуска контейнера используйте команду docker start с указанием имени контейнера.

docker start my-ubuntu-container

Эта команда запускает контейнер. Однако по умолчанию он работает в фоновом режиме. Для взаимодействия с контейнером необходимо к нему подключиться.

Чтобы подключиться к работающему контейнеру, используйте команду docker attach с указанием имени контейнера.

docker attach my-ubuntu-container

После выполнения этой команды ваш терминал подключится к оболочке контейнера. Вы должны увидеть приглашение командной строки, которое выглядит как внутри контейнера Ubuntu, обычно в формате root@<container-id>:/#.

Теперь, находясь внутри контейнера, вы можете выполнять команды. Например, проверим версию операционной системы.

lsb_release -a

Вы должны увидеть вывод с информацией о версии Ubuntu, работающей в контейнере.

Чтобы выйти из контейнера без его остановки, нажмите Ctrl + P, а затем Ctrl + Q. Это отключит ваш терминал от контейнера, оставив контейнер работать в фоновом режиме.

Если вы просто введёте exit или нажмёте Ctrl + D во время подключения, контейнер остановится.

После отключения вы можете проверить, что контейнер всё ещё работает, выведя список запущенных контейнеров.

docker ps

Вы должны увидеть my-ubuntu-container в списке с указанием статуса, что он работает.

Инициализация тома с помощью docker create

На этом шаге вы узнаете, как инициализировать том Docker с помощью команды docker create. Этот метод позволяет создать контейнер специально для заполнения тома начальными данными из образа контейнера.

Сначала создадим новый контейнер с именем volume-initializer из образа ubuntu. Этот контейнер будет временно использоваться для инициализации тома. Мы используем флаг -v для указания тома, который хотим инициализировать, и точки его монтирования внутри контейнера. Назовём том my-initialized-volume и смонтируем его в /app_data внутри контейнера.

docker create -v my-initialized-volume:/app_data --name volume-initializer ubuntu:latest

Эта команда создаёт контейнер и том, если он ещё не существует. Часть -v my-initialized-volume:/app_data указывает Docker создать том с именем my-initialized-volume и смонтировать его в директорию /app_data внутри контейнера.

Теперь запустим этот контейнер. При первом запуске контейнера с томом, если том пуст, Docker копирует содержимое директории, указанной в точке монтирования, из образа в том.

docker start volume-initializer

Поскольку этот контейнер предназначен только для инициализации и не имеет долгоиграющего процесса, он, скорее всего, запустится и сразу же остановится.

Вы можете проверить, что контейнер остановился, выведя список всех контейнеров.

docker ps -a

Вы должны увидеть volume-initializer со статусом Exited.

Чтобы убедиться, что том my-initialized-volume был создан, можно вывести список всех томов Docker.

docker volume ls

В списке томов вы должны увидеть my-initialized-volume.

На этом этапе том my-initialized-volume содержит начальные данные, которые присутствовали в директории /app_data образа ubuntu:latest.

Использование тома, инициализированного docker create, в другом контейнере

На предыдущем шаге вы инициализировали том Docker с именем my-initialized-volume, создав и запустив временный контейнер. Теперь вы узнаете, как использовать этот инициализированный том в другом контейнере. Это демонстрирует, как тома могут сохранять данные и использоваться совместно между контейнерами.

Сначала создадим новый контейнер с именем data-consumer из образа ubuntu. На этот раз мы сразу запустим контейнер и подключим существующий том my-initialized-volume к директории /data внутри нового контейнера.

docker run -it --name data-consumer -v my-initialized-volume:/data ubuntu:latest /bin/bash

Разберём эту команду:

  • docker run: Создаёт и запускает новый контейнер
  • -it: Эти флаги выделяют псевдо-TTY и оставляют stdin открытым для интерактивного использования
  • --name data-consumer: Присваивает контейнеру имя data-consumer
  • -v my-initialized-volume:/data: Ключевая часть. Подключает существующий том my-initialized-volume к директории /data внутри контейнера
  • ubuntu:latest: Указывает используемый образ
  • /bin/bash: Команда для запуска внутри контейнера (интерактивная оболочка bash)

После выполнения команды вы подключитесь к оболочке bash внутри контейнера data-consumer.

Теперь, находясь в контейнере, перейдите в директорию /data, куда смонтирован том:

cd /data

Вы можете просмотреть содержимое этой директории, чтобы увидеть данные, инициализированные на предыдущем шаге. Точное содержимое зависит от того, что находилось в директории /app_data образа ubuntu:latest при инициализации тома.

ls -l

Вы должны увидеть файлы и директории, скопированные из /app_data образа Ubuntu в том my-initialized-volume. Это подтверждает успешную инициализацию тома и его использование новым контейнером.

Для выхода из контейнера введите:

exit

Это остановит контейнер data-consumer и вернёт вас в терминал хоста.

Вы можете проверить статус контейнера:

docker ps -a

Вы увидите data-consumer со статусом Exited. Том my-initialized-volume сохраняется вместе со всеми данными.

Итоги

В этой лабораторной работе вы научились использовать команду docker create для подготовки Docker-контейнера без его немедленного запуска. Вы выполнили следующие шаги:

  • Загрузили образ
  • Создали контейнер из этого образа с помощью docker create
  • Проверили его статус "Created"

Затем вы узнали, как запустить созданный контейнер и подключиться к нему, что продемонстрировало разделение между созданием контейнера и его выполнением.

Кроме того, в лабораторной работе рассматривалась инициализация тома Docker с помощью docker create и последующее использование этого инициализированного тома в другом контейнере. Это показало, как docker create может применяться для настройки инфраструктурных компонентов, таких как тома, перед их подключением и использованием в работающих контейнерах.