はじめに
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をインストール
1 2 3 4 5 6 7 8 |
$ 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がインストールされているか確認
1 2 3 4 5 6 7 |
$ 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
コマンドが利用できるようになっています。
1 2 3 4 5 6 7 8 9 10 |
$ cf ic USAGE: cf ic COMMAND [arg...] Available IBM-Containers commands: build(*) Build an image from a Dockerfile (以下省略) |
次に、cf ic login
で IBM Containers にログインします。
1 2 3 4 5 |
$ 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 を設定すると変更できないようなのでご注意ください。
1 2 3 |
# namespace を knjcode に設定 $ cf ic namespace set knjcode |
確認
1 2 3 |
$ cf ic namespace get knjcode |
namespaceの制約
- 使用できるのは、小文字、数字、下線 (_) のみ
- 4 文字から 30 文字までの長さ
- Bluemix レジストリー内で固有
namespaceの登録については、BluemixのWebダッシュボードから「コンテナーの開始」を選択してもおそらく同様のことができるかと思います。
その後、再度cf ic login
することで IBM Containers にログインできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ 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
で利用可能なイメージを確認します。
1 2 3 4 5 6 7 8 9 |
$ 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
を指定しておきます。
1 2 3 |
$ cf ic run -p 9080 registry.ng.bluemix.net/ibmliberty:latest 510fc496-a34f-4270-ae31-ac1794469fab |
コンテナの状態を確認します。
1 2 3 4 |
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アドレスが割り当てられていないため、取得して割り当てます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 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 |
再度、コンテナの状態を確認
1 2 3 4 |
$ 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アドレスをアンバインドしてコンテナを停止・削除します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 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 login
とcf ic login
を再度実行することで正常に動作します。
プラグインバージョン 0.8.702 について
バージョン 0.8.702 のプラグインは手元では正常に動作しませんでした。一日で 0.8.704 にアップデートされたので、プラグインの不具合かもしれません。同バージョンを利用していて、うまく動かないという方はプラグインをアップデートしてみてください。
コンテナの再起動について
IBM Containersでは、Dockerの--restart
オプションは指定できません。コンテナ停止時の再起動が必要な場合はIBM Containersに用意されている、コンテナグループという仕組みを利用します。
詳細は、コンテナー・グループの作成をご確認ください。
IBM Containers Plugin のアップデート
アップデートの有無は以下のコマンドで確認できます。
1 2 |
cf ic update |
自動でアップデートされるわけではなく、アップデートの有無が分かるだけのようで、アップデート時には、一旦プラグインを削除して再度インストールすることになります。(2015年8月現在)