Как проверить правильность сборки образов docker из docker-compose? - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь создать систему CI, в которой я проверяю файлы Dockerfile и docker-compose.yaml, которые используются для создания наших образов.

Я нашел Google текстер-тест-структуры это можно использовать для проверки структуры создаваемых образов Docker. Это работает, если образы докеров создаются из Dockerfile.

Есть ли способ, которым я могу проверить образы докера со всеми конфигурациями, которые добавляются в образы Docker-compose?

EDIT: Может быть, я не все вложил все свои детали в вопросы.

Допустим, у меня есть файл docker-compose со следующей структурой:

version: "3"
services:
  image-a:
    build:
      context: .
      dockerfile: Dockerfile-a
  image-b:
    build:
      context: .
      dockerfile: Dockerfile-b
      ports:
          - '8983:8983'
      volumes:
         - '${DEV_ENV_ROOT}/solr/cores:/var/data/solr'
         - '${DEV_ENV_SOLR_ROOT}/nginx:/var/lib/nginx'

Теперь, когда образы будут создаваться из Dockerfile-a и Dockerfile-b, поверх образа foo-b будут сделаны конфигурации. Как я могу проверить эти конфигурации, не собирая контейнер из образа foo-b? Будет ли это вообще возможно?

1 Ответ

1 голос
/ 06 марта 2019

Предполагается, что у вас есть следующий файл docker-compose.yml:

version: "3"
services:
  image-a:
    build:
      context: .
      dockerfile: Dockerfile-a
  image-b:
    build:
      context: .
      dockerfile: Dockerfile-b

Создайте свои изображения с помощью команды docker-compose --project-name foo build. Это заставит имя всех изображений начинаться с префикса foo_. Таким образом, вы получите следующие имена изображений:

  • foo_image-а
  • foo_image-б

Хитрость заключается в использовании уникального идентификатора (например, вашего идентификатора задания CI) вместо foo, чтобы вы могли идентифицировать только что созданные изображения.

Теперь, когда вы знаете имена ваших изображений, вы можете использовать:

  • container-structure-test test --image foo_image-a --config config.yaml
  • container-structure-test test --image foo_image-b --config config.yaml

Если вы хотите выполнить какое-то общее задание, которое не знает названия службы составления докера, вы можете использовать следующую команду, чтобы получить список изображений, начинающихся с этого префикса foo_:

docker image list --filter "reference=foo_*"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
foo_image-a         latest              0c5e1cf8c1dc        16 minutes ago      4.15MB
foo_image-b         latest              d4e384157afb        16 minutes ago      4.15MB

и если вы хотите, чтобы скрипт перебирал этот результат, добавьте параметр --quiet, чтобы получить только идентификатор изображений:

docker image list --filter "reference=foo_*" --quiet
0c5e1cf8c1dc
d4e384157afb
...