Docker и docker-compose: основы и примеры

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Введение в Docker и docker-compose

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

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

Кинга Идем в IT: пошаговый план для смены профессии

Установка и настройка Docker

Установка Docker

Для установки Docker на вашу систему следуйте официальной документации для вашей операционной системы:

Процесс установки может немного отличаться в зависимости от операционной системы, но в целом он достаточно прост и хорошо документирован. На Windows и macOS установка включает Docker Desktop, который предоставляет удобный графический интерфейс для управления Docker-контейнерами. На Linux установка может потребовать выполнения нескольких команд в терминале, но это также несложно.

Проверка установки

После установки Docker, убедитесь, что он работает корректно, выполнив команду:

sh
Скопировать код
docker --version

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

Установка docker-compose

docker-compose можно установить с помощью менеджера пакетов вашей операционной системы или скачать бинарный файл с официального сайта:

  • Windows и macOS: docker-compose устанавливается вместе с Docker Desktop.
  • Linux: Следуйте инструкциям на официальном сайте.

Проверьте установку, выполнив команду:

sh
Скопировать код
docker-compose --version

Вы должны увидеть версию docker-compose, установленную на вашем компьютере. Это подтверждает, что docker-compose установлен и готов к использованию. Если команда не работает, проверьте, правильно ли вы следовали инструкциям по установке и не пропустили ли какой-либо шаг.

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

Создание контейнера

Для создания контейнера используется команда docker run. Например, чтобы запустить контейнер с Nginx, выполните:

sh
Скопировать код
docker run -d -p 80:80 nginx

Эта команда скачает образ Nginx (если он еще не скачан), запустит контейнер в фоновом режиме (-d) и пробросит порт 80 на ваш локальный порт 80 (-p 80:80). Это позволяет вам получить доступ к веб-серверу Nginx через ваш браузер по адресу http://localhost. Вы можете использовать другие образы и настраивать порты и параметры в зависимости от ваших нужд.

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

  • Список запущенных контейнеров:

    sh
    Скопировать код
    docker ps

    Эта команда выводит список всех запущенных контейнеров, включая их идентификаторы, имена, образы и статус. Это полезно для мониторинга состояния ваших контейнеров и управления ими.

  • Остановка контейнера:

    sh
    Скопировать код
    docker stop <container_id>

    Эта команда останавливает контейнер с указанным идентификатором. Вы можете использовать идентификатор контейнера, полученный из команды docker ps. Остановка контейнера позволяет освободить ресурсы, которые он использует.

  • Удаление контейнера:

    sh
    Скопировать код
    docker rm <container_id>

    Эта команда удаляет остановленный контейнер с указанным идентификатором. Удаление контейнера освобождает дисковое пространство и позволяет вам управлять количеством контейнеров на вашем компьютере.

  • Список всех контейнеров (включая остановленные):

    sh
    Скопировать код
    docker ps -a

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

Создание и использование docker-compose.yml

Структура файла docker-compose.yml

Файл docker-compose.yml используется для определения конфигурации всех сервисов вашего приложения. Пример файла для простого веб-приложения на Nginx и Redis:

yaml
Скопировать код
version: '3'
services:
  web:
    image: nginx
    ports:
      – "80:80"
  redis:
    image: redis

В этом примере определены два сервиса: web и redis. Сервис web использует образ Nginx и пробрасывает порт 80 на локальный порт 80. Сервис redis использует образ Redis. Вы можете добавлять дополнительные сервисы и настраивать их параметры в зависимости от ваших нужд.

Запуск сервисов

Для запуска всех сервисов, определенных в docker-compose.yml, выполните команду:

sh
Скопировать код
docker-compose up

Эта команда запустит все сервисы в текущем терминале и выведет их логи. Для запуска в фоновом режиме добавьте флаг -d:

sh
Скопировать код
docker-compose up -d

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

Остановка и удаление сервисов

  • Остановка всех сервисов:

    sh
    Скопировать код
    docker-compose down

    Эта команда останавливает все сервисы, определенные в docker-compose.yml, и удаляет их контейнеры. Это полезно для освобождения ресурсов и завершения работы всех сервисов.

  • Удаление всех контейнеров, сетей и томов, созданных docker-compose:

    sh
    Скопировать код
    docker-compose down --volumes

    Эта команда дополнительно удаляет все тома, созданные docker-compose. Это полезно для полного удаления всех данных, связанных с вашими сервисами.

Примеры использования Docker и docker-compose в реальных проектах

Пример 1: Веб-приложение на Node.js и MongoDB

Создадим файл docker-compose.yml для веб-приложения на Node.js с базой данных MongoDB:

yaml
Скопировать код
version: '3'
services:
  web:
    image: node:14
    volumes:
      – .:/app
    working_dir: /app
    command: npm start
    ports:
      – "3000:3000"
    depends_on:
      – mongo
  mongo:
    image: mongo
    ports:
      – "27017:27017"

В этом примере определены два сервиса: web и mongo. Сервис web использует образ Node.js версии 14, монтирует текущую директорию в контейнер и запускает команду npm start. Сервис mongo использует образ MongoDB и пробрасывает порт 27017 на локальный порт 27017. Сервис web зависит от сервиса mongo, что означает, что MongoDB будет запущен перед запуском веб-приложения.

Пример 2: Использование Docker в GitHub Actions

Для автоматизации CI/CD процессов можно использовать Docker в GitHub Actions. Пример workflow для сборки и тестирования приложения:

yaml
Скопировать код
name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    – name: Checkout code
      uses: actions/checkout@v2

    – name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    – name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        context: .
        push: true
        tags: user/app:latest

    – name: Run tests
      run: docker run user/app:latest npm test

Этот workflow запускается при каждом пуше в репозиторий. Он выполняет следующие шаги: проверяет код, настраивает Docker Buildx, собирает и пушит Docker-образ, а затем запускает тесты внутри контейнера. Это позволяет автоматизировать процесс сборки и тестирования вашего приложения, обеспечивая стабильность и предсказуемость.

Пример 3: Многоконтейнерное приложение с Nginx, Flask и PostgreSQL

Создадим файл docker-compose.yml для многоконтейнерного приложения с Nginx, Flask и PostgreSQL:

yaml
Скопировать код
version: '3'
services:
  web:
    image: flask-app
    build: ./web
    ports:
      – "5000:5000"
    depends_on:
      – db
  db:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase
  nginx:
    image: nginx
    ports:
      – "80:80"
    volumes:
      – ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      – web

В этом примере определены три сервиса: web, db и nginx. Сервис web использует образ Flask-приложения и пробрасывает порт 5000 на локальный порт 5000. Сервис db использует образ PostgreSQL и настраивает параметры базы данных через переменные окружения. Сервис nginx использует образ Nginx и пробрасывает порт 80 на локальный порт 80. Сервис nginx зависит от сервиса web, что означает, что Flask-приложение будет запущено перед запуском Nginx.

Эти примеры помогут вам начать работу с Docker и docker-compose. Надеюсь, они будут полезны для ваших проектов! 🚀

Читайте также