В этом уроке мы рассмотрим очень простой способ для создания и проверки образов 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]