Связаться по:
vkarabedyants Telegram Viber
+7 (499) 350-10-69

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Как быстро проверить образ docker

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

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

docker run -p 8080:80 nginx

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

dgoss run -p 8080:80 nginx

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

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 как инструмент для тестирования. Установка проста и занимает всего несколько секунд.

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

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

Что такое Goos

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

Напишем тест

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

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

В разделе http, давайте уберем протокол https связанный с флагами и добавим проверку, “добро пожаловать в 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

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

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

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

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.