Ответ
Я использовал Docker для создания воспроизводимых окружений сборки и тестирования для C++ проектов, что особенно важно при работе с разными версиями компиляторов и библиотек.
Основные задачи:
- Сборка: Создание Docker-образов с фиксированным набором инструментов (GCC, Clang, CMake, Conan) для гарантии идентичной сборки на любом хосте.
- Тестирование: Запуск юнит-тестов и интеграционных тестов в изолированных контейнерах.
- Развертывание: Упаковка готового приложения в минималистичный образ на базе
alpineилиdistrolessдля деплоя.
Пример многоступенчатого (multi-stage) Dockerfile для C++:
# Стадия сборки
FROM gcc:12 as builder
WORKDIR /src
COPY . .
RUN mkdir build && cd build &&
cmake -DCMAKE_BUILD_TYPE=Release .. &&
cmake --build . --target my_app
# Финальная стадия с минимальным образом
FROM debian:11-slim
WORKDIR /app
# Копируем только нужные бинарники и библиотеки
COPY --from=builder /src/build/bin/my_app .
# Устанавливаем только необходимые runtime-зависимости
RUN apt-get update && apt-get install -y
libstdc++6
&& rm -rf /var/lib/apt/lists/*
CMD ["./my_app"]
Интеграция с CI/CD: Настраивал запуск этих контейнеров в пайплайнах GitLab CI/CD, использовал Docker Compose для оркестрации сервисов в интеграционных тестах (например, приложение + база данных). Также работал с оптимизацией слоев образа и управлением Docker-реестрами (например, GitLab Container Registry).
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶