Создание пользовательских образов Docker
Создайте первый пользовательский образ Docker для простого приложения, правильно добавив ему тег и версию.
«Создание пользовательских образов Docker» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Создайте свой первый образ Docker
Зачем создавать собственные образы? Они позволяют упаковать конкретное приложение, его зависимости и конфигурацию в один переносимый модуль. Это важно для единообразия и простого развёртывания.
Способ создания такого образа задаётся в файле под названием Dockerfile.

Наше простое веб-приложение
Мы контейнеризируем очень простое веб-приложение на Python Flask. При переходе по его веб-адресу оно просто возвращает «Hello from Docker!».
Представим, что в каталоге находятся следующие файлы:
app.py: код приложения на Pythonrequirements.txt: список зависимостей PythonDockerfile: инструкции для создания образа
Код приложения Flask
Это наше простое приложение Flask на Python. Оно прослушивает порт 5000 и отвечает сообщением «Hello from Docker! ».
Вы можете запустить его локально (после установки Flask), чтобы увидеть его в действии!
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from Docker!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')Указание зависимостей
Нашему приложению нужна библиотека Flask. Мы указываем её в файле requirements.txt. Этот файл сообщает Docker (и менеджеру пакетов Python, pip), что необходимо установить.
Это гарантирует, что в нашем образе будут все библиотеки, необходимые для запуска приложения.
Flask==2.3.2Анатомия нашего Dockerfile
Dockerfile — это текстовый файл с инструкциями для сборки образа. Каждая инструкция создаёт слой. Вот что мы будем использовать:
FROM: указывает базовый образ (например, Python).WORKDIR: задаёт рабочий каталог внутри контейнера.COPY: копирует файлы с вашего локального компьютера в образ.RUN: выполняет команды (например, устанавливает зависимости).EXPOSE: сообщает Docker о портах, которые прослушивает контейнер.CMD: задаёт команду по умолчанию, выполняемую при запуске контейнера.
Создание Dockerfile
Вот полный Dockerfile для нашего приложения Flask. Поместите этот файл в тот же каталог, что и app.py и requirements.txt.
# Use an official Python runtime as a parent image
FROM python:3.9-slim-buster
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY requirements.txt .
COPY app.py .
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Make port 5000 available to the world outside this container
EXPOSE 5000
# Run app.py when the container launches
CMD ["python", "app.py"]Команда `docker build`
Теперь соберём наш образ! Откройте терминал в каталоге, где находятся ваш Dockerfile и файлы приложения.
Флаг -t присваивает нашему образу имя (my-flask-app) и версию (1.0). Символ . сообщает Docker, что в качестве контекста сборки нужно использовать текущий каталог.
docker build -t my-flask-app:1.0 .
Проверка нового образа
После завершения сборки вы можете убедиться, что новый образ существует, выведя список всех локальных образов Docker.
В результатах найдите my-flask-app с тегом 1.0.
docker images
Запуск контейнера приложения
Пора увидеть приложение в действии! Используйте docker run, чтобы создать и запустить контейнер из вашего образа.
Параметр -p 5000:5000 сопоставляет порт 5000 на вашем хост-компьютере с портом 5000 внутри контейнера. Параметр -d запускает контейнер в отсоединённом режиме (в фоновом режиме).
docker run -d -p 5000:5000 my-flask-app:1.0
Откройте в браузере адрес http://localhost:5000, чтобы увидеть сообщение «Hello from Docker! ».
Рекомендации по тегированию образов
Теги необходимы для управления разными версиями образов. Распространённая практика — использовать семантическое версионирование (например, 1.0.0, 2.1.5), а также тег latest.
Вы можете добавить к образу несколько тегов с помощью команды docker tag:
docker tag my-flask-app:1.0 my-flask-app:latest
Это позволяет обращаться к одному и тому же образу под разными именами, что делает его использование при развёртывании более гибким.
Быстрая проверка
Рассмотрите следующий Dockerfile и команду сборки:
# Dockerfile content
FROM alpine:latest
WORKDIR /app
COPY . .
CMD ["echo", "Hello"]
docker build -t my-app:v1 .Какое из следующих утверждений верно относительно команды docker build -t my-app:v1 .?
Итоги: пользовательские образы
Отличная работа! Вы научились:
- Подготавливать простое приложение к контейнеризации.
- Писать базовый
Dockerfileс использованием ключевых инструкций (FROM,WORKDIR,COPY,RUN,EXPOSE,CMD). - Собирать пользовательский образ Docker с помощью
docker build -t. - Проверять образ с помощью
docker images. - Запускать контейнер из пользовательского образа с помощью
docker run -p. - Понимать важность тегирования и версионирования образов.
Далее мы подробнее разберём структуру образов Docker, состоящих из слоёв, а также способы оптимизации их размера и времени сборки!
Часто задаваемые вопросы
Урок «Создание пользовательских образов Docker» бесплатный?
Да — полный текст урока «Создание пользовательских образов Docker» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Создание пользовательских образов Docker»?
Создайте первый пользовательский образ Docker для простого приложения, правильно добавив ему тег и версию. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Создание пользовательских образов Docker»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Понимание Dockerfile
- Создание пользовательских образов Docker
- Слои образа и оптимизация
- Многоэтапные сборки и уменьшение образов