Как быстро проверить образ docker
В этом уроке мы рассмотрим очень простой способ для создания и проверки образов docker. Тесты мы напишем для проверки официального nginx образа докер, используя Goss.
По результату выполнения данной статьи вы будете иметь небольшой yaml файл, который описывает желаемое состояние Вашего докер образа. С помощью него мы сможем тестировать образ:
1 |
docker run -p 8080:80 nginx |
с помощью команды
1 |
dgoss run -p 8080:80 nginx |
Тесты будут выполняться около половины секунды, и вывод следующий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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
Установим инструмент тестирования
Мы будем использовать Goss как инструмент для тестирования. Установка проста и занимает всего несколько секунд.
1 |
curl -fsSL https://goss.rocks/install | sh |
Примечание: если у вас не установлен curl , вы можете установить goss вручную.
Что такое Goos
Goss-это альтернативный инструмент serverspec для проверки конфигурации сервера на основе yaml. Он облегчает процесс написания тестов, позволяя пользователю создавать тесты для текущего состояния системы. Тесты могут быть запущены на выполнение.
Напишем тест
dgoss
это вспомогательный инструмент, который поставляется с Goss, для облегчения написания тестов и настройки. Допустим, мы запускаем наш докер образ следующим образом:
1 |
docker run -p 8080:80 nginx:1.11.10 |
Чтобы начать писать наши тесты мы заменяем docker run на dgoss edit:
1 |
dgoss edit -p 8080:80 nginx:1.11.10 |
Эта команда запустит докер образ, и откроет нам интерактивную оболочку с установленным goss в контейнере, вы увидите примерно такой результат:
1 2 3 |
INFO: Starting docker container INFO: Container ID: 9468c0c3 INFO: Run goss add/autoadd to add resources |
Как только попали в интерактивную оболочку мы можем начать писать наш набор тестов. Вставьте следующие команды и они будут формировать тесты из текущего состояния запущенного контейнера:
1 2 3 4 5 6 |
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
в вашем текущем каталоге, который содержит следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
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: [] |
Тест можно запустить следующей командой
1 |
dgoss run nginx |
Изменение наших тестов вручную
Yaml файл, который мы создали в предыдущем разделе может быть написан от руки. Команда dgoss edit
предназначена в качестве помощника для облегчения процесса написания тестов. Однако, в большинстве случаев, созданный в yaml, должен быть изменен. Давайте сделать это..
В разделе файлы проверяем, что файлы журналов находятся связанными символическими ссылками с stdout/stderr. Так давайте уберем mode, size, owner, group и contains. Наш раздел файлы должны выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 |
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 |
В разделе http, давайте уберем протокол https связанный с флагами и добавим проверку, “добро пожаловать в nginx!” появляющееся сообщение в теле ответа:
1 2 3 4 5 6 |
http: http://localhost: status: 200 timeout: 5000 body: - Welcome to nginx! |
Наш yaml файл, сейчас содержит 28 строк:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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! |
Процедура запуска теста не меняется
1 |
dgoss run nginx |
В данной статье мы познакомились с написание простого тестового сценария. Подробную информацию и расширенный функционал использования ищите в документации:
- Goss — инструмент, который мы использовали в статье.
- dgoss — утилита,входящая в состав goss.
- dgoss-examples — репозиторий, примеров применения dgoss для проверки докер образов.
Нужна помощь в установке, настройке и сопровождении docker, обращайтесь [email protected]