目次


Docker: 今どきの開発者への朗報

コンテナー化されたアプリへ移行して、コーディングの生産性と開発 IQ を高める

Comments

Docker の役割は、DevOps にとってのスイス・アーミー・ナイフのようなものとして定評があります。しかし、Docker によって管理されたアプリケーション・コンテナーが役に立つのは、クラウド内でサーバーをデプロイする場合だけではありません。Docker コンテナーは開発にも役立てることができ、一般的な開発シナリオの多くで劇的に生産性を高めることができます。このチュートリアルでは、Docker がいかに役立ち得るかについて開発者の視点でフォーカスします。Docker を紹介した後、その基本的な概念と用語を説明し、一連のハンズオン開発サンプルを紹介します。

このチュートリアルに従うと、以下のことを理解できるようになります。

  • Docker を使用することで、Node.js による Web アプリケーションのコーディングを容易に行えるようになります。
  • Docker を使用することで、Apache Tomcat サーバー上の Java Enterprise Edition (Java EE) を迅速に作成してテストすることができます。
  • Docker は、Bottle フレームワークを介して Python Web アプリのコーディング、テスティング、デプロイメントを促進することができます。
  • Docker コンテナーを使用することで、NoSQL データベース・バックエンドを備えた 3 層 Node.js アプリケーション全体を作成、テストすることができます。

単一の Linux システム上で、あらかじめ設定されている構成に一切手を加えることなく、上述のメリットをすべて享受することができます。このチュートリアルで取り上げるサンプルに取り組むと、さまざまな Docker コンテナーを実行して、毎日の開発ワークフローの中で生産性を高めるのは、わけないことになるはずです。

Docker の基礎

Docker はコンテナー・マネージャーです。コンテナーは、アプリケーションとその依存関係をバンドルします。リポジトリーに保管されたイメージから各コンテナーをインスタンス化し、ホスト OS 内で互いに隔離された仮想化環境内でコンテナーを実行します。仮想化技術は (通常は) 軽量であることから、複数のコンテナーを同時に実行することができます。

Docker コンテナー・マネージャーを示す図
Docker コンテナー・マネージャーを示す図

Docker コンテナー・マネージャーを使用すると以下のことが可能になります。

  • イメージからコンテナーを実行する
  • 実行中のコンテナーのプロパティーを調べて操作する
  • 実行中のコンテナーを停止する
  • 実行中のコンテナー内で追加のタスクを実行する
  • 実行中のコンテナーを起動または再起動する
  • その他多くの管理タスクを実行する

コンテナー化されたアプリは、デスクトップ PC 上、サーバー上、パブリック・クラウド内、さらには一部の携帯電話上など、ほとんどどこででも実行することができます。

Linux は、最も広く使用されてサポートされている Docker プラットフォームとして群を抜いています。Docker によって管理されているコンテナー化 (軽量仮想化) 技術は、Linux プラットフォーム上で最も成熟しており、コントロール・グループや名前空間といった、Linux の最新機能を使用しています。

Docker を実行する方法

Docker コンテナー・マネージャーは、使用可能なスイッチやオプションが数多くある docker コマンド・ライン・クライアントを介して実行します。以下に示すのが、コンテナー化されたアプリのイメージを実行するための単純化されたコマンドです (この場合は、MySQL データベースを対象としています)。

docker run -d mysql:5.5

Docker プロジェクトでは、一般にアクセス可能な Docker Hub を運用します。ユーザーはサインアップして、独自のコンテナー化されたアプリ・イメージ・リポジトリーを作成し、共有して一般に利用できるようにイメージをプッシュすることができます。例えば、Tomcat サーバーのイメージや、Node.js のイメージ、そして最もよく使われているオープン・ソース・データベース用のイメージを見つけることができます。Docker Hub は、アプリのイメージが共有されて、DevOps および開発者のグローバルなコミュニティーによってコラボレーティブに作成されるという点で、GitHub と同じ精神で運用されています。

コンテナー化されたアプリのイメージのビルド

docker コマンド・ライン・クライアントを使用して、コンテナー化されたアプリのイメージをビルドすることもできます。その 1 つの方法は、アプリケーションとその依存関係をインストール、セットアップ、構成する方法に関する指示が含まれている Dockerfile からイメージをビルドする方法です。

docker コマンド・ライン・クライアントを使用して、コンテナー化されたイメージをビルドするもう 1 つの方法は、手作業で対話的に作成する方法です。この方法では、実行中のコンテナー内でアプリとその依存関係を手作業でインストールして構成し、その後でコンテナーをイメージとしてコミットして保存します。

Docker イメージは一連の階層で構成され、各層はアプリケーションのセットのインストール時にディスクに書き込まれる変更とほぼ等しくなっています。Docker はこれらの階層を管理し、イメージが追加または削除されるときに、効率的な保管および再利用が可能となるようにします。例えば、mysql イメージの階層は Linux OS、Perl、共有ライブラリー、MySQL のインストール、MySQL の基本構成で構成されています。

コンテナー化されたイメージにおける階層を示す図
コンテナー化されたイメージにおける階層を示す図

Dockerfile からコンテナー化されたイメージをビルドするにしても、カスタム・コンテナーを手作業で作成するにしても、通常はゼロから始めることはありません。ゼロから始めるのではなく、既存の Dockerfile か Docker Hub のイメージを作業のベースにします。こうすることで、開発者と運用チームは互いの作業をベースにビルドすることができ、有用な一連のイメージの作成と管理においてもコラボレーションすることができます。

イメージをイメージ・リポジトリー (Docker Hub) に送信するコマンドは、docker push です。イメージをローカルで使用するためにダウンロードするコマンドは、docker pull です。

始める前に

Java、Tomcat、Node.js、Python、CouchDB を使って開発するとしても、これらをインストールする必要はありません。こうしたことが、開発ワークフローの中で Docker を使用する利点です。

始める前に、Linux システムに Docker がインストールされて実行されている必要があります。Docker をインストールするには、Linux ディストリビューションのインストールの指示に従います。

Linux システムに直接アクセスしないのであれば、クラウドを利用することができます。ほとんどのクラウド・ホストは、すぐに実行できる状態の仮想プライベート・サーバーや、Linux でプロビジョニングして数分で (SSH または Web ベースのターミナル・ソフトによって) 接続できる仮想マシンを提供しています。これらのホストは通常、Docker に対応しています。

このチュートリアルのサンプルでは、Linux システム上で Docker が実行されていることを前提とします。Mac OS X 上や Linux 以外のシステム上で既に Docker が実行されている場合、コンテナーはハイパーバイザーで仮想化された仮想マシン (大抵は VirtualBox) 内で実行される可能性が高くなります。こうしたケースでは、チュートリアルに従って進めていくにはサンプルに出てくるコマンドを適切に変更する必要があります。

Docker のバージョンを確認する

以下のコマンドを実行することで、Docker のバージョンを確認します。

docker --version

実行しているのが、バージョン 1.8.3 またはそれ以降のバージョンの場合、現時点でシステムはすべて設定されています。Java、Tomcat、Node.js、Python、Apache CouchDB を使って開発するとしても、これらをインストールまたはアンインストールする必要はありません。こうしたことが、開発ワークフローの中で Docker を使用する利点です。

イメージをプルする

Docker Hub からイメージを初めてプルするために pull コマンドを実行する場合、ローカル PC のリポジトリーにイメージをダウンロードしなければなりません。インターネットのアクセス速度によっては、ダウンロードに時間がかかる場合がありますが、それ以降にイメージを使用するのは極めて迅速に行えます。

以下のコマンドを実行し、サンプルで使用するすべてのイメージをプル・ダウンします。

docker pull node:0.10.40

docker pull java

docker pull tomcat:8

docker pull webratio/ant

docker pull python:3.5

docker pull frodenas/couchdb

これらのイメージのそれぞれについての詳細な情報は、Docker Hub の nodejavatomcatwebratio/antpythonfrodenas/couchdb のページにアクセスしてください。

これでセットアップが完了したので、Docker を使用して Node.js アプリケーションを扱う準備が整いました。

サーバー・サイド JavaScript コードの迅速なセットアップと開発

コード・ディストリビューションの javascript ディレクトリー (「ダウンロード」を参照) には、Node.js で作成された Web ストア・サンプル・アプリケーション用のソース・コードが含まれています。元々、Lauren Schaefer 氏によって設計されて作成されたこのアプリでは、Jade Node テンプレート・エンジンとともに Express Web フレームワークを使用しています (このアプリケーションについての詳細な情報は、「Bluemix の基礎: サンプル Node.js アプリをクラウドにデプロイする」を参照してください)。Docker を使用すれば、Node.js やその依存関係をインストールすることなく (またはパッケージ・インストール時の競合をトラブルシューティングする必要もなく)、皆さんのコンピューター上でこのアプリケーションを扱うことができます。

メインのプログラムは app.js にあります。CSS と関連する JavaScript ファイルは javascript/public/static にあります。Jade テンプレートは javascript/view にあります。

以下のコマンドを実行することで、このアプリの Node.js 依存関係をインストールします。

docker run -it --rm --name lllnode -v "$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 npm install

このコマンドによって Node コンテナーが起動され、コンテナー内に現在の app ディレクトリーがマウントされて、アプリ上で npm install が実行されます。

  • 基本となるコマンドは、docker run node:0.10.40 です。このコマンドによって、コンテナー・インスタンスが作成されて、前にプルした node:0.10.40 イメージが実行されます。
  • -it スイッチは、フォアグラウンドのインタラクティブな端末を必要としていることを指定するスイッチです (これとは反対のモードは -d で指定される、(ユーザー・インターフェースから) デタッチされたバックグラウンド・プロセスです)。
  • --rm スイッチは、クリーンアップを指定するスイッチで、コンテナーを終了するとすぐに Docker がコンテナーを削除することを意味します。このスイッチを指定しない場合、コンテナーは停止した状態でディスクに永続化され、中断したポイントからコンテナーを再開することができます。ただし、コンテナーの再開は、コンテナー・インスタンスを削除し忘れたユーザーがディスクを使い果たす原因となることが多々あります。--rm スイッチを指定しない場合には、以下のコマンドを実行することで、停止した状態の古いコンテナーがどれだけ残っているかを確認することができます (その数に驚くかもしれません)。
    docker ps -a
  • --name lllnode オプションは、明示的にコンテナーの名前を指定しています。こうしておくと、他の Docker コマンドでそのコンテナーを参照する際に便利です。明示的にコンテナーの名前を指定しない場合、Docker はテキストを生成し、名前としてコンテナーに割り当てますが、その名前は通常、あまり意味がないものです。また、内部 ID (人間が覚えづらい 16 進数の長い文字列) でコンテナーを参照することもできます。
  • -v "$PWD":/usr/src/myapp オプションによって、ボリューム・マウントが作成されて、コンテナーの内部に現在の作業ディレクトリー ($PWD) が /usr/src/myapp としてマウントされます。これにより、アプリの Node.js ソース・コード (または現在の作業ディレクトリーにあるその他の Node.js ソース・コード) にコンテナー内部でアクセスすることができます。
  • -w /usr/src/myapp オプションによって、現在実行しているコマンドの作業ディレクトリーが設定されます。この場合、作業ディレクトリーはマウント済みのボリュームに変更されます。
  • docker run コマンドの末尾で指定された npm install コマンドは、作業ディレクトリー上のコンテナー内部で実行されます。これによる実質的な効果として、Node.js やその前提条件をインストールしなくても、カレント・ディレクトリーでコンテナーを通じて npm install が実行されることになります。

コマンド出力では、npm がインストールしている依存関係のすべてを確認することができます。

Node.js アプリの依存関係をインストールしている画面のスクリーンショット
Node.js アプリの依存関係をインストールしている画面のスクリーンショット

依存関係がインストールされたら、コンテナーを通じてアプリを実行することができます。それには以下のコマンドを使用します (コマンドは 1 行で入力します)。

docker run -it --rm --name lllnode --env PORT=8011 --net="host" -v 
"$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 node app.js

このコマンドは前に実行したものと似ていますが、今回コンテナーの内部で実行するコマンドは node app.js であること、そしてこれによってアプリが起動されることに注意してください。

app.js の内容を調べてみると、以下の行が見つかるはずです。

var appEnv = cfenv.getAppEnv();
app.listen(appEnv.port, appEnv.bind, function() {
   console.log("server starting on " + appEnv.url);
});

これらの行によって、Express Web サーバーは PORT 環境変数によって指定されたポートをリッスンするようになります。コンテナー内でこの環境変数を設定するために、先ほど実行した docker コマンドでは --env PORT=8011 オプションを使用しています。

さらに、このコマンドの --net="host" オプションによって、コンテナーがホスト・オペレーティング・システムのネットワーク・スタックを内部で (純粋な開発目的で) 使用するようになります。すると、アプリはホスト上のポート 8011 でリッスンするようになります。

ブラウザーで http://localhost:8011/ にアクセスします。すると、実行中のコンテナーのおかげで「Lauren’s Lovely Landscapes (ローレンのお気に入りの景色)」という写真プリント・ストアが表示されます。

「Lauren’s Lovely Landscapes (ローレンのお気に入りの景色)」の Node.js 版のスクリーンショット
「Lauren’s Lovely Landscapes (ローレンのお気に入りの景色)」の Node.js 版のスクリーンショット

コードを変更したり、バグをフィックスしたりするために、コンテナーはいつでも終了することができます。その後、コンテナーを再び実行すると、開発環境を取り散らかすことなく、数秒ですべてが実行されます。

Node.js から Java EE へ数秒で移行する

Docker が起動されて、ほんの数秒で Node.js アプリが実行されることを確かめられたところで、皆さんはこれよりももっと重量級のものは (例えば、Java EE 開発などは) どのようにして扱うのだろうと不思議に思っているかもしれません。不思議に思っていただけたようなら、嬉しく思います。

皆さんは、私が作成したチュートリアル「Vaadin を使用したフルスタック Java の Web 開発」を読んだばかりで、そのチュートリアルで紹介している Java EE Vaadin サンプルを試してみたくてたまらなくなったとします。その一方で、システムに JDK がインストールされていないからといって、ある日の昼下がりにこのサンプルをいじってみるためだけに JDK をインストールすることで、システムが収拾つかない状態になってしまうことは望んでいないとします。

コード・ダウンロードの java ディレクトリーにある ArticleViewer.war ファイルは、Vaadin のチュートリアルのいくつかの Vaadin UI コンポーネントから成るアプリです。 ArticleViewer.war は、Tomcat 8 サーバー上で Docker を介して実行することができます。そのための最初のステップは、先ほどプルしたイメージから Tomcat 8 コンテナーのインスタンスを起動することです。

docker run -it --rm -p 8888:8080 --name=tomcat_server -v $PWD:/mnt tomcat:8

このコマンドは、おそらく今では皆さんにおなじみでしょう。コンテナーには、参照しやすいように tomcat_server という名前が付けられています。そして現在の作業ディレクトリーは、コンテナー内部に /mnt としてマウントされています。

-p 8888:8080 オプションは、ホスト・システムのポート 8888 をコンテナーの (内部の) ポート 8080 にマッピングするよう、Docker に指示します。tomcat イメージの Dockerfile では、コンテナー内部で Tomcat がポート 8080 をリッスンしていることがわかります。

ブラウザーで http://localhost:8888/ にアクセスします。すると、おなじみの Tomcat 8 サーバーのグリーティング・ページが表示されます。

Docker コンテナー内で実行されている Tomcat のスクリーンショット
Docker コンテナー内で実行されている Tomcat のスクリーンショット

(-it スイッチによって) インタラクティブ・モードでコンテナーを実行し続けていることに注意してください。このモードでは、ログが継続的に標準出力に表示されるため、開発には便利です。

実行中の Docker コンテナーに接続する

現時点で、コンテナー内にマウントされたディレクトリー /mnt は、現在の作業ディレクトリーになっており、ActiveViewer.war はこのディレクトリーの中にあります。

ActiveViewer.war を /mnt から Tomcat 8 の webapps ディレクトリーにコピーします。このディレクトリーでは、自動的にデプロイが行われます。

docker exec tomcat_server cp /mnt/ArticleViewer.war /usr/local/tomcat/webapps

今回は docker run コマンドを使用していませんが、それは tomcat_server コンテナーが既に実行中であるからです。代わりに、実行中のコンテナーに接続して、コマンドを実行します。そこで、docker exec を使用して、コマンド全体の最後の部分に cp /mnt/ArticleViewer.war /usr/local/tomcat/webapps コマンドを指定します。

ArticleViewer アプリのデプロイメントのログを辿って表示するには、tomcat_server ウィンドウ内でログを見ます。

ここで、ブラウザーでアプリの URL — http://localhost:8888/ArticleViewer/ — にアクセスして、実行中のアプリを開きます。左側のリストで記事をクリックすると、右側に記事コンテンツが表示されます。

Docker によって有効にされた、Tomcat 8 上で実行される Vaadin article-viewer アプリのスクリーンショット
Docker によって有効にされた、Tomcat 8 上で実行される Vaadin article-viewer アプリのスクリーンショット

先に進む前に一旦止まって、ちょっと考えてください。皆さんはシステム上に JDK も Tomcat 8 もダウンロードしたり、インストールしたりしませんでしたが、Docker のおかげで本格的な Tomcat 8 サーバー上で数秒以内に Vaadin アプリケーションのコードを実行することができました。

Tomcat 8 用に Java Web アプリを開発してビルドする

今見たように、Docker を使用することでテスト用に Web アプリを簡単にデプロイすることができます。そしてやはり Docker を使用することで、同じく簡単に Java ソース・コードから Web アプリケーションをコンパイルしてビルドすることができ、開発システムを混乱状態に陥れることもなく、前提条件をインストールするために長い時間がかかることもありません。

カレント・ディレクトリーをコード・ディストリビューションの java/LaurenLandscapesJava に変更します。このディレクトリーには、Node.js サンプルで見た Lauren’s Lovely Landscapes アプリの Java 版があります (このコードのより詳細な説明を見たい方は、「Bluemix の基礎: サンプル Java アプリをクラウドにデプロイする」を読んでください)。

build.xml ファイルは、コードをコンパイルして WAR ファイルをビルドするための命令が含まれる、標準的な Apache Ant ビルド・ファイルです。webratio Apache Ant イメージを使用することで、コードに変更を加えた後で (あるいは、その他のタイミングで) 迅速に WAR をコンパイルしてビルドすることができます。

docker run -it --rm -v "$PWD":/mnt webratio/ant bash -c 'cd /mnt; ant'

この時点では、上記 docker run コマンドで理解できない部分はないはずです。このコマンドは、コンテナー内部に /mnt としてマウントされた現在の作業ディレクトリーの中で Ant ビルド・ツールを実行します。Ant は src サブディレクトリー内のすべての Java ソース・コードをコンパイルしてから、WAR ファイルをビルドしてバンドルし、dist サブディレクトリーに lauren.war として配置します。

java/LaurenLandscapesJava/dist ディレクトリーから java ディレクトリーへ lauren.war をコピーします。

cp dist/lauren.war  ..

lauren.war アプリは、以下のコマンドで Tomcat 8 にデプロイすることができます。

docker exec tomcat_server cp /mnt/lauren.war /usr/local/tomcat/webapps

上記コマンドは、実行中の tomcat_server サーバー・コンテナーに接続して、lauren.war ファイルを Tomcat 8 の webapps サブディレクトリーにコピーすることで、自動的にデプロイメントを実行します。

ここで、ブラウザーで http://localhost:8888/lauren/ にアクセスすると、Docker 化された Tomcat 8 上で実行されている Lauren’s Lovely Landscapes の Java 版を見ることができます。

Java から Python へとギアを切り替える

多言語開発者として、Java でのコーディングをやめて、Python の Bottle Web フレームワークによって実現される可能性を探る必要があるとします。インストールの煩わしさや、依存関係の苦しみを味わうことなく、迅速に Python による Web アプリ開発を行えるようにするために、ここでも Docker が役立ちます。

カレント・ディレクトリーをコード・ディストリビューションの python/Laurens.Lovely.Landscapes ディレクトリーに変更します。このディレクトリーには、Bottle Web フレームワーク用に作成された Lauren’s Lovely Landscapes アプリの Python 版があります。views サブディレクトリーには、テンプレート (.tpl ファイル) があります (このコードに関する詳細情報は、「IBM Bluemix DevOps Services の紹介: パート 1 単純なアプリをデプロイして更新する」を読んでください)。関連する Bluemix DevOps Services リポジトリーにもこのコードのバージョンが見つかるはずです。

この Python アプリを (システム上に Python をインストールすることなく) 以下の Docker コマンドによって実行します (このコマンドは 1 行で入力します)。

docker run -it --rm --name lllpython -p 8000:8000 -v "$PWD":/usr/src/myapp -w 
/usr/src/myapp python:3.5 python wsgi.py

ここで、ブラウザーで http://localhost:8000/ にアクセスすると、実行されている Lauren’s Lovely Landscapes アプリの Python 版を見ることができます。

Python で開発すると、コードに変更を加えてテスト用に先ほどのコマンドを再実行するのは簡単です。Docker コンテナーを実行する場合の速度は、ネイティブでインストールされた開発ツールを実行する場合の速度とまったく同様です。

デタッチされたデータベースを追加して起動する

最近の Web アプリケーションのほとんどは、3 つの層が関係しています。クライアントとしてのブラウザー、Express、Tomcat 8、Bottle などの中間層アプリケーション・サーバー、そしてバックエンド・データベースです。Docker を使用することで、開発システム上にインストールしなくてもデータベースを迅速に追加することができます。

この最後のサンプルでは、開発環境に Apache CouchDB データベース・サーバーを追加します。そして CouchDB や Cloudant のコードをローカルでテストするために、IBM Cloudant NoSQL Database に 100 パーセント対応した CouchDB API を使用することができます。

カレント・ディレクトリーをソース・ディストリビューションのデータベース・ディレクトリーに変更します。このディレクトリーには、Lauren’s Lovely Landscapes アプリの高度な Node.js 版があります。この Node.js 版は、CouchDB (または Cloudant) から写真プリント・ストアのインベントリーについての情報をフェッチします。この Web ストアは、入手可能な写真プリントのインベントリーに応じて動的に外観を変更します (このコードについては、「Bluemix の基礎: Node.js アプリに Cloudant NoSQL データベースを追加する」で詳しく調べることができます)。

Apache CouchDB のインスタンスを起動するために、以下の Docker コマンドを使用します (コマンドは 1 行で入力します)。

docker run -d --name couchdb -p 5984:5984 -e COUCHDB_USERNAME=user -e 
COUCHDB_PASSWORD=abc123 -e COUCHDB_DBNAME=prints -v $PWD/data:/data frodenas/couchdb

このコマンドでは、COUCHDB_USERNAMECOUCHDB_PASSWORDCOUCHDB_DBNAME といった環境変数を使用して、コード内で使用される値に対応するようにインスタンスを構成します。現在の作業ディレクトリーは、コンテナー内部に /data としてマウントされます。CouchDB はデータをこのディレクトリーに書き込み、データを失うことなくコンテナーを再起動できるようにします。

このサンプルでは、コンテナーを -it --rm オプションではなく、-d オプションで実行していることに注意してください。-d オプションは、デタッチされた CouchDB インスタンスを起動します。docker ps コマンドを使用すれば、デタッチされた実行中の docker コンテナーをすべて確認することができます。

次に、アプリの Node.js 依存関係をインストールします。

docker run -it --rm --name llldepends -v "$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 npm install

Apache CouchDB インスタンスには、まだデータは保持されていません。以下のコマンドを使用して (コマンドは 1 行で入力します)、dataseeder.js コードを実行すると、Apache CouchDB インスタンス内にドキュメントが作成されて、インベントリーのあるストアに追加されます。

docker run -it --rm --name dataseeder --net="host" -v "$PWD":/usr/src/myapp -w 
/usr/src/myapp node:0.10.40 node dataseeder.js

ポート 8011 で lllnode アプリを実行します。

docker run -it --rm --name lllnode --env PORT=8011 --net="host" -v "$PWD":/usr/src/myapp
-w /usr/src/myapp node:0.10.40 node app.js

ブラウザーで http://localhost:8011/ にアクセスして、Lauren’s Lovely Landscapes ストアを開きます。

オーストラリアの写真プリントが在庫切れであることを示す画面のスクリーンショット
オーストラリアの写真プリントが在庫切れであることを示す画面のスクリーンショット

オーストラリアの写真プリントが在庫切れであることがわかります。この製品カテゴリーが赤で強調表示されており、選択することができなくなっています。

オーストラリアの写真プリントの再ストックをシミュレートするために、Apache CouchDB ドキュメントにアクセスして、インベントリーのレベルを直接変更します。

Apache CouchDB は、保管されているドキュメントにアクセスするための Futon という名前のシンプルな GUI を提供しています。ブラウザーで http://127.0.0.1:5984/_utils/ にアクセスすると、Futon GUI が開きます。

CouchDB Futon GUI のスクリーンショット
CouchDB Futon GUI のスクリーンショット

Futon では、「prints」を選択します。ドキュメントを開いて、インベントリーの項目番号 3 を展開します。オーストラリアの写真プリントをダブルクリックして、編集用のドキュメントを開きます。quan フィールドの値を 0 から 3 に変更します。右側で、小さな緑色のチェック・マーク・アイコンをクリックし、左上で「Save Document (ドキュメントの保存)」をクリックします。

Apache CouchDB で Futon を使用して NoSQL ドキュメントに変更を加えて保存する画面のスクリーンショット
Apache CouchDB で Futon を使用して NoSQL ドキュメントに変更を加えて保存する画面のスクリーンショット

データベース内の個数が更新されたので、http://localhost:8011/ にアクセスしてブラウザー用ページをリロードします。これでストアには、十分に在庫がある状態になっていることを確認できます。オーストラリアの写真プリントは、もう赤くマークはされておらず、選択することができます。

3 層 Web アプリケーションを扱う場合、Docker を使用すると、中間層アプリケーションのコーディング用の開発ワークフローが効率化され、テスト用にバックエンド・データベースを直接ローカルにデプロイするのが容易になります。

まとめ

この競争時代に、開発ワークフローに Docker を組み込むことなく、過ごす手はありません。相互依存する複雑な開発者向けパッケージや開発者向けツールを繰り返しインストールしたりアンインストールしたりする必要をなくすことで、Docker は開発および調査にかかる時間を短くすることができます。Docker を利用して多言語開発 IQ を高めるとともに、開発の生産性も劇的に高めてください。


ダウンロード可能なリソース


関連トピック

  • Docker: このプロジェクトの Web サイトで Docker について詳しく学んでください。
  • Docker Hub: このコミュニティーの Docker イメージ・リポジトリーからイメージをプルしたり、このリポジトリーに独自のイメージをコントリビュートしたりしてください。
  • Bottle: Python 向けの軽量 Web フレームワークである Bottle について詳しく調べてください。
  • IBM Containers for Bluemix: IBM Bluemix 上にホストされたクラウド環境内で Docker コンテナーを実行する方法を調べてください。
  • Linux on Power 向け Docker」: Linux on Power システム上に Docker バイナリーをインストールする手順を理解してください。
  • developerWorks の Web development ゾーンでは、多種多様なリソースを提供しています。
  • さまざまな IBM 製品や IT 業界のトピックに焦点を絞った developerWorks テクニカル・イベントで最新の技術情報を入手してください。
  • Twitter で developerWorks をフォローしてください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source, Java technology
ArticleID=1030361
ArticleTitle=Docker: 今どきの開発者への朗報
publish-date=04282016