Docker — это инструмент, который позволяет упаковывать приложения и все их зависимости в так называемые контейнеры.
Контейнер — это небольшая виртуальная среда, где работает ваше приложение.
Представьте, что это как коробка, в которую вы положили всё необходимое для работы программы: код, библиотеки, настройки и т.д.
Это удобно, потому что приложение будет одинаково работать на любом компьютере или сервере, где есть Docker.
Вам не нужно беспокоиться о том, что у кого-то не установлена нужная версия программы или зависимостей.
Docker Compose — это инструмент, который помогает запускать сразу несколько контейнеров вместе и управлять ими. Например, ваше приложение может состоять из разных частей: база данных, сервер, кэш и т.д. Docker Compose позволяет описать в одном файле (обычно docker-compose.yml), как все эти контейнеры должны взаимодействовать между собой, какие порты открывать, какие данные передавать. После этого одной командой можно запустить все эти контейнеры.
Простыми словами:
- Docker — это как упаковка для вашего приложения, чтобы оно работало везде одинаково.
- Docker Compose — это способ запускать и настраивать сразу несколько таких упаковок вместе.
Чем отличается Docker от виртуальных машин читайте здесь.
Работа с Docker по шагам
Чтобы начать работать с Docker, рассмотрим пошаговый процесс создания и запуска контейнера с простым примером.
Шаг 1: Установка Docker
Если Docker ещё не установлен, нужно установить его для вашей ОС (Linux, macOS или Windows). Инструкции доступны на официальном сайте Docker:
После установки Docker, проверьте, что всё настроено правильно, выполнив следующую команду:
docker --version
Если установка прошла успешно, вы увидите версию Docker.
Шаг 2: Создание приложения
Допустим, у нас есть простое Python-приложение. Создадим его в новом каталоге:
1. Создайте новую папку для проекта:
mkdir my-docker-app
cd my-docker-app
2. Внутри папки создайте файл app.py с простым кодом:
app.py:
print("Hello from Docker!")
Шаг 3: Создание Dockerfile
Dockerfile — это текстовый файл с инструкциями для сборки контейнера. Внутри my-docker-app создайте файл с именем Dockerfile.
Dockerfile:
# Используем официальный образ
Python FROM python:3.9-slim
# Устанавливаем рабочую директорию в контейнере
WORKDIR /app
# Копируем текущую директорию в контейнер
COPY . .
# Команда для запуска приложения
CMD ["python", "app.py"]
Шаг 4: Сборка Docker-образа
Теперь, когда у нас есть Dockerfile, мы можем собрать Docker-образ. В терминале выполните команду:
docker build -t my-python-app .
Здесь:
- -t my-python-app — задаёт имя образа.
- . — указывает, что Dockerfile находится в текущей директории.
Если всё сделано правильно, Docker соберёт образ на основе инструкций в Dockerfile.
Шаг 5: Запуск контейнера
Запустим контейнер на основе созданного образа:
docker run my-python-app
После этого Docker запустит контейнер, выполнит команду CMD из Dockerfile, и вы увидите вывод:
Hello from Docker!.
Остановимся на этом шаге поподробней. Нам могут понадобиться разные варианты запуска контейнера и приложения внутри него.
5.1 Запуск в интерактивном режиме
Иногда нужно запустить контейнер в интерактивном режиме, чтобы войти в него и вручную запустить приложение или выполнить другие команды. Для этого используйте параметр -it.
docker run -it my-python-app /bin/bash
После входа в контейнер можно запустить приложение вручную:
python app.py
5.2 Запуск с монтированием файловой системы (для разработки)
Если вы разрабатываете приложение и вам нужно, чтобы изменения в коде на локальной машине сразу отображались внутри контейнера, можно использовать опцию монтирования директории с локальной машины в контейнер.
Например, если вы хотите, чтобы ваш Python-код обновлялся без пересборки образа, используйте следующую команду:
docker run -v $(pwd):/app my-python-app
Здесь:
- -v $(pwd):/app — монтирует текущую директорию ($(pwd) для Linux/macOS) на локальной машине в папку /app внутри контейнера.
При изменении кода на вашей локальной машине, контейнер сразу увидит эти изменения.
5.3 Запуск приложения с передачей параметров
Иногда вам может понадобиться передать параметры в приложение при запуске контейнера. Например, если ваше приложение принимает аргументы командной строки.
Допустим, наше Python-приложение принимает аргумент:
app.py:
import sys
if len(sys.argv) > 1:
print(f"Argument passed: {sys.argv[1]}")
else:
print("No arguments passed.")
Когда мы создаём Docker-образ, команда в Dockerfile остаётся той же:
CMD ["python", "app.py"]
Но для передачи аргументов при запуске контейнера используйте следующую команду:
docker run my-python-app аргумент_1
Результат будет таким:
Argument passed: аргумент_1
Запуск с использованием переменных окружения
Если ваше приложение использует переменные окружения, вы можете передавать их при запуске контейнера с помощью флага -e.
Пример Python-приложения, которое использует переменную окружения:
app.py:
import os
message = os.getenv('MESSAGE', 'No message provided')
print(f"Message: {message}")
Для передачи переменной окружения MESSAGE, запустите контейнер так:
docker run -e MESSAGE="Hello from environment variable!" my-python-app
Результат:
Message: Hello from environment variable!
Шаг 6: Просмотр запущенных контейнеров
Для просмотра всех запущенных контейнеров используйте команду:
docker ps
Для просмотра всех контейнеров, включая завершённые, выполните:
docker ps -a
Шаг 7: Остановка и удаление контейнеров
Чтобы остановить контейнер, выполните команду:
docker stop <container_id>
Для удаления контейнера:
docker rm <container_id>
Шаг 8: Удаление образов
Чтобы удалить созданный Docker-образ, используйте команду:
docker rmi my-python-app
Шаг 9: Использование Docker Hub
Docker Hub — это публичный репозиторий для хранения Docker-образов. Вы можете загрузить свои образы туда для дальнейшего использования или загрузить образы, созданные другими разработчиками.
Правда из России сейчас могут быть с этим проблемы.
Вход в Docker Hub:
docker login
Загрузка образа на Docker Hub:
Предположим, у вас есть учётная запись с именем пользователя myusername. Чтобы загрузить образ, сначала его нужно переназвать:
docker tag my-python-app myusername/my-python-app
Затем загрузите образ:
docker push myusername/my-python-app
Теперь образ доступен на Docker Hub, и его можно использовать из любой точки мира.
Загрузка образа с Docker Hub:
Чтобы загрузить образ, используйте команду:
docker pull myusername/my-python-app
Полезные команды Docker
1. Посмотреть логи контейнера:
docker logs <container_id>
2. Автоматическое удаление контейнера после завершения:
docker run --rm my-python-app
3. Остановка всех запущенных контейнеров:
docker stop $(docker ps -q)
4. Удаление всех контейнеров:
docker rm $(docker ps -a -q)
5. Удаление всех образов:
docker rmi $(docker images -q)
Заключение
Теперь у вас есть базовые знания о том, как работать с Docker. Вы можете создать Dockerfile для своего приложения, собрать образ и запустить контейнер. Docker значительно упрощает процесс развертывания приложений и их зависимостей, а также позволяет поддерживать консистентность окружений на различных этапах разработки и эксплуатации.
Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам