この記事では、Dockerイメージを簡単に作成およびテストする方法について説明します。 物語の過程で、 ゴスを使用して、わずか0.5秒で公式のNginxイメージを確認できるテストを作成します。
その結果、nginxコンテナーをテストできる画像の望ましい状態を記述する小さなYAMLファイルを取得します。
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が必要です。
テストツールのインストール
テスト用のツールとして、 Gossを使用します。 インストールは簡単で、数秒かかります。
curl -fsSL https://goss.rocks/install | sh
注: curl | sh
が気に入らない場合curl | sh
curl | sh
、 これらの指示を使用して手動でゴスをインストールできます。
Gossは、 serverspecの代替となるYAMLサーバー構成検証ツールです。 システムの現在の状態に基づいて生成できるテストの記述が簡単になります。 書面によるテストは、システムの最終状態として実行または使用できます。
詳細については、プロジェクトのページをご覧ください。
テストを書く
dgoss
はGossにバンドルされている付属ツールであり、 dgoss
テストの記述を大幅に簡素化します。 次のようにコンテナを開始したと仮定します。
docker run -p 8080:80 nginx:1.11.10
テストの作成を開始するには、 dgoss edit
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
実行する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にリンクされていることが重要です。 そのため、モード、サイズ、所有者、グループ、およびチェックを削除します。 ファイルセクションは次のようになります。
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
次は?
この記事は、すぐに始められるようにすることを目的としており、簡単なテストケースを示しています。 詳細情報と高度な使用例は、次のページにあります。
参照:
- オリジナル: チュートリアル:Dockerイメージを0.5秒でテストする方法 。