Создание контейнеров Docker с помощью пользовательского Dockerfile

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

Введение

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

Введение в контейнеры Docker

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

Что такое Docker?

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

Преимущества контейнеров Docker

  1. Переносимость: Контейнеры Docker могут работать одинаково на любой среде, от локальной машины разработчика до серверов производства, гарантируя, что приложение будет вести себя одинаково независимо от базовой инфраструктуры.
  2. Масштабируемость: Docker упрощает масштабирование приложений вверх или вниз по мере необходимости, добавляя или удаляя контейнеры.
  3. Эффективность: Контейнеры Docker лёгкие и используют ядро операционной системы хоста, что делает их более эффективными, чем традиционные виртуальные машины.
  4. Согласованность: Docker гарантирует, что приложение будет работать одинаково от этапа разработки до этапа производства, устраняя проблему «работает на моей машине».

Архитектура Docker

Docker использует архитектуру клиент-сервер, где клиент Docker взаимодействует с демоном Docker, который отвечает за создание, запуск и распространение контейнеров Docker.

graph LD
    subgraph Docker Architecture
        client[Docker Client]
        daemon[Docker Daemon]
        client -- API --> daemon
        daemon -- Images --> registry[Docker Registry]
    end

Контейнеры Docker против виртуальных машин

Хотя контейнеры и виртуальные машины (ВМ) служат для запуска приложений в изолированных средах, существуют некоторые ключевые различия:

Характеристика Контейнеры Docker Виртуальные машины
Изоляция Контейнеры используют ядро операционной системы хоста, обеспечивая более лёгкую изоляцию. ВМ имеют собственную полную операционную систему, обеспечивая более сильную изоляцию.
Использование ресурсов Контейнеры более эффективны, так как они используют ресурсы хоста и не нуждаются в запуске полной операционной системы. ВМ требуют больше ресурсов, так как каждая ВМ имеет свою собственную операционную систему.
Время запуска Контейнеры могут запускаться за секунды, так как им не нужно загружать полную операционную систему. ВМ могут загружаться несколько минут, так как им нужно загрузить всю операционную систему.

Начало работы с Docker

Для начала работы с Docker вам необходимо установить движок Docker на вашу систему. Вы можете загрузить и установить Docker с официального сайта Docker (https://www.docker.com/get-started). После установки вы можете начать использовать Docker для создания, развертывания и запуска своих приложений.

Создание пользовательского образа Docker

Создание пользовательского образа Docker — это процесс построения нового образа на основе существующего базового образа и последующего добавления собственных настроек, таких как код приложения, зависимости и конфигурации.

Dockerfile

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

Вот пример Dockerfile:

## Использование официального базового образа Ubuntu 22.04
FROM ubuntu:22.04

## Обновление индекса пакетов и установка необходимых пакетов
RUN apt-get update && apt-get install -y \
  git \
  python3 \
  python3-pip \
  && rm -rf /var/lib/apt/lists/*

## Установка рабочей директории
WORKDIR /app

## Копирование кода приложения
COPY . /app

## Установка зависимостей Python
RUN pip3 install --no-cache-dir -r requirements.txt

## Открытие порта, на котором будет работать приложение
EXPOSE 8080

## Установка команды для запуска приложения
CMD ["python3", "app.py"]

Построение пользовательского образа

Чтобы построить пользовательский образ Docker с помощью Dockerfile, выполните следующие шаги:

  1. Создайте Dockerfile в каталоге вашего проекта.

  2. Откройте терминал и перейдите в каталог проекта.

  3. Запустите следующую команду для построения образа:

    docker build -t my-custom-image .
    

    Эта команда построит новый образ Docker с именем "my-custom-image" с использованием инструкций из Dockerfile.

Загрузка образа в реестр

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

  1. Войдите в реестр Docker:

    docker login
    
  2. Пометьте образ URL-адресом реестра и вашим именем пользователя:

    docker tag my-custom-image username/my-custom-image:latest
    
  3. Загрузите образ в реестр:

    docker push username/my-custom-image:latest
    

Теперь ваш пользовательский образ Docker доступен в реестре и может быть скачан и использован другими разработчиками или развернут в производственной среде.

Развертывание и управление приложениями Docker

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

Развертывание контейнеров Docker

Для развертывания контейнера Docker можно использовать команду docker run. Эта команда запускает новый контейнер на основе указанного образа и позволяет настроить различные параметры, такие как отображение портов, переменные окружения и монтирование томов.

Вот пример запуска контейнера на основе образа "my-custom-image":

docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image

Эта команда:

  • Запустит контейнер в отсоединенном режиме (-d)
  • Отобразит порт 8080 контейнера на порт 8080 хоста (-p 8080:8080)
  • Установит переменную окружения DB_HOST со значением 192.168.1.100 (-e DB_HOST=192.168.1.100)
  • Смонтует директорию хоста /data в директорию контейнера /app/data (-v /data:/app/data)
  • Использует образ "my-custom-image" для запуска контейнера

Управление контейнерами Docker

Docker предоставляет несколько команд для управления запущенными контейнерами:

  • docker ps: Список всех запущенных контейнеров
  • docker stop <container_id>: Остановка запущенного контейнера
  • docker start <container_id>: Запуск остановленного контейнера
  • docker logs <container_id>: Просмотр логов контейнера
  • docker exec -it <container_id> /bin/bash: Доступ к оболочке запущенного контейнера

Docker Compose

Docker Compose — это инструмент, позволяющий определять и управлять многоконтейнерными приложениями Docker. Он использует файл YAML для настройки служб, сетей и томов вашего приложения.

Вот пример файла docker-compose.yml:

version: "3"
services:
  web:
    build: .
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=database
    depends_on:
      - database
  database:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=myapp
      - MYSQL_ROOT_PASSWORD=secret
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Этот файл Compose определяет две службы: веб-службу и базу данных. Веб-служба строится из текущей директории, а служба базы данных использует официальный образ MySQL 5.7. Службы связаны через сеть, а данные службы базы данных сохраняются в именованном томе.

Для развертывания этого приложения можно запустить docker-compose up -d в той же директории, что и файл docker-compose.yml.

Масштабирование приложений Docker

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

docker-compose up -d --scale web=3

Эта команда запустит три экземпляра службы "web".

Мониторинг и логирование

Docker предоставляет встроенные инструменты для мониторинга и логирования ваших контейнеров. Вы можете использовать команду docker stats для просмотра использования ресурсов в реальном времени и команду docker logs для доступа к логам контейнера.

Кроме того, вы можете интегрировать ваши приложения Docker с внешними инструментами мониторинга и логирования, такими как Prometheus, Grafana и Elasticsearch, чтобы получить более продвинутые возможности и информацию.

Резюме

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