[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-docker-kak-docker-ispolzuetsya-v-ci-cd":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},720,"kak-docker-ispolzuetsya-v-ci-cd",17,"docker","Docker","🐳","Как Docker используется в CI\u002FCD?","Docker в CI\u002FCD обеспечивает воспроизводимость сборки, единообразие окружения и стандартизацию доставки артефактов через Docker-образы.\n\n### 1. Единообразная среда сборки\n\nСборка проекта выполняется внутри контейнера, что гарантирует одинаковый результат на машине разработчика и CI-сервере:\n\n```bash\ndocker run --rm -v $(pwd):\u002Fapp -w \u002Fapp maven:3.9-eclipse-temurin-17 mvn package\n```\n\n### 2. Сборка и публикация Docker-образа\n\n```bash\n# Сборка с тегированием\ndocker build -t registry.example.com\u002Fmyapp:${GIT_COMMIT_SHA} .\ndocker build -t registry.example.com\u002Fmyapp:latest .\n\n# Отправка в реестр\ndocker push registry.example.com\u002Fmyapp:${GIT_COMMIT_SHA}\ndocker push registry.example.com\u002Fmyapp:latest\n```\n\n### 3. Пример GitLab CI\u002FCD\n\n\u003Cdetails>\u003Csummary>Пример .gitlab-ci.yml\u003C\u002Fsummary>\n\n```yaml\nstages:\n  - test\n  - build\n  - deploy\n\ntest:\n  stage: test\n  image: maven:3.9-eclipse-temurin-17\n  script:\n    - mvn test\n  cache:\n    paths:\n      - .m2\u002Frepository\n\nbuild:\n  stage: build\n  script:\n    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .\n    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA\n\ndeploy:\n  stage: deploy\n  script:\n    - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA\n    - docker stop myapp || true\n    - docker rm myapp || true\n    - docker run -d --name myapp -p 8080:8080 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA\n```\n\n\u003C\u002Fdetails>\n\n### 4. Пример GitHub Actions\n\n\u003Cdetails>\u003Csummary>Пример workflow\u003C\u002Fsummary>\n\n```yaml\nname: Build and Push\non:\n  push:\n    branches: [main]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Login to Docker Hub\n        uses: docker\u002Flogin-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Build and push\n        uses: docker\u002Fbuild-push-action@v5\n        with:\n          context: .\n          push: true\n          tags: myuser\u002Fmyapp:${{ github.sha }}\n```\n\n\u003C\u002Fdetails>\n\n### 5. Тестирование с Testcontainers\n\nБиблиотека Testcontainers позволяет запускать Docker-контейнеры в интеграционных тестах:\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n@SpringBootTest\n@Testcontainers\nclass UserRepositoryTest {\n\n    @Container\n    static PostgreSQLContainer\u003C?> postgres =\n        new PostgreSQLContainer\u003C>(\"postgres:16-alpine\")\n            .withDatabaseName(\"testdb\")\n            .withUsername(\"test\")\n            .withPassword(\"test\");\n\n    @DynamicPropertySource\n    static void configureProperties(DynamicPropertyRegistry registry) {\n        registry.add(\"spring.datasource.url\", postgres::getJdbcUrl);\n        registry.add(\"spring.datasource.username\", postgres::getUsername);\n        registry.add(\"spring.datasource.password\", postgres::getPassword);\n    }\n\n    @Test\n    void shouldSaveUser() {\n        \u002F\u002F тест с реальной базой данных\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** покажите, что Docker используется на всех этапах CI\u002FCD: сборка в контейнере (единообразие), упаковка в образ (артефакт), тестирование с Testcontainers (интеграционные тесты с реальными БД), деплой образа. Знание Testcontainers — большой плюс для Java-разработчика.","","middle",[15,16,17,18,7],"testcontainers","devops","spring-boot","ci-cd",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":35,"featuredSnippetReady":36},"Docker в CI\u002FCD: сборка, тестирование, деплой — Gymterview","Docker в CI\u002FCD: единообразная среда сборки, упаковка в образ, GitLab CI и GitHub Actions, интеграционные тесты с Testcontainers. Примеры pipeline.","Docker в CI\u002FCD: от сборки до деплоя — Gymterview","Docker на всех этапах CI\u002FCD: сборка в контейнере, образ как артефакт, Testcontainers для тестов, деплой образа.",[27,28,29,30,31,32,33,34],"Docker CI\u002FCD","GitLab CI Docker","GitHub Actions Docker","Testcontainers","Docker Registry","docker build push","интеграционные тесты","собеседование","Docker в CI\u002FCD: 1) Единообразная среда сборки — сборка внутри контейнера гарантирует одинаковый результат. 2) Упаковка в образ — Docker-образ как стандартный артефакт деплоя, тегируется по git commit SHA. 3) Тестирование — Testcontainers запускает реальные БД (PostgreSQL, Redis) в интеграционных тестах. 4) Деплой — pull образа из реестра и запуск. Поддерживается в GitLab CI, GitHub Actions, Jenkins.",true]