Знакомство с Docker: установка движка и CLI
Дата публикации: 24.04.2026

Знакомство с Docker: установка движка и CLI

ccb9a536


Docker для веб-мастера и арбитражника: Установка движка и работа с CLI

Вы когда-нибудь представляли, как было бы здорово упаковать весь свой проект — с кодом, базами данных, настройками сервера — в один переносной контейнер, который будет работать одинаково на вашем ноутбуке, на хостинге и на облачном сервере? Без головной боли от конфликтов версий, зависимостей и настроек?

Это именно то, что умеет Docker — инструмент, который революционизировал развёртывание приложений. Для веб-мастера это значит: быстрый запуск сайтов в изолированной среде. Для арбитражника — возможность разворачивать трекер, прокси-сервер или парсер за минуты, не боясь, что он "сломает" основную систему.

В этом уроке вы: ✅ Установите Docker Engine (сердце Docker) на Linux/Windows/Mac. ✅ Поймёте, как работает клиентская утилита docker (CLI) и основные команды. ✅ Узнаете, почему Docker безопаснее виртуальных машин и как он экономит ресурсы. ✅ На практике запустите первый контейнер с Nginx (веб-сервером).


1. Почему Docker, а не виртуальная машина (VM)?

Давайте разберёмся, чем Docker отличается от привычных виртуальных машин (VMware, VirtualBox).

Характеристика Виртуальная машина (VM) Docker (контейнеры)
Изоляция Полная (эмулирует железо) Легковесная (использует ядро хоста)
Запуск Минуты (загрузка ОС) Секунды (нет загрузки ОС)
Ресурсы Тяжёлая (GB RAM, виртуальный диск) Лёгкая (MB RAM, слои файловой системы)
Переносимость Сложно (нужен образ VM) Просто (один файл-образ image)
Пример использования Тестирование Windows на Mac Запуск базы данных PostgreSQL

Аналогия:

  • VM — как отдельный компьютер в компьютере (со своей операционной системой, драйверами, железом).
  • Docker — как отдельная программа в песчанице (использует ресурсы хоста, но изолирована от других программ).

Для веб-проектов и арбитражных инструментов Docker выгоднее:

  • Быстрота: Запуск контейнера с PHP + MySQL занимает 2 секунды (против 2 минут для VM).
  • Экономия: На одном сервере можно запустить десятки контейнеров вместо 2-3 VM.
  • Безопасность: Каждый контейнер изолирован (если взломают один, остальные не пострадают).

2. Установка Docker Engine

Docker работает на Linux, Windows 10/11 Pro/Enterprise, macOS. Мы рассмотрим установку на все платформы.

2.1. Установка на Linux (Ubuntu/Debian/CentOS)

Шаг 1: Обновите пакеты

sudo apt update && sudo apt upgrade -y  # Для Ubuntu/Debian
sudo yum update -y                      # Для CentOS/RHEL

Шаг 2: Установите зависимости

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common  # Ubuntu/Debian
sudo yum install -y yum-utils curl      # CentOS/RHEL

Шаг 3: Добавьте официальный репозиторий Docker

curl -fsSL https://get.docker.com | sh

Эта команда автоматически:

  1. Скачает и установит Docker Engine.
  2. Добавит вашего пользователя в группу docker (чтобы не писать sudo перед каждой командой).

Шаг 4: Проверьте установку

docker --version

Если видите что-то вроде Docker version 24.0.7, build afdd53b, значит всё работает.

Важно для Linux: После установки перезагрузите сервер или выполните:

sudo usermod -aG docker $USER
newgrp docker

Это даст вашему пользователю права на работу с Docker без sudo.


2.2. Установка на Windows/macOS

Windows 10/11 Pro/Enterprise

  1. Скачайте Docker Desktop с официального сайта.
  2. Установите с настройками по умолчанию.
  3. После установки перезагрузите ПК.
  4. Запустите Docker Desktop из меню Пуск (в трее появится иконка кита 🐳).

macOS

  1. Скачайте Docker Desktop для Mac с Intel или Mac с Apple Silicon (M1/M2).
  2. Перетащите Docker в папку Applications.
  3. Запустите из Launchpad.

Примечание для Windows/macOS: Docker Desktop включает виртуальную машину с Linux (потому что Docker изначально работает только на Linux). Это нормально — она легковесная и не тормозит систему.


3. Знакомство с Docker CLI (командной строкой)

Теперь, когда Docker установлен, давайте разберёмся, как им пользоваться. Все команды выполняются в терминале (Linux/macOS) или PowerShell/Command Prompt (Windows).

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

Команда Описание Пример
docker --version Показывает версию Docker docker --version
docker pull Скачивает образ (шаблон контейнера) из реестра docker pull nginx:latest
docker run Запускает контейнер из образа docker run -d -p 80:80 nginx
docker ps Показывает работающие контейнеры docker ps -a (все контейнеры)
docker stop Останавливает контейнер docker stop my_container
docker rm Удаляет контейнер docker rm my_container
docker images Показывает все скачанные образы docker images
docker rmi Удаляет образ docker rmi nginx
docker logs Показывает логи (вывод) контейнера docker logs my_container
docker exec Выполняет команду внутри работающего контейнера docker exec -it my_container bash

Что такое образ (image) и контейнер (container)?

  • Образ — это шаблон (например, Ubuntu с установленным Nginx).
  • Контейнер — это запущенный экземпляр образа (как программа, открытая на вашем компьютере).

3.2. Запускаем первый контейнер: Nginx

Давайте на практике развернём веб-сервер Nginx в Docker.

Шаг 1: Скачаем образ Nginx

docker pull nginx:latest
  • nginx — название образа.
  • latest — тег (версия). Если не указать, будет скачан latest.

Шаг 2: Запустим контейнер

docker run -d -p 8080:80 --name my_nginx nginx

Разберём флаги:

  • -d — запуск в фоновом режиме (detached).
  • -p 8080:80 — пробрасываем порт 8080 хоста на порт 80 контейнера (Nginx по умолчанию слушает 80-й порт).
  • --name my_nginx — даём контейнеру имя my_nginx.
  • nginx — образ, из которого создаём контейнер.

Шаг 3: Проверяем работу

  1. Откройте браузер и перейдите по адресу:

    http://localhost:8080

    Вы должны увидеть стандартную страницу Nginx ("Welcome to nginx!").

  2. Посмотрим, какие контейнеры работают:

    docker ps

    Вывод должен быть примерно таким:

    CONTAINER ID   IMAGE    COMMAND                  CREATED         STATUS         PORTS                  NAMES
    a1b2c3d4e5f6   nginx    "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   0.0.0.0:8080->80/tcp   my_nginx

Шаг 4: Останавливаем и удаляем контейнер

docker stop my_nginx   # Останавливаем
docker rm my_nginx     # Удаляем

4. Как Docker экономит ресурсы: слои и кэш

Одна из ключевых фишек Docker — эффективное использование дискового пространства благодаря слоям (layers).

Как работают слои?

Каждый образ состоит из слоёв, которые накладываются друг на друга. Например, образ nginx может выглядеть так:

  1. Базовый слой: Ubuntu 22.04 (основа).
  2. Слой 2: Установленные пакеты (curl, wget).
  3. Слой 3: Установленный Nginx.
  4. Слой 4: Конфигурационные файлы Nginx.

Когда вы изменяете контейнер (например, добавляете файл), Docker создаёт новый слой поверх существующих. Это позволяет:

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

Пример: создание своего образа

Допустим, вы хотите создать образ с Nginx + вашим сайтом.

  1. Создайте файл Dockerfile (без расширения):

    # Берём официальный образ Nginx
    FROM nginx:latest
    
    # Копируем файлы сайта в контейнер
    COPY ./mywebsite /usr/share/nginx/html
  2. Соберите образ:

    docker build -t my_nginx_site .
    • -t my_nginx_site — даём образу имя my_nginx_site.
    • . — путь к папке с Dockerfile.
  3. Запустите:

    docker run -d -p 8080:80 --name my_site my_nginx_site

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


5. Безопасность Docker: что нужно знать

Docker изолирует процессы, но это не делает его абсолютно безопасным. Вот ключевые моменты:

5.1. Проблемы безопасности

Уязвимость Описание Как защититься
Root-доступ в контейнере По умолчанию контейнеры запускаются от root (суперпользователя). Используйте --user или создавайте пользователя в Dockerfile.
Устаревшие образы Образ с уязвимостями (например, старый Nginx) может быть взломан. Обновляйте образы (docker pull nginx:latest).
Открытые порты Если пробросить порт на хост (-p 80:80), атакующий может получить доступ. Используйте фаервол (ufw на Linux).
Docker Daemon Если кто-то получит доступ к Docker API, он сможет запускать любые контейнеры. Настраивайте авторизацию для Docker API.

5.2. Базовые правила безопасности

  1. Не запускайте контейнеры от root без необходимости:
    FROM nginx
    USER 1000  # Запуск от пользователя с UID 1000
  2. Обновляйте образы регулярно:
    docker pull nginx:latest
  3. Ограничивайте ресурсы (CPU, RAM):
    docker run -d --memory=512m --cpus=1 nginx
  4. Используйте .dockerignore, чтобы не копировать ненужные файлы (например, .git, .env).

Практика для закрепления

Теперь ваша очередь попрактиковаться! Выполните эти задания, чтобы закрепить материал.

Упражнение 1: Установка и проверка Docker

  1. Установите Docker на свою систему (Linux/Windows/macOS).
  2. Выполните команду docker --version и пришлите скриншот результата.

Упражнение 2: Работа с контейнерами

  1. Скачайте образ alpine (лёгкий Linux-дистрибутив):

    docker pull alpine
  2. Запустите контейнер в интерактивном режиме:

    docker run -it alpine sh
    • Вы оказались внутри контейнера! Выполните команду ls и посмотрите файлы.
    • Выйдите из контейнера: exit.
  3. Посмотрите список всех контейнеров (включая остановленные):

    docker ps -a
  4. Удалите остановленный контейнер.

Упражнение 3: Запуск веб-сервера

  1. Запустите контейнер с Apache (образ httpd), пробросив порт 8081 на хост:
    docker run -d -p 8081:80 --name my_apache httpd
  2. Откройте в браузере http://localhost:8081. Что вы видите?
  3. Остановите и удалите контейнер.

Упражнение 4: Создание своего образа

  1. Создайте папку myapp и внутри неё:
    • Файл index.html с любым текстом (например, <h1>Hello Docker!</h1>).
    • Файл Dockerfile со следующим содержимым:
      FROM nginx:alpine
      COPY index.html /usr/share/nginx/html
  2. Соберите образ:
    docker build -t myapp .
  3. Запустите контейнер и проверьте работу в браузере.

Вопрос для размышления

  • Почему Docker быстрее виртуальных машин? В чём ключевое отличие в архитектуре?

Итоги урока

  • Вы установили Docker Engine и научились работать с CLI.
  • Разобрались, чем контейнеры отличаются от виртуальных машин.
  • Запустили первый контейнер с Nginx и даже создали свой образ.
  • Узнали о безопасности Docker и базовых мерах защиты.

В следующем уроке мы погрузимся глубже:

  • Docker Compose — как запускать несколько контейнеров (например, Nginx + MySQL + PHP) одной командой.
  • Docker Networks — как контейнеры общаются между собой.
  • Volumes — как сохранять данные между перезапусками контейнера.

Если остались вопросы — задавайте их в комментариях! 🚀


Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно
рейтинг хостингов 2026 Быстрые VDS серверы