BluemixでDockerを使ってみた

はじめに

BluemixでDockerコンテナを利用できる「IBM Containers」を使うまでのメモです。

IBM Containersを利用するためのCLIには、IBM Containers Plugin(dockerコマンドのラッパーのような感じ)と、ICE (IBM Containers Extention) (コマンド単体でIBM Containersを操作できる)が用意されていますが、この記事では IBM Containers Plugin の導入から使用方法について記載します。

また、Bluemix利用の前提となる、cfコマンドは導入済みの前提で記載します。

テスト環境

  • Debian (jessie)
  • Docker version 1.8.1, build d12ea79
  • cf version 6.12.2-24abed3-2015-07-15T21:21:01+00:00

IBM Containers Plugin 利用時の前提条件

  • Docker 1.6 or 1.7 (試したところ、1.7.1, 1.8.1でも動きます)
  • Cloud Foundry CLI version 6.11.3以上

IBM Containers Plugin のインストール

まず、cf logoutします。

Linux 64bit 環境の場合は、以下のコマンドでPluginをインストール

$ cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-linux_x64

Attempting to download binary file from internet address...
9188872 bytes downloaded...
Installing plugin /tmp/ibm-containers-linux_x64...
OK
Plugin IBM-Containers v0.8.646 successfully installed.

Pluginがインストールされているか確認

$ cf plugins
Listing Installed Plugins...
OK

Plugin Name      Version   Command Name   Command Help
IBM-Containers   0.8.646   ic             IBM Containers Plugin

ログイン

まず、cf loginでBluemixにログインします。

cf icコマンドが利用できるようになっています。

$ cf ic

USAGE:
 cf ic COMMAND [arg...]

Available IBM-Containers commands:

    build(*)            Build an image from a Dockerfile
(以下省略)

次に、cf ic loginで IBM Containers にログインします。

$ cf ic login
No ice-cfg.ini found on the system. Creating.
** Retrieving client certificates from IBM Containers
Run cf ic namespace set <namespace name> to set the namespace first

すると、namespaceを設定するように言われるので、設定します。

namespaceの設定

IBM Containers 利用時には、Bluemix レジストリー内で固有の namespace の設定が必要です。

次のコマンドで IBM Containers で利用する namespace を設定します。
一度 namespace を設定すると変更できないようなのでご注意ください。

# namespace を knjcode に設定
$ cf ic namespace set knjcode

確認

$ cf ic namespace get
knjcode

namespaceの制約

  • 使用できるのは、小文字、数字、下線 (_) のみ
  • 4 文字から 30 文字までの長さ
  • Bluemix レジストリー内で固有

namespaceの登録については、BluemixのWebダッシュボードから「コンテナーの開始」を選択してもおそらく同様のことができるかと思います。

その後、再度cf ic loginすることで IBM Containers にログインできます。

$ cf ic login
** Retrieving client certificates from IBM Containers
** Storing client certificates in /home/kenji/.ice/certs
Successfully retrieved client certificates
** Authenticating with registry at registry.ng.bluemix.net
Successfully authenticated with registry
Your private Bluemix repository is registry.ng.bluemix.net/knjcode

There are two ways to use the CLI with IBM Containers:

Option 1) This option allows you to use cf ic for managing containers on IBM Containers while still using the docker CLI directly to manage your local docker host.
  Leverage this Cloud Foundry IBM Containers plugin without affecting the local docker environment:


  Example Usage:
  cf ic ps
  cf ic images

Option 2) Leverage the docker CLI directly. In this shell, override local docker environment to connect to IBM Containers by setting these variables, copy and paste the following:
  Notice: only commands with an asterisk(*) are supported within this option

  export DOCKER_HOST=tcp://containers-api.ng.bluemix.net:8443
  export DOCKER_CERT_PATH=/home/kenji/.ice/certs
  export DOCKER_TLS_VERIFY=1

  Example Usage:
  docker ps
  docker images

コマンドの説明に記載されているとおり、cf icの後にDockerのコマンドを指定して使う方法と、IBM Container接続用の環境変数を設定し、dockerコマンド自体の接続先をIBM Containersに変更して使う方法があります。

自分の場合は、ローカルでもDockerサーバを動かしているので、cf icコマンドを使います。

各種コンテナ操作

cf icのあとに続けてDockerのコマンドを入力すれば、だいたい想定通りに動きます。

IBM Containers側でDockerfileからイメージをビルドする場合は、リモートにDockerfileを送信したあとにビルドすることに注意してください。(ローカルのファイルをADDするようなことができないため、必要なコードはGithubから取得する等してリモートでビルドできるように意識する必要があります)

イメージの確認

cf ic imagesで利用可能なイメージを確認します。

$ cf ic images
cf ic images
REPOSITORY                                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.ng.bluemix.net/ibmliberty                latest              2209a9732f35        3 weeks ago         263.6 MB
registry.ng.bluemix.net/ibmnode                   latest              8f962f6afc9a        3 weeks ago         178.9 MB
registry.ng.bluemix.net/ibm-mobilefirst-starter   latest              97513e56aaa7        3 weeks ago         464.9 MB
registry.ng.bluemix.net/ibm-mobilefirst-starter   7.1.0               97513e56aaa7        3 weeks ago         464.9 MB

コンテナ起動時のながれ

試しに、最初からDockerイメージが用意されている、registry.ng.bluemix.net/ibmlibertyを起動してみます。

以降の手順のおおまかな流れは以下の通りです。

  • コンテナの起動
  • パプリックIPの取得(まだの場合)
  • パブリックIPのコンテナへの割り当て

コンテナの起動

ibmlibertyは9080番ポートをlistenしてアプリが起動するため、-p 9080を指定しておきます。

$ cf ic run -p 9080 registry.ng.bluemix.net/ibmliberty:latest
510fc496-a34f-4270-ae31-ac1794469fab

コンテナの状態を確認します。

cf ic ps
CONTAINER ID        IMAGE                                             COMMAND             CREATED             STATUS                   PORTS                           NAMES
510fc496-a34        registry.ng.bluemix.net/ibmliberty:latest         ""                  22 seconds ago      Running 12 seconds ago   9080/tcp                        compassionate_kilby

IPアドレスが割り当てられていないため、取得して割り当てます。

# IPアドレスのリクエスト
$ cf ic ip request
Successfully obtained ip: "134.168.16.122"

# 取得したIPアドレスの確認
$ cf ic ip list
Number of allocated public IP addresses:  1

IpAddress       ContainerId

134.168.16.122

# 取得したIPアドレスを起動したコンテナに割り当てる
$ cf ic ip bind 134.168.16.122 510fc496-a34
Successfully bound IP

再度、コンテナの状態を確認

$ cf ic ps
CONTAINER ID        IMAGE                                             COMMAND             CREATED             STATUS                  PORTS                           NAMES
510fc496-a34        registry.ng.bluemix.net/ibmliberty:latest         ""                  3 minutes ago       Running 3 minutes ago   134.168.16.122:9080->9080/tcp   compassionate_kilby

PORTSの部分が134.168.16.122:9080->9080/tcpとなっており、パブリックIPが割り当てられていることが分かります。

この状態で、134.168.16.122:9080にブラウザ等からアクセスすると起動したコンテナを確認できます。

コンテナの停止

コンテナを停止する場合には、割り当てたIPアドレスをアンバインドしてコンテナを停止・削除します。

# IPアドレスの確認
$ cf ic ip list
Number of allocated public IP addresses:  1

IpAddress       ContainerId

134.168.16.122  510fc496-a34f-4270-ae31-ac1794469fab

# IPアドレスのアンバインド
$ cf ic ip unbind 134.168.16.122 510fc496-a34f-4270-ae31-ac1794469fab
Successfully unbound IP

# コンテナの停止(コンテナ停止まで数秒〜数十秒かかります)
$ cf ic stop 510fc496-a34f-4270-ae31-ac1794469fab
510fc496-a34f-4270-ae31-ac1794469fab

# コンテナの削除(コンテナ停止後に削除できます)
$ cf ic rm 510fc496-a34f-4270-ae31-ac1794469fab
510fc496-a34f-4270-ae31-ac1794469fab

その他

認証エラー発生時

複数環境からログインして利用している関係かとは思いますが、コマンドで認証エラーとなった場合には、cf logincf ic loginを再度実行することで正常に動作します。

プラグインバージョン 0.8.702 について

バージョン 0.8.702 のプラグインは手元では正常に動作しませんでした。一日で 0.8.704 にアップデートされたので、プラグインの不具合かもしれません。同バージョンを利用していて、うまく動かないという方はプラグインをアップデートしてみてください。

コンテナの再起動について

IBM Containersでは、Dockerの--restartオプションは指定できません。コンテナ停止時の再起動が必要な場合はIBM Containersに用意されている、コンテナグループという仕組みを利用します。

詳細は、コンテナー・グループの作成をご確認ください。

IBM Containers Plugin のアップデート

アップデートの有無は以下のコマンドで確認できます。

cf ic update

自動でアップデートされるわけではなく、アップデートの有無が分かるだけのようで、アップデート時には、一旦プラグインを削除して再度インストールすることになります。(2015年8月現在)

参考

スポンサーリンク
レクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル(大)