Rate this post

В этом уроке мы рассмотрим очень простой способ для создания и проверки образов docker. Тесты мы напишем для проверки официального nginx образа докер, используя Goss.

n

По результату выполнения данной статьи вы будете иметь небольшой yaml файл, который описывает желаемое состояние Вашего докер образа. С помощью него мы сможем тестировать образ:

nn

docker run -p 8080:80 nginx

с помощью командыn

dgoss run -p 8080:80 nginx

Тесты будут выполняться около половины секунды, и вывод следующий:n

INFO: Starting docker containernINFO: Container ID: 25d23a24nINFO: Running TestsnFile: /var/log/nginx/error.log: exists: matches expectation: [true]nFile: /var/log/nginx/error.log: linkedto: matches expectation: ["/dev/stderr"]nFile: /var/log/nginx/error.log: filetype: matches expectation: ["symlink"]nFile: /var/log/nginx/access.log: exists: matches expectation: [true]nFile: /var/log/nginx/access.log: linkedto: matches expectation: ["/dev/stdout"]nFile: /var/log/nginx/access.log: filetype: matches expectation: ["symlink"]nProcess: nginx: running: matches expectation: [true]nPort: tcp:80: listening: matches expectation: [true]nPort: tcp:80: ip: matches expectation: [["0.0.0.0"]]nHTTP: http://localhost: status: matches expectation: [200]nHTTP: http://localhost: Body: matches expectation: [Welcome to nginx!]nPackage: nginx: installed: matches expectation: [true]nPackage: nginx: version: matches expectation: [["1.11.10-1~jessie"]]nTotal Duration: 0.012snCount: 13, Failed: 0, Skipped: 0nINFO: Deleting container

Чтобы провести тестирование, описанное в статье Вам необходимо иметь установленный dockern

Установим инструмент тестирования

Мы будем использовать Goss как инструмент для тестирования. Установка проста и занимает всего несколько секунд.n

curl -fsSL https://goss.rocks/install | sh

Примечание: если у вас не установлен curl , вы можете установить goss вручную.n

Что такое Goos

Goss-это альтернативный инструмент serverspec для проверки конфигурации сервера на основе yaml. Он облегчает процесс написания тестов, позволяя пользователю создавать тесты для текущего состояния системы. Тесты могут быть запущены на выполнение.

Напишем тест

dgoss это вспомогательный инструмент, который поставляется с Goss, для облегчения написания тестов и настройки. Допустим, мы запускаем наш докер образ следующим образом:

nn

docker run -p 8080:80 nginx:1.11.10

Чтобы начать писать наши тесты мы заменяем docker run на dgoss edit:n

dgoss edit -p 8080:80 nginx:1.11.10

Эта  команда запустит докер образ, и откроет нам интерактивную оболочку с установленным goss в контейнере, вы увидите примерно такой результат:n

INFO: Starting docker containernINFO: Container ID: 9468c0c3nINFO: Run goss add/autoadd to add resources

Как только попали в интерактивную оболочку мы можем начать писать наш набор тестов. Вставьте следующие команды и они будут формировать тесты из текущего состояния запущенного контейнера:n

goss a file /var/log/nginx/access.log /var/log/nginx/error.logngoss a process nginxngoss a port 80ngoss a package nginxngoss a http http://localhostnexit

Примечание: «a» — тоже самое что и «add»nnПосле того, как мы выполним exit контейнер будет удален, и вы теперь видите goss.yaml в вашем текущем каталоге, который содержит следующее:n

file:n  /var/log/nginx/access.log:n    exists: truen    mode: "0777"n    size: 11n    owner: rootn    group: rootn    linked-to: /dev/stdoutn    filetype: symlinkn    contains: []n  /var/log/nginx/error.log:n    exists: truen    mode: "0777"n    size: 11n    owner: rootn    group: rootn    linked-to: /dev/stderrn    filetype: symlinkn    contains: []npackage:n  nginx:n    installed: truen    versions:n    - 1.11.10-1~jessienport:n  tcp:80:n    listening: truen    ip:n    - 0.0.0.0nprocess:n  nginx:n    running: truenhttp:n  http://localhost:n    status: 200n    allow-insecure: falsen    no-follow-redirects: falsen    timeout: 5000n    body: []

Тест можно запустить следующей командойn

dgoss run nginx

Изменение наших тестов вручную

Yaml файл, который мы создали в предыдущем разделе может быть написан от руки. Команда dgoss edit предназначена в качестве помощника для облегчения процесса написания тестов. Однако, в большинстве случаев, созданный в yaml, должен быть изменен. Давайте сделать это..

n

В разделе файлы проверяем, что файлы журналов находятся связанными символическими ссылками с stdout/stderr. Так давайте уберем mode, size, owner, group и contains. Наш раздел файлы должны выглядеть следующим образом:

nn

file:n  /var/log/nginx/access.log:n    exists: truen    linked-to: /dev/stdoutn    filetype: symlinkn  /var/log/nginx/error.log:n    exists: true           n    linked-to: /dev/stderrn    filetype: symlink

В разделе http, давайте уберем протокол https связанный с флагами и добавим проверку, “добро пожаловать в nginx!” появляющееся сообщение в теле ответа:n

http:n  http://localhost:n    status: 200n    timeout: 5000n    body:n    - Welcome to nginx!

Наш yaml файл, сейчас содержит 28 строк:n

file:n  /var/log/nginx/access.log:n    exists: truen    linked-to: /dev/stdoutn    filetype: symlinkn  /var/log/nginx/error.log:n    exists: truen    linked-to: /dev/stderrn    filetype: symlinknpackage:n  nginx:n    installed: truen    versions:n    - 1.11.10-1~jessienport:n  tcp:80:n    listening: truen    ip:n    - 0.0.0.0nprocess:n  nginx:n    running: truenhttp:n  http://localhost:n    status: 200n    timeout: 5000n    body:n    - Welcome to nginx!

Процедура запуска теста не меняетсяn

dgoss run nginx

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

  • Goss — инструмент, который мы использовали в статье.
  • dgoss — утилита,входящая в состав goss.
  • dgoss-examples — репозиторий, примеров применения dgoss для проверки докер образов.

Нужна помощь в установке, настройке и сопровождении docker, обращайтесь [email protected]