- PVSM.RU - https://www.pvsm.ru -
В этой статье рассматривается простой способ создания и тестирования образов docker. По ходу повествования, используя Goss [1], мы напишем тесты, с помощью которых можно проверить официальный образ Nginx [2] всего за ~0,5 с.
В итоге у нас получится небольшой YAML-файл, описывающий желаемое состояние образа, с помощью которого мы сможем протестировать контейнер nginx:
docker run -p 8080:80 nginx
выполнив простую команду:
dgoss run -p 8080:80 nginx
Процедура займет около 500 миллисекунд и выдаст следующий результат:
INFO: Starting docker container
INFO: Container ID: 25d23a24
INFO: Running Tests
File: /var/log/nginx/error.log: exists: matches expectation: [true]
File: /var/log/nginx/error.log: linkedto: matches expectation: ["/dev/stderr"]
File: /var/log/nginx/error.log: filetype: matches expectation: ["symlink"]
File: /var/log/nginx/access.log: exists: matches expectation: [true]
File: /var/log/nginx/access.log: linkedto: matches expectation: ["/dev/stdout"]
File: /var/log/nginx/access.log: filetype: matches expectation: ["symlink"]
Process: nginx: running: matches expectation: [true]
Port: tcp:80: listening: matches expectation: [true]
Port: tcp:80: ip: matches expectation: [["0.0.0.0"]]
HTTP: http://localhost: status: matches expectation: [200]
HTTP: http://localhost: Body: matches expectation: [Welcome to nginx!]
Package: nginx: installed: matches expectation: [true]
Package: nginx: version: matches expectation: [["1.11.10-1~jessie"]]
Total Duration: 0.012s
Count: 13, Failed: 0, Skipped: 0
INFO: Deleting container
Замечание: если вам удобнее смотреть, нежели читать, в конце статьи вы можете найти ссылку на видеоверсию (на английском).
Чтобы иметь возможность выполнять приведенные в статье команды, вам понадобится Docker [3].
В качестве инструмента для тестирования мы возьмем Goss [1]. Установка его проста и занимает несколько секунд.
curl -fsSL https://goss.rocks/install | sh
Замечание: если вам не нравится curl | sh
, можно установить Goss вручную, воспользовавшись этими инструкциями [4].
Goss — это использующий YAML инструмент для проверки конфигурации серверов, являющийся альтернативой serverspec [5]. Он упрощает написание тестов, которые могут быть сгенерированы на основе текущего состояния системы. Написанные тесты можно запустить на выполнение либо использовать в качестве желаемого конечного состояния системы.
Более подробную информацию см. на странице проекта [1].
dgoss
— это идущий в комплекте с Goss вспомогательный инструмент, который радикально упрощает написание тестов для docker. Предположим, что мы запустили контейнер следующим образом:
docker run -p 8080:80 nginx:1.11.10
Чтобы начать создание тестов, замените docker run
на dgoss edit
:
dgoss edit -p 8080:80 nginx:1.11.10
Эта команда запустит контейнер, установит Goss и откроет консоль контейнера:
INFO: Starting docker container
INFO: Container ID: 9468c0c3
INFO: Run goss add/autoadd to add resources
Теперь мы можем начать написание тестов. Вставьте в консоль следующие команды, которые сгенерируют тесты на основе текущего состояния системы:
goss a file /var/log/nginx/access.log /var/log/nginx/error.log
goss a process nginx
goss a port 80
goss a package nginx
goss a http http://localhost
exit
Замечание: “a” — это сокращенная форма от “add”.
После выполнения команды exit
контейнер будет удален, а в текущей директории появится файл goss.yaml
:
file:
/var/log/nginx/access.log:
exists: true
mode: "0777"
size: 11
owner: root
group: root
linked-to: /dev/stdout
filetype: symlink
contains: []
/var/log/nginx/error.log:
exists: true
mode: "0777"
size: 11
owner: root
group: root
linked-to: /dev/stderr
filetype: symlink
contains: []
package:
nginx:
installed: true
versions:
- 1.11.10-1~jessie
port:
tcp:80:
listening: true
ip:
- 0.0.0.0
process:
nginx:
running: true
http:
http://localhost:
status: 200
allow-insecure: false
no-follow-redirects: false
timeout: 5000
body: []
Эти тесты могут быть выполнены с помощью команды:
dgoss run nginx
Сгенерированный ранее YAML-файл также может быть написан вручную. Команда dgoss edit
создана для облегчения процесса написания тестов. Но в большинстве случаев сгенерированный YAML-файл все же приходится подправлять. Далее мы этим и займемся.
В секции файлов нам важно только то, чтобы журналы были связаны с stdout/stderr символьными ссылками. Поэтому давайте удалим проверки mode, size, owner, group и contains. Секция файлов должна выглядеть следующим образом:
file:
/var/log/nginx/access.log:
exists: true
linked-to: /dev/stdout
filetype: symlink
/var/log/nginx/error.log:
exists: true
linked-to: /dev/stderr
filetype: symlink
Далее удалим флаги, связанные с https, и добавим проверку того, что в теле ответа есть строка «Welcome to nginx!»:
http:
http://localhost:
status: 200
timeout: 5000
body:
- Welcome to nginx!
В нашем YAML-файле теперь должно быть 28 строк:
file:
/var/log/nginx/access.log:
exists: true
linked-to: /dev/stdout
filetype: symlink
/var/log/nginx/error.log:
exists: true
linked-to: /dev/stderr
filetype: symlink
package:
nginx:
installed: true
versions:
- 1.11.10-1~jessie
port:
tcp:80:
listening: true
ip:
- 0.0.0.0
process:
nginx:
running: true
http:
http://localhost:
status: 200
timeout: 5000
body:
- Welcome to nginx!
Запустить эти тесты по-прежнему очень просто:
dgoss run nginx
Эта статья предназначена для быстрого старта и демонстрирует простой тестовый сценарий. Более подробную информацию и продвинутые варианты использования можно найти на следующих страницах:
Ссылки:
Автор: Centos-admin.ru
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testing/252367
Ссылки в тексте:
[1] Goss: https://github.com/aelsabbahy/goss
[2] Nginx: https://hub.docker.com/_/nginx/
[3] Docker: https://www.docker.com/
[4] этими инструкциями: https://github.com/aelsabbahy/goss#manual-installation
[5] serverspec: http://serverspec.org/
[6] dgoss: https://github.com/aelsabbahy/goss/tree/master/extras/dgoss
[7] dgoss-examples: https://github.com/aelsabbahy/dgoss-examples
[8] Goss manual: https://github.com/aelsabbahy/goss/blob/master/docs/manual.md
[9] Видеоверсия этой статьи: https://www.youtube.com/watch?v=PEHz5EnZ-FM
[10] Tutorial: How to test your docker image in half a second: https://medium.com/@aelsabbahy/tutorial-how-to-test-your-docker-image-in-half-a-second-bbd13e06a4a9
[11] Источник: https://habrahabr.ru/post/325570/
Нажмите здесь для печати.