Знакомство с Docker: установка движка и CLI
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
Эта команда автоматически:
- Скачает и установит Docker Engine.
- Добавит вашего пользователя в группу
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
- Скачайте Docker Desktop с официального сайта.
- Установите с настройками по умолчанию.
- После установки перезагрузите ПК.
- Запустите Docker Desktop из меню Пуск (в трее появится иконка кита 🐳).
macOS
- Скачайте Docker Desktop для Mac с Intel или Mac с Apple Silicon (M1/M2).
- Перетащите Docker в папку
Applications. - Запустите из 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: Проверяем работу
-
Откройте браузер и перейдите по адресу:
http://localhost:8080Вы должны увидеть стандартную страницу Nginx ("Welcome to nginx!").
-
Посмотрим, какие контейнеры работают:
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 может выглядеть так:
- Базовый слой: Ubuntu 22.04 (основа).
- Слой 2: Установленные пакеты (curl, wget).
- Слой 3: Установленный Nginx.
- Слой 4: Конфигурационные файлы Nginx.
Когда вы изменяете контейнер (например, добавляете файл), Docker создаёт новый слой поверх существующих. Это позволяет:
- Быстро создавать новые образы на основе старых.
- Экономить место, так как одинаковые слои используются несколькими образами.
Пример: создание своего образа
Допустим, вы хотите создать образ с Nginx + вашим сайтом.
-
Создайте файл
Dockerfile(без расширения):# Берём официальный образ Nginx FROM nginx:latest # Копируем файлы сайта в контейнер COPY ./mywebsite /usr/share/nginx/html -
Соберите образ:
docker build -t my_nginx_site .-t my_nginx_site— даём образу имяmy_nginx_site..— путь к папке сDockerfile.
-
Запустите:
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. Базовые правила безопасности
- Не запускайте контейнеры от root без необходимости:
FROM nginx USER 1000 # Запуск от пользователя с UID 1000 - Обновляйте образы регулярно:
docker pull nginx:latest - Ограничивайте ресурсы (CPU, RAM):
docker run -d --memory=512m --cpus=1 nginx - Используйте
.dockerignore, чтобы не копировать ненужные файлы (например,.git,.env).
Практика для закрепления
Теперь ваша очередь попрактиковаться! Выполните эти задания, чтобы закрепить материал.
Упражнение 1: Установка и проверка Docker
- Установите Docker на свою систему (Linux/Windows/macOS).
- Выполните команду
docker --versionи пришлите скриншот результата.
Упражнение 2: Работа с контейнерами
-
Скачайте образ
alpine(лёгкий Linux-дистрибутив):docker pull alpine -
Запустите контейнер в интерактивном режиме:
docker run -it alpine sh- Вы оказались внутри контейнера! Выполните команду
lsи посмотрите файлы. - Выйдите из контейнера:
exit.
- Вы оказались внутри контейнера! Выполните команду
-
Посмотрите список всех контейнеров (включая остановленные):
docker ps -a -
Удалите остановленный контейнер.
Упражнение 3: Запуск веб-сервера
- Запустите контейнер с Apache (образ
httpd), пробросив порт8081на хост:docker run -d -p 8081:80 --name my_apache httpd - Откройте в браузере
http://localhost:8081. Что вы видите? - Остановите и удалите контейнер.
Упражнение 4: Создание своего образа
- Создайте папку
myappи внутри неё:- Файл
index.htmlс любым текстом (например,<h1>Hello Docker!</h1>). - Файл
Dockerfileсо следующим содержимым:FROM nginx:alpine COPY index.html /usr/share/nginx/html
- Файл
- Соберите образ:
docker build -t myapp . - Запустите контейнер и проверьте работу в браузере.
Вопрос для размышления
- Почему Docker быстрее виртуальных машин? В чём ключевое отличие в архитектуре?
Итоги урока
- Вы установили Docker Engine и научились работать с CLI.
- Разобрались, чем контейнеры отличаются от виртуальных машин.
- Запустили первый контейнер с Nginx и даже создали свой образ.
- Узнали о безопасности Docker и базовых мерах защиты.
В следующем уроке мы погрузимся глубже:
- Docker Compose — как запускать несколько контейнеров (например, Nginx + MySQL + PHP) одной командой.
- Docker Networks — как контейнеры общаются между собой.
- Volumes — как сохранять данные между перезапусками контейнера.
Если остались вопросы — задавайте их в комментариях! 🚀
Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно