Как создать свой первый Docker-контейнер при обучении

Пошаговая инструкция для новичков по созданию первого Docker-контейнера: установка, написание Dockerfile, сборка образа, запуск и отладка. Всё просто и на практике.

Когда только начинаешь разбираться в Docker, всё может казаться немного громоздким и даже пугающим. Команды, контейнеры, образы, тома, сети — от одних только терминов можно потеряться. Но на деле всё куда проще, чем кажется. Главное — начать с чего-то конкретного. В этой статье разберёмся, как шаг за шагом создать свой первый рабочий Docker-контейнер. Без лишней теории, ближе к практике и с объяснениями на человеческом языке.

Зачем вообще нужен Docker-контейнер

Простой пример: ты написал скрипт на Python. Установил нужные библиотеки, всё запускается. Потом решил перенести проект на другой компьютер — и вдруг появляются ошибки: что-то не установлено, версии не совпадают, окружение другое. В такие моменты и приходит понимание, насколько важно уметь "упаковать" приложение так, чтобы оно работало одинаково в любом месте.

Вот тут и вступает в дело Docker. Он позволяет упаковать приложение вместе со всеми его зависимостями в некое изолированное пространство — контейнер. Всё, что нужно для запуска, оказывается, внутри. В результате, запускаешь контейнер — и приложение работает, как и задумано, независимо от операционной системы, настроек и версий библиотек на хост-машине.

Для новичков это отличная возможность работать в чистом и предсказуемом окружении. Никакой путаницы с локальными установками и "сломалось после обновления". Контейнеры также удобны, если хочется повторить чей-то проект с GitHub — просто запускаешь контейнер, и всё готово к работе.

Установка Docker и подготовка окружения

Перед тем как начать, нужно установить Docker. Это несложно. На официальном сайте есть инструкции под каждую операционную систему. На Windows и macOS можно использовать Docker Desktop. На Linux — установить из репозиториев или через скрипт с сайта. После установки проверь, что всё работает:

bash
docker --version

Если терминал отвечает, можно двигаться дальше. Ещё одна полезная команда:

bash
docker run hello-world

Она запускает тестовый контейнер, и если всё настроено правильно, ты увидишь приветственное сообщение. Это означает, что Docker Engine работает, и можно переходить к созданию своего контейнера.

Желательно работать из терминала — в будущем это упростит взаимодействие. Команды короткие, читаются легко и быстро входят в привычку. На первых порах пугаться их не стоит: всё логично и интуитивно.

Пишем свой первый Dockerfile

Чтобы создать контейнер, нужно сначала собрать образ — некий "шаблон", по которому Docker потом будет запускать контейнеры. Образ собирается на основе Dockerfile — это просто текстовый файл с инструкциями, как создать окружение.

Допустим, у нас есть простой Python-скрипт, например app.py, который выводит "Привет, Docker!". Код может выглядеть так:

python
print("Привет, Docker!")

Рядом создаём файл Dockerfile без расширения. И пишем в него:

sql
FROM python:3.11-slim COPY app.py /app.py CMD ["python", "/app.py"]

Разберёмся, что тут происходит:

  • FROM python:3.11-slim — указываем базовый образ. В данном случае — официальный образ Python с лёгкой версией системы.

  • COPY app.py /app.py — копируем наш скрипт внутрь образа.

  • CMD ["python", "/app.py"] — указываем команду, которая будет выполняться при запуске контейнера.

Вот и всё. Очень простой, но уже рабочий Dockerfile.

Сборка и запуск

Теперь можно собрать образ. В терминале переходим в папку с нашим Dockerfile и выполняем:

bash
docker build -t my-first-app .

Флаг -t даёт имя образу, точка в конце указывает текущую директорию как контекст сборки. Через пару секунд (или минут, в зависимости от скорости сети и наличия кэша) образ будет готов.

Проверим, что он есть:

bash
docker images

Теперь запустим контейнер на его основе:

bash
docker run my-first-app

Если всё прошло как надо, в терминале появится надпись: "Привет, Docker!".

Можно добавить пару опций:

bash
docker run --rm my-first-app

Флаг --rm удаляет контейнер после завершения работы, чтобы не засорять систему.

А если бы это было, скажем, веб-приложение, то к запуску можно было бы добавить проброс портов:

bash
docker run -p 5000:5000 my-web-app

Таким образом, приложение внутри контейнера будет доступно по локальному адресу localhost:5000.

Что делать, если что-то пошло не так

Ошибки случаются — особенно в начале. Важно научиться с ними разбираться, а не пугаться при обучении Docker https://karpov.courses/docker. Вот несколько полезных команд для диагностики и управления:

  • docker ps -a — список всех контейнеров, включая остановленные

  • docker logs <имя или ID контейнера> — просмотр логов

  • docker exec -it <имя или ID> bash — вход внутрь контейнера, если в нём установлен bash

  • docker rm <ID> — удаление контейнера

  • docker rmi <имя образа> — удаление образа

Если контейнер сразу завершился — это не всегда ошибка. Возможно, приложение просто выполнилось и завершилось, как в нашем примере со скриптом.

Если же запускается что-то долгоживущее (например, сервер), и контейнер почему-то не отвечает, стоит посмотреть логи и убедиться, что всё работает внутри.

В процессе ты можешь заметить, что накопилось много временных контейнеров и образов. Не забывай чистить систему:

bash
docker system prune

Эта команда удаляет всё неиспользуемое. Только используй её с осторожностью — она может удалить то, что ещё пригодится.

Итоги

Создать свой первый Docker-контейнер — не так уж сложно. На практике всё сводится к написанию простого Dockerfile, сборке образа и запуску команды docker run. Даже с минимальным количеством инструкций можно добиться работоспособного результата.

Сначала кажется, что нужно много знать. Но в действительности всё осваивается быстро, особенно если пробовать на практике. Docker — это инструмент, который раскрывается в процессе работы. Каждый новый проект или задача добавляют понимание.

Следующим шагом можно попробовать собрать контейнер с веб-приложением, использовать docker-compose для нескольких сервисов, разобраться с томами и сетями. Но главное — ты уже сделал первый шаг. И теперь контейнеризация — это уже не что-то абстрактное, а вполне понятный процесс.