16.04前書き継続的統合(CI)は、開発者が可能な限り頻繁にコードを統合し、すべてのコミットが_自動化されたビルド_によって共有リポジトリにマージされる前後にテストされるプラクティスを指します。CIは開発プロセスを高速化し、本番環境での重大な問題のリスクを最小限に抑えますが、設定は簡単ではありません。自動ビルドは、*ランタイム依存関係*のインストールと*外部サービス*の構成がローカル環境と開発環境と異なる場合がある異なる環境で実行されます。[Dockerの詳細])。開発者の場合、Dockerを使用すると、ローカルコンテナでアプリケーションコンポーネントを実行することにより、ローカルマシンで運用環境をシミュレートできます。Compose]を使用して簡単に自動化できます。Composeを使用してCIワークフローの自動化を示します。world」タイプのPythonアプリケーションとBashテストスクリプトを作成します。Pythonアプリケーションを実行するには2つのコンテナーが必要です。1つはアプリ自体用で、もう1つはアプリの依存関係として必要なストレージ用のRedisコンテナーです。*ファイルに移動されるため、すべてのテスト実行が新鮮で統一されたアプリケーション環境で実行されていることを確認できます。このアプローチは、アプリケーションをテストするたびに、依存関係を含めて、アプリケーションの同一の新しいテスト環境を構築する方法を示しています。したがって、テスト対象のアプリケーションおよび基盤となるインフラストラクチャとは無関係に、CIワークフローを自動化します。開始する前に、次のものが必要です。16.04での初期サーバー設定は、これを設定する方法を説明しています。16.04のDocker]。World」Pythonアプリケーションを作成するこのステップでは、このセットアップでテストできるアプリケーションのタイプの例として、単純なPythonアプリケーションを作成します。次を実行して、アプリケーションの新しいディレクトリを作成します。app.py次のコンテンツを追加します。port=80)完了したら、ファイルを保存して終了します。`はhttp://flask.pocoo.org/[Flask]に基づいたRedisデータサービスに接続するWebアプリケーションです。‘counter’)`は訪問数を増やし、この値をRedisに保持します。+`メッセージがHTMLで返されます。+」があり、最初の2行で確認できます。これらの依存関係は、アプリケーションを実行する前に定義する必要があります。requirements.txt内容を追加します。requirements.txtFlaskRedis完了したら、ファイルを保存して終了します。次のステップに進む準備ができています。+」というファイルを使用して、特定のアプリケーションのDockerイメージを構築するために必要な手順を示します。新しいファイルを編集します。Dockerfile次の内容を追加します。+:アプリケーションを起動するコマンドファイルを保存して終了します。World」アプリケーションのメインコンポーネントをビルドするために必要なすべての情報が含まれています。次に、例のより洗練された部分に進みます。このアプリケーションでは、外部サービスとしてRedisが必要です。Composeを使用すると毎回繰り返し設定できます。Composeの使用を開始しましょう。新しいファイルを編集します。docker-compose.yml次の内容を追加します。World」アプリケーションをローカルに起動する方法を示しています。Dockerfile`ファイルからPythonアプリケーションをビルドします。これは、Pythonアプリケーション専用に作成したローカルDockerイメージです。+`コンテナへのリンクを定義します。+`という名前の標準パブリックDockerイメージから実行されます。完了したら、ファイルを保存して終了します。World」アプリケーションをデプロイするこの手順では、アプリケーションを展開し、最終的にはインターネット経由でアクセスできるようにします。アプリケーションを何度も同じ方法でデプロイできるため、デプロイメントワークフローの目的上、これを開発環境、ステージング環境、または運用環境のいずれかと見なすことができます。+`ファイルを使用すると、次を実行してローカル環境のデプロイメントを自動化できます。Dockerfile`ファイルからローカルアプリケーションイメージを構築します。+`コンテナを実行します。次を実行して、アプリケーションコンテナが作成されたことを確認します。+」という名前の2つの実行中のコンテナが表示されます。アプリケーションが起動していることを確認してみましょう。+`コンテナのIPを取得できます。$WEB_APP_IPWebアプリケーションが適切なメッセージを返していることを確認します。http://${WEB_APP_IP}:80次のような結果が返されます。2<br/>訪問数は、このエンドポイントに到達するたびに増加します。World」アプリケーションにアクセスすることもできます。独自のアプリケーションを設定するための鍵は、独自のDockerコンテナーにアプリを配置し、独自のコンテナーから各依存関係を実行することです。Composeを使用してコンテナ間の関係を定義できます。Composeの記事]をご覧ください。複数のコンテナでアプリケーションを実行する方法の別の例については、https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-and-phpmyadmin-with-docker-composeの実行に関するこの記事をお読みください。Composeを使用したWordPressおよびphpMyAdmin]。ステップ4-テストスクリプトを作成する次に、Pythonアプリケーション用のテストスクリプトを作成します。これは、アプリケーションのHTTP出力をチェックする単純なスクリプトです。このスクリプトは、継続的インテグレーションの展開プロセスの一部として実行する可能性があるテストの種類の例です。新しいファイルを編集します。test.sh次の内容を追加します。World」アプリケーションの基本的なWeb接続をテストします。cURLを使用して訪問数を取得し、テストに合格したかどうかのレポートを作成します。ステップ5-テスト環境を作成するアプリケーションをテストするには、テスト環境を展開する必要があります。*で作成したライブアプリケーション環境と同一であることを確認します。新しいDockerfileファイルを作成して、テストスクリプトをDocker化する必要があります。新しいファイルを編集します。Dockerfile.test次の内容を追加します。+`コマンドを示しますBashで。テストがDocker化されると、複製可能で不可知な方法で実行できます。World」アプリケーションにリンクすることです。Composeが再び助けになります。新しいファイルを編集します。docker-compose.test.yml次の内容を追加します。`依存関係をデプロイします。」コンテナを指定するファイルの一部です。+」コンテナがポート80を公開しないため、テスト中にアプリケーションがパブリックインターネット経由で利用できなくなることです。したがって、アプリケーションとその依存関係は、実際の展開とまったく同じ方法で構築されていることがわかります。`コンテナー(testsの下の_systemの名前)も定義します。`ファイルを指定します。+`スクリプトからアクセス可能です。+`には、多数の外部サービスと複数のテストコンテナーが含まれている場合があります。Dockerは、すべてのコンテナが基盤となるOSを共有するため、これらすべての依存関係を単一のホストで実行できます。+`ファイルと同様に、追加のDockerfileを作成できます。+`コンテナの下に追加のコンテナを追加できます。World」アプリケーションをテストする最後に、Dockerのアイデアをローカル環境からテスト環境に拡張すると、次を実行することにより、Dockerを使用してアプリケーションをテストする自動化された方法が得られます。`に必要なローカルイメージを構築します。+`を使用して特定のプロジェクト名を示すことに注意してください。次を実行して、新しいテスト環境を起動します。+`コンテナの出力を確認します。+`コンテナの終了コードをチェックして、テストに合格したかどうかを確認します。$?」の値は「+0」になります。それ以外の場合、アプリケーションテストは失敗しました。他のCIツールはコードリポジトリのクローンを作成し、これらのいくつかのコマンドを実行して、実行時の依存関係や外部サービスの構成を気にすることなく、アプリケーションの最新ビットでテストが合格するかどうかを確認できます。実稼働環境と同一の新しく構築された環境でテストを正常に実行しました。+`ファイルを使用する利点は、テストプロセスが次のとおりであることです。World」アプリケーションをテストする方法の例を示します。+`を作成して、新鮮で不変の環境でアプリケーションをテストします。