Docker I Kontejnery

Docker и контейнеры: Практическое руководство для разработчиков


Привет! Если ты читаешь это, скорее всего, ты устал от фразы «у меня на машине работает». Ты — разработчик ПО, который хочет упаковать своё приложение со всеми зависимостями в аккуратный «чемодан», чтобы оно запускалось одинаково где угодно: на твоём ноутбуке, на сервере коллеги или в облаке. Этот «чемодан» и есть контейнер, а Docker — самый популярный инструмент для работы с ними.


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


Что тебе понадобится для старта


Прежде чем перейти к шагам, убедись, что у тебя есть следующее. Это наш фундамент.


  1. Базовые навыки командной строки (терминала). Не нужно быть гуру, но умение перемещаться по папкам и запускать команды обязательно.

  2. Установленный Docker. Перейди на официальный сайт Docker и скачай Docker Desktop для своей операционной системы (Windows, macOS, Linux). Установка интуитивно понятна — просто следуй инструкциям мастера.

  3. Проверка установки. Открой терминал и выполни команду:

```bash
docker --version
```
Если ты видишь номер версии (например, `Docker version 20.10.12`), значит, всё установлено корректно. Также проверь:
```bash
docker run hello-world
```
Эта команда скачает тестовый образ и запустит контейнер, который выведет приветственное сообщение. Если ты его видишь — Docker работает!
  1. Твой проект. Любое простое приложение, например, на Python (Flask/Django), Node.js или даже статический HTML-сайт. Мы будем использовать его для примера.


Готов? Отлично. Теперь перейдём к самому интересному.

Шаг 1: Создаём Dockerfile — инструкцию по сборке


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


Создай в корне своего проекта файл с именем `Dockerfile` и открой его в редакторе кода.


Пример для простого веб-приложения на Python (Flask):


```dockerfile

1. Базовый образ. Берём официальный легковесный образ Python.


FROM python:3.9-slim


2. Устанавливаем рабочую директорию внутри контейнера.


WORKDIR /app

3. Копируем файл с зависимостями в контейнер.


COPY requirements.txt .

4. Устанавливаем зависимости.


RUN pip install --no-cache-dir -r requirements.txt

5. Копируем весь остальной код проекта в рабочую директорию.


COPY . .

6. Объявляем порт, который будет использовать приложение.


EXPOSE 5000

7. Команда для запуска приложения при старте контейнера.


CMD ["python", "app.py"]
```

Что здесь происходит? Мы начинаем с готового образа (`python:3.9-slim`), настраиваем окружение, копируем код и указываем, как запустить приложение. Это основа 90% Dockerfile.


Шаг 2: Собираем Docker-образ


Теперь, имея инструкцию, нужно создать сам образ. В терминале, находясь в папке с твоим `Dockerfile`, выполни команду:


```bash
docker build -t my-python-app .
```


`docker build` — команда сборки.
`-t my-python-app` — флаг `-t` задаёт имя и тег твоего образа (здесь `my-python-app` — имя, тег по умолчанию `latest`).
`.` — точка в конце указывает на текущую директорию как на контекст сборки (где искать `Dockerfile` и файлы для `COPY`).


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


Проверь, что образ создался:
```bash
docker images
```
Ты увидишь список образов, включая `my-python-app`.


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


Образ готов — время его запустить! Контейнер — это живой, работающий процесс.


```bash
docker run -d -p 5000:5000 --name my-running-app my-python-app
```


`docker run` — команда запуска.
`-d` — запустить контейнер в фоновом режиме (detached).
`-p 5000:5000` — пробросить порт. Левая часть (`5000`) — порт на твоей машине, правая (`5000`) — порт внутри контейнера (который мы объявили в `EXPOSE`). Теперь твоё приложение доступно по адресу `http://localhost:5000`.
`--name my-running-app` — дать контейнеру удобное имя. Без этого Docker присвоит случайное (вроде `festive_mcclintock`).
`my-python-app` — имя образа, из которого нужно создать контейнер.


Проверь работающие контейнеры:
```bash
docker ps
```
Ты увидишь контейнер `my-running-app` в статусе `Up`. Зайди в браузере на `http://localhost:5000` — должно работать!


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


Работа с Docker — это постоянное взаимодействие через терминал. Вот базовый набор команд:


Остановить контейнер:
```bash
docker stop my-running-app
```
Запустить остановленный контейнер:
```bash
docker start my-running-app
```
Перезапустить контейнер:
```bash
docker restart my-running-app
```
Посмотреть логи (вывод) контейнера: Незаменимо для отладки.
```bash
docker logs my-running-app
```
Зайти внутрь запущенного контейнера (как будто подключаешься к удалённому серверу):
```bash
docker exec -it my-running-app /bin/bash
```
(Чтобы выйти, набери `exit`).
Удалить остановленный контейнер:
```bash
docker rm my-running-app
```
Удалить образ:
```bash
docker rmi my-python-app
```


Шаг 5: Работа с томами (Volumes) для сохранения данных


Контейнеры по своей природе эфемерны: все изменения файловой системы внутри них теряются при удалении контейнера. Для сохранения данных (базы данных, загруженные файлы, логи) используются тома (volumes).


Самый простой способ — примонтировать папку с твоего компьютера в контейнер:


```bash
docker run -d -p 5000:5000 -v /путь/на/твоём/компьютере:/путь/в/контейнере --name my-app-with-data my-python-app
```


Например, чтобы сохранять логи приложения в папку `logs` на рабочем столе:
```bash
docker run -d -p 5000:5000 -v ~/Desktop/logs:/app/logs --name my-app my-python-app
```
Теперь всё, что приложение пишет в `/app/logs` внутри контейнера, будет сохраняться в `~/Desktop/logs` на твоём компьютере, даже если контейнер удалить.


Про-советы и частые ошибки


  1. Используй `.dockerignore`. Создай в корне проекта файл `.dockerignore` (аналогично `.gitignore`). Укажи в нём папки и файлы, которые не нужно копировать в образ (например, `node_modules`, `.git`, `.venv`, локальные конфиги). Это ускорит сборку и уменьшит размер образа.

```
__pycache__
.pyc
.env
.git
node_modules
Dockerfile
README.md
```
  1. Выбирай правильный базовый образ. Не бери `latest` или огромные образы вроде `ubuntu:latest` для простых задач. Используй официальные, минималистичные образы (`-alpine`, `-slim`). Это сильно сократит размер и уменьшит поверхность для потенциальных атак, что важно с точки зрения кибербезопасности.


  1. Объединяй команды RUN. Каждая инструкция `RUN` в `Dockerfile` создаёт новый слой. Вместо:

```dockerfile
RUN apt-get update
RUN apt-get install -y package1
RUN apt-get install -y package2
```
Пиши так:
```dockerfile
RUN apt-get update && apt-get install -y \
package1 \
package2 \
&& rm -rf /var/lib/apt/lists/
```
Это уменьшит количество слоёв и итоговый размер образа.
  1. Не храни секреты в образах. Никогда не копируй пароли, API-ключи или токены напрямую в `Dockerfile` или в код. Используй переменные окружения (`ENV` в Dockerfile, а лучше `--env` при `docker run`) или специальные решения Docker для секретов (Docker Secrets) для продакшена.


  1. Останавливай и удаляй ненужное. Регулярно чисти систему:

```bash
# Удалить все остановленные контейнеры
docker container prune
# Удалить все неиспользуемые образы
docker image prune -a
# Удалить всё неиспользуемое (образы, контейнеры, тома, сети)
docker system prune -a
```
Это сэкономит гигабайты на диске.

Чек-лист: Docker с нуля за 5 шагов


Вот краткая выжимка всего руководства. Пройди по этому списку, и твой первый контейнер будет готов.


[ ] Установил Docker и проверил командой `docker --version` и `docker run hello-world`.
[ ] Создал `Dockerfile` в корне проекта с инструкциями по сборке (FROM, COPY, RUN, CMD).
[ ] Создал `.dockerignore`, чтобы не копировать в образ лишние файлы.
[ ] Собрал образ командой `docker build -t <имя-образа> .`.
[ ] Запустил контейнер с пробросом портов: `docker run -d -p <хост-порт>:<контейнер-порт> --name <имя-контейнера> <имя-образа>`.
[ ] Проверил работу через `docker ps` и зайдя на `http://localhost:<хост-порт>` в браузере.
[ ] Изучил базовые команды: `docker stop/start/logs/exec`.
* [ ] Понял важность томов (`-v`) для сохранения данных.


Docker — это мощный инструмент, который стандартизирует процесс разработки и деплоя. Начни с этого простого чек-листа, набей руку на своих проектах, а затем уже углубляйся в более сложные темы: Docker Compose для управления несколькими контейнерами, оркестрацию с Kubernetes или интеграцию Docker в процессы CI/CD.


Удачи в освоении контейнеров! Помни, лучший способ научиться — это делать. Создай, запусти, сломай, поправь — и всё получится.

Анна Кузнецова

Анна Кузнецова

Менеджер интернет-магазина

Специалист по e-commerce, помогает выбрать и использовать компьютерную литературу.

Комментарии (1)

С
Степан Кудрявцев
★★★★★
Хороший выбор профессиональной литературы. Все книги актуальные, информация полезная для работы.
Apr 9, 2025

Оставить комментарий

Возможно, вам подойдет

Смотреть каталог
Александр Иванович Ковалев, Алексей Иванович Ковалев Пожарная безопасность электрических вторичных распределительных щитов подводных лодок: монография

Александр Иванович Ковалев, Алексей Иванович Ковалев Пожарная безопасность электрических вторичных распределительных щитов подводных лодок: монография

3539.00 RUB

Монография по пожарной безопасности электрооборудования подводных лодок В данной монографии представлена детал…