Пошаговая инструкция для новичков по созданию первого Docker-контейнера: установка, написание Dockerfile, сборка образа, запуск и отладка. Всё просто и на практике.
Когда только начинаешь разбираться в Docker, всё может казаться немного громоздким и даже пугающим. Команды, контейнеры, образы, тома, сети — от одних только терминов можно потеряться. Но на деле всё куда проще, чем кажется. Главное — начать с чего-то конкретного. В этой статье разберёмся, как шаг за шагом создать свой первый рабочий Docker-контейнер. Без лишней теории, ближе к практике и с объяснениями на человеческом языке.
Зачем вообще нужен Docker-контейнер
Простой пример: ты написал скрипт на Python. Установил нужные библиотеки, всё запускается. Потом решил перенести проект на другой компьютер — и вдруг появляются ошибки: что-то не установлено, версии не совпадают, окружение другое. В такие моменты и приходит понимание, насколько важно уметь "упаковать" приложение так, чтобы оно работало одинаково в любом месте.
Вот тут и вступает в дело Docker. Он позволяет упаковать приложение вместе со всеми его зависимостями в некое изолированное пространство — контейнер. Всё, что нужно для запуска, оказывается, внутри. В результате, запускаешь контейнер — и приложение работает, как и задумано, независимо от операционной системы, настроек и версий библиотек на хост-машине.
Для новичков это отличная возможность работать в чистом и предсказуемом окружении. Никакой путаницы с локальными установками и "сломалось после обновления". Контейнеры также удобны, если хочется повторить чей-то проект с GitHub — просто запускаешь контейнер, и всё готово к работе.
Установка Docker и подготовка окружения
Перед тем как начать, нужно установить Docker. Это несложно. На официальном сайте есть инструкции под каждую операционную систему. На Windows и macOS можно использовать Docker Desktop. На Linux — установить из репозиториев или через скрипт с сайта. После установки проверь, что всё работает:
docker --version
Если терминал отвечает, можно двигаться дальше. Ещё одна полезная команда:
docker run hello-world
Она запускает тестовый контейнер, и если всё настроено правильно, ты увидишь приветственное сообщение. Это означает, что Docker Engine работает, и можно переходить к созданию своего контейнера.
Желательно работать из терминала — в будущем это упростит взаимодействие. Команды короткие, читаются легко и быстро входят в привычку. На первых порах пугаться их не стоит: всё логично и интуитивно.
Пишем свой первый Dockerfile
Чтобы создать контейнер, нужно сначала собрать образ — некий "шаблон", по которому Docker потом будет запускать контейнеры. Образ собирается на основе Dockerfile — это просто текстовый файл с инструкциями, как создать окружение.
Допустим, у нас есть простой Python-скрипт, например app.py
, который выводит "Привет, Docker!". Код может выглядеть так:
print("Привет, Docker!")
Рядом создаём файл Dockerfile
без расширения. И пишем в него:
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
и выполняем:
docker build -t my-first-app .
Флаг -t
даёт имя образу, точка в конце указывает текущую директорию как контекст сборки. Через пару секунд (или минут, в зависимости от скорости сети и наличия кэша) образ будет готов.
Проверим, что он есть:
docker images
Теперь запустим контейнер на его основе:
docker run my-first-app
Если всё прошло как надо, в терминале появится надпись: "Привет, Docker!".
Можно добавить пару опций:
docker run --rm my-first-app
Флаг --rm
удаляет контейнер после завершения работы, чтобы не засорять систему.
А если бы это было, скажем, веб-приложение, то к запуску можно было бы добавить проброс портов:
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 <имя образа>
— удаление образа
Если контейнер сразу завершился — это не всегда ошибка. Возможно, приложение просто выполнилось и завершилось, как в нашем примере со скриптом.
Если же запускается что-то долгоживущее (например, сервер), и контейнер почему-то не отвечает, стоит посмотреть логи и убедиться, что всё работает внутри.
В процессе ты можешь заметить, что накопилось много временных контейнеров и образов. Не забывай чистить систему:
docker system prune
Эта команда удаляет всё неиспользуемое. Только используй её с осторожностью — она может удалить то, что ещё пригодится.
Итоги
Создать свой первый Docker-контейнер — не так уж сложно. На практике всё сводится к написанию простого Dockerfile, сборке образа и запуску команды docker run
. Даже с минимальным количеством инструкций можно добиться работоспособного результата.
Сначала кажется, что нужно много знать. Но в действительности всё осваивается быстро, особенно если пробовать на практике. Docker — это инструмент, который раскрывается в процессе работы. Каждый новый проект или задача добавляют понимание.
Следующим шагом можно попробовать собрать контейнер с веб-приложением, использовать docker-compose
для нескольких сервисов, разобраться с томами и сетями. Но главное — ты уже сделал первый шаг. И теперь контейнеризация — это уже не что-то абстрактное, а вполне понятный процесс.