Практические примеры написания Dockerfile

На список статей
Blog image

Защитите свои сайты с My-Sites-Guard.com!
Сервис обеспечивает надежную защиту ваших веб-ресурсов: мониторинг доступности сайта, контроль валидности сертификатов, а также возможность собирать и анализировать логи работы сервера. My-Sites-Guard.com — всё для сохранности вашего сайта и спокойствия в работе!

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

Основные инструкции Dockerfile

Перед тем как перейти к примерам, кратко вспомним основные инструкции Dockerfile:

  • FROM — определяет базовый образ, на основе которого будет создан новый.
  • RUN — выполняет команды внутри контейнера при сборке образа.
  • COPY — копирует файлы с локальной машины в контейнер.
  • WORKDIR — задаёт рабочую директорию для последующих команд.
  • CMD и ENTRYPOINT — определяют команды, которые выполняются при запуске контейнера.
  • EXPOSE — указывает порты, которые контейнер будет использовать для взаимодействия.

Теперь рассмотрим примеры Dockerfile для различных приложений.

Пример 1: Dockerfile для простого веб-сервера на Nginx

Этот пример создаст Docker-образ для веб-сервера на базе Nginx. В контейнере будет развернут статический сайт.

Dockerfile

# Используем официальный образ Nginx
FROM nginx:latest

# Копируем содержимое директории с сайта в директорию сервера
COPY ./html /usr/share/nginx/html

# Открываем порт 80 для доступа к веб-сайту
EXPOSE 80

Описание

  1. Мы используем официальный образ Nginx в качестве базового.
  2. Копируем файлы с веб-сайтом из директории ./html на локальной машине в директорию /usr/share/nginx/html внутри контейнера.
  3. Указываем, что контейнер будет слушать на порту 80.

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

Для создания образа выполните команду:

docker build -t my-nginx .

Запустите контейнер:

docker run -d -p 8080:80 my-nginx

Теперь сайт будет доступен по адресу http://localhost:8080.

Пример 2: Dockerfile для Node.js-приложения

В этом примере создадим Dockerfile для Node.js-приложения с установкой зависимостей и запуском приложения.

Dockerfile

# Базовый образ Node.js
FROM node:14

# Создаем рабочую директорию для приложения
WORKDIR /usr/src/app

# Копируем package.json и устанавливаем зависимости
COPY package*.json ./
RUN npm install

# Копируем исходный код приложения
COPY . .

# Открываем порт 3000
EXPOSE 3000

# Запускаем приложение
CMD ["npm", "start"]

Описание

  1. Используем образ Node.js версии 14 в качестве базового.
  2. Устанавливаем рабочую директорию /usr/src/app.
  3. Копируем файл package.json и устанавливаем зависимости с помощью npm install.
  4. Копируем весь исходный код в контейнер.
  5. Указываем, что приложение будет работать на порту 3000.
  6. Указываем команду для запуска приложения: npm start.

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

Для создания образа выполните:

docker build -t my-node-app .

Запуск контейнера:

docker run -d -p 3000:3000 my-node-app

Теперь Node.js-приложение будет доступно по адресу http://localhost:3000.

Пример 3: Dockerfile для Python-приложения на Flask

Создадим Dockerfile для Python-приложения на Flask с установкой зависимостей через pip.

Dockerfile

# Используем образ Python 3.8
FROM python:3.8-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем файл с зависимостями
COPY requirements.txt .

# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt

# Копируем все файлы проекта
COPY . .

# Открываем порт 5000
EXPOSE 5000

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

Описание

  1. Базовым образом является Python 3.8.
  2. Рабочая директория задаётся как /app.
  3. Устанавливаем зависимости из файла requirements.txt с помощью pip.
  4. Копируем исходный код приложения в контейнер.
  5. Открываем порт 5000 для Flask-приложения.
  6. Запускаем приложение командой python app.py.

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

Для создания образа выполните:

docker build -t my-flask-app .

Запуск контейнера:

docker run -d -p 5000:5000 my-flask-app

Теперь Flask-приложение будет доступно по адресу http://localhost:5000.

Пример 4: Dockerfile для приложения на PHP с Apache

Этот пример демонстрирует создание Dockerfile для PHP-приложения, работающего с Apache.

Dockerfile

# Используем образ PHP с Apache
FROM php:7.4-apache

# Копируем файлы приложения в директорию для Apache
COPY ./src /var/www/html/

# Открываем порт 80
EXPOSE 80

Описание

  1. Используем базовый образ PHP 7.4 с предустановленным Apache.
  2. Копируем файлы PHP-приложения в папку /var/www/html/ для работы Apache.
  3. Открываем порт 80 для веб-доступа.

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

Для создания образа выполните:

docker build -t my-php-app .

Запуск контейнера:

docker run -d -p 8080:80 my-php-app

Теперь ваше PHP-приложение будет доступно по адресу http://localhost:8080.

Пример 5: Dockerfile с использованием multistage-сборки

Multistage-сборка позволяет создавать небольшие и оптимизированные образы, разделяя процесс сборки и развертывания на несколько этапов.

Dockerfile

# Первый этап: сборка приложения
FROM node:14 AS build

# Рабочая директория
WORKDIR /app

# Установка зависимостей
COPY package*.json ./
RUN npm install

# Сборка приложения
COPY . .
RUN npm run build

# Второй этап: подготовка к развертыванию
FROM nginx:alpine

# Копируем собранное приложение в nginx
COPY --from=build /app/build /usr/share/nginx/html

# Открываем порт 80
EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

Описание

  1. В первом этапе используется образ Node.js для сборки приложения.
  2. После сборки приложение копируется во второй этап, где используется Nginx для раздачи статических файлов.
  3. В результате получается компактный образ, в котором содержится только собранное приложение и веб-сервер.

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

Сборка образа:

docker build -t my-multistage-app .

Запуск контейнера:

docker run -d -p 8080:80 my-multistage-app

Теперь ваше приложение будет доступно по адресу http://localhost:8080.

Заключение

Dockerfile — это мощный инструмент, который позволяет автоматизировать сборку Docker-образов и упрощает развертывание приложений. В этой статье мы рассмотрели несколько практических примеров написания Dockerfile для различных типов приложений: от простого веб-сервера Nginx до более сложных приложений на Node.js, Python и PHP. Эти примеры помогут вам понять, как правильно строить и настраивать Docker-образы для ваших проектов.

Комментарии

Пока нет комментариев

Добавить комментарий