uDocs

Docker для новичков

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

Docker для новичков

Что такое Docker?

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

Ключевых преимущества

  • Согласованность: Приложение будет работать одинаково в разработке, тестировании и продакшене.
  • Изоляция: Контейнеры изолированы друг от друга и от основной операционной системы, что повышает безопасность.
  • Портативность: Вы можете легко переносить приложение между разными средами (разные операционные системы, облачные платформы и т.д.).
  • Ускорение разработки: С Docker проще настроить и воспроизвести среду для разработки, что экономит время и силы.

Docker Compose

Это инструмент, который позволяет вам описывать и управлять несколькими Docker контейнерами одновременно. Представьте, что приложение состоит из веб-сервера, базы данных и, возможно, еще нескольких сервисов. Docker Compose позволяет вам описать эту структуру в одном файле (docker-compose.yml) и, используя один простой командный вызов, запустить все контейнеры, создав и запустив их взаимосвязь.

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

Установка

В репозиториях большинства дистрибутивов Linux нет Docker и Docker Compose или содержатся не актуальные версии. Проще всего установить их с помощью официального скрипта.

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker ${USER}
sudo chown root:docker /var/run/docker.sock
exec su -l $USER

Если при запуске контейнера все равно получаете ошибку permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: ... dial unix /var/run/docker.sock: connect: permission denied

попробуйте еще выполнить эту команду: sudo chmod 666 /var/run/docker.sock

Проверка версий

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

docker -v
> Docker version 28.0.4, build b8034c0
docker compose version
> Docker Compose version v2.34.0

Тестовый docker-compose.yml

Создайте новый файл

mkdir dashlit && cd dashlit && nano docker-compose.yml
services:
  app:
    container_name: dashlit-app
    image: ghcr.io/codewec/dashlit:latest
    restart: unless-stopped
    environment:
      ORIGIN: '${ORIGIN:-http://localhost:3000}'different
    ports:
      - '3000:3000'
    volumes:
      - ./data:/app/data

Сохраните, выйдите из редактора nano (ctrl + x) и запустите

docker compose up

Через несколько секунд попробуйте в браузере зайти по адресу: http://ip:3000, указав вместо ip ip адрес компьютера, на котором запускаете Docker. Для примера взято простое веб-приложение для организации дашборда DashLit.

Типичные примеры

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

Обновление образов и перезапуск контейнеров

docker compose pull && docker compose up -d --force-recreate

или

docker compose down && docker compose pull && docker compose up -d

Обновление одного сервиса

docker compose pull <service_name> && docker compose up -d --force-recreate <service_name>

Просмотр запущенных контейнеров и логов

docker compose ps
docker compose logs

Очистка кэша

docker system prune

Основные команды Docker

  • docker ps — Показывает список запущенных контейнеров.
  • docker ps -a – показывает все контейнеры, включая остановленные.
  • docker images — Показывает список доступных образов Docker.
    • docker image prune -a – удаляет все неиспользуемые образы.
  • docker run [OPTIONS] IMAGE [COMMAND] [ARG...] — Запускает новый контейнер из образа.
    • docker run -d -p 8080:80 nginx – запускает контейнер nginx в фоновом режиме и прослушивает порт 8080 на хосте.
    • docker run --name mycontainer -d -p 8080:80 nginx — запускает контейнер с именем «mycontainer» и прослушивает порт 8080.
  • docker stop [CONTAINER ID или NAME] — Останавливает запущенный контейнер.
    • docker stop mycontainer
  • docker start [CONTAINER ID или NAME] — Запускает остановленный контейнер.
    • docker start mycontainer
  • docker restart [CONTAINER ID или NAME] — Перезапускает запущенный контейнер.
  • docker rm [CONTAINER ID или NAME] — Удаляет остановленный контейнер.
    • docker rm mycontainer
  • docker exec -it [CONTAINER ID или NAME] bash — Запускает оболочку в запущенном контейнере. Позволяет выполнять команды внутри контейнера.
  • docker system prune — Удаляет все неиспользуемые образы и другие ресурсы. Очень полезно накапливается большой кэш старых версий образов.

Основные команды Docker Compose

  • docker compose pull — загружает (скачивает) образы, указанные в файле docker-compose.yml, из реестра (например, Docker Hub) на локальную машину, но не запускает контейнеры.
  • docker compose up -d — Создает и запускает контейнеры, определенные в файле docker-compose.yml в режиме detached (в фоновом режиме).
  • docker compose down — Останавливает и удаляет контейнеры, сети и тома, определенные в файле docker-compose.yml.
  • docker compose ps — Показывает список запущенных сервисов.
  • docker compose logs — Показывает логи сервиса.
  • docker compose stop — Останавливает запущенные сервисы.
  • docker compose start — Запускает сервисы, определенные в файле docker-compose.yml.

Рекомендуемые записи

Операционная система

Операционная система

Linux — лучший выбор для серверов благодаря его надёжности, гибкости и открытому коду.
Готовые решения для домашнего сервера

Готовые решения для домашнего сервера

Краткий обзор готовых решений для домашнего сервера.
Выбор оборудования для домашнего сервера

Выбор оборудования для домашнего сервера

Рассмотрим варианты от одноплатных компьютеров до VPS – что подойдет именно вам?
Основы работы в Linux

Основы работы в Linux

Делаем первые шаги в Linux: учимся ориентироваться в системе, работать с терминалом и управлять программами. Простые команды, базовые понятия и полезные советы для комфортного старта.