βが取れたbluemixのdockerを使ってみる(基本編)
TRANSCRIPT
BluemixでDockerを使う
S.Hanai 2015/7/3
おことわり 本資料の記載内容は、私が個人的に調べた内容であり、正式な日本IBMのテストやレビューを受けておりません。内容について、できる限り正確を期すよう努めてはおりますが、いかなる明示または暗黙の保証も責任も負いかねます。本資料の情報は、使用先の責任において使用されるべきものであることを、あらかじめご了承ください。
概要
献立
ß βの取れたIBM Containersで、Dockerを使ってみる ß Dockerの使用方法については基本的なところを理解していることが前提で書かれています
βの頃からの違い
ß コマンドラインツールは、iceコマンドからcf tools(現在は、Cloud Foundry CLIと呼ばれている。以降、cf cliと省略)のプラグインに変更
ß これまで通り、iceコマンドも使える ß cf cliのプラグインだと、以下が改善されている
Þ Pythonのインストールが不要 Þ ネイティブのDockerコマンドが使える
コマンドラインツールの インストール
前提条件
ß Docker 1.6以上 ß cf cli 6.11.3以上 ß IBM Containers Cloud Foundry plug-in
今回はクライアント側にUbuntu 14.04 64bitを使用します。 Mac/Windows環境の場合は、VirtualBoxを使用するか、BluemixのVMを使用し
てください。
Dockerのインストール
$ sudo –s # echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list # apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 # apt-get update # apt-get install apparmor lxc-docker # usermod -a -G docker shanai
自分のユーザ名
グループ設定を反映させるため、一度ログオフしてログインし直します
cf cliをインストール
ß 念のため古いものを削除 $ sudo apt-get remove cf-cli
ß https://github.com/cloudfoundry/cli/releases から、Debian 64bitを入手します(現在は、v6.12.0) wget -O cf_cli.deb https://cli.run.pivotal.io/stable?release=debian64&version=6.12.0
ß インストール $ sudo dpkg –i cf_cli.deb $ cf –version cf version 6.12.0-8c65bbd-2015-06-30T00:10:31+00:00
IBM Containers Cloud Foundry plug-in のインストール
ß 以下を実行 $ cf install-plugin http://static-ice.ng.bluemix.net/ibm-containers-linux_x64
ß 確認 $ cf plugins Listing Installed Plugins... OK Plugin name Version Command name Command Help IBM-Containers 0.8.598 ic IBM-Containers Plugin
ログイン
CFのログイン
$ cf login API endpoint: https://api.ng.bluemix.net Email> [email protected] Password> Authenticating... OK Targeted org [email protected] ... API endpoint: https://api.ng.bluemix.net (API version: 2.27.0) User: [email protected] Org: [email protected] Space: dev
普段Bluemixへのログインに使用しているもの
レポジトリ名前空間の作成 $ cf ic namespace set 名前空間名
registry.ng.bluemix.net/自分が付けた名前空間名 がレポジトリのURLとなります。Bluemix内で一意な名前でなければなりません。
一度設定したら変更できません!!! 慎重に名前を選んでください
$ cf ic namespace set ruimo2 Command failed - Could not connect to IBM Containers Cannot assign namespace to org: ruimo2. Namespace is already set to: ruimo
$ cf ic namespace get ruimo
registry.ng.bluemix.net/自分が付けた名前空間名 がレポジトリのURLとなります。以降、ruimoの部分を自分の名前空間名に読み替えてください
IBM Containersへのログイン $ cf ic login ** Retrieving client certificates from IBM Containers ** Storing client certificates in /home/shanai/.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/ruimo
このあとコマンドの実行の仕方が2つ表示される。環境変数を設定することで、dockerコマンドを直接使ってBluemixを操作するようにもできるが、Bluemix以外のDocker環境も使用していると、混乱しそうなので、
今回は環境変数の設定をしない方法を使う
コンテナの実行
試しにibmlibertyを起動
$ cf ic run -p 9080 registry.ng.bluemix.net/ibmliberty 859589e2-56b0-491a-b9e5-9bb9f0060ec9
cf ic runで起動 (ドキュメントによると、registry.ng.bluemix.net/の部分は省略できるはずだが、
2015/7/3時点では指定しないとエラーになる)
$ cf ic psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES859589e2-56b registry.ng.bluemix.net/ibmliberty:latest "" 5 seconds ago Running 9080/tcp sleepy_bardeen
cf ic psで確認
7/3時点、コンテナIDの表示がおかしい
ので注意 コンテナIDの表示に問題があるので、コンテナを対象としたコマンドは、こちらの名前を使用する(cf ic runの時に、--name xxxパラメータで好きなものを指
定できる。省略すると勝手に名前が付く)
public ipの割り当て
ß 2015/7/3時点、cf ic runで実行した時に、public ipが自動で割り当てられるケースと、割り当てられないケースがありました
ß このため、cf ic runした後に、public ipが割り当たっているか確認して、割り当たっていなければ、割り当ててやります
ここにip addressが表示されれば、public ipは割り当てられている
$ cf ic ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 81e3fcf8-458 /ibmliberty:latest "" About an hour ago Running 134.168.1.155:9080->9080/tcp suspicious_lalande
public ipの割り当て
ß もしも割り当たっていなければ、以下のようにして割り当てる
$ cf ic ip request Successfully obtained ip: "134.168.1.155"
ipアドレスを要求
$ cf ic ip bind 134.168.1.155 suspicious_lalande Successfully bound IP
バインドする ipアドレス コンテナ名
ブラウザで確認する
ß 割り当てられたpublic ipにアクセス(ポートは9080)
停止、削除
ß 確認が終わったら、コンテナを停止、削除する $ cf ic stop suspicious_lalande suspicious_lalande
$ cf ic ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 81e3fcf8-458 registry.ng.bluemix.net/ibmliberty:latest "" About an hour ago Shutdown 134.168.1.155:9080->9080/tcp suspicious_lalande
ここがShutdownになるまで待つ
$ cf ic rm suspicious_lalande suspicious_lalande
public imageを動かす
public imageを動かす
ß 2015/7/5時点、public imageを直接実行することはできない
$ cf ic run -d -p 80 registry.hub.docker.com/nginx Error response from daemon: Image not found Invalid IBM-Containers commands or docker commands. Available IBM Containers commands are {login, group, ip, route, volume, namespace, info} In addition, IBM Containers supports native docker cli passthrough, run cf ic help for more details
ß このため、一度自分のprivateレポジトリにコピーしてから実行する
public imageをprivateレポジトリにコピーする
$ cf ic cpi nginx registry.ng.bluemix.net/ruimo/nginx
イメージのコピーコマンド
Docker公式レポジトリでの名前
コピー先のprivateレポジトリ
$ cf ic images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry.ng.bluemix.net/ruimo/nginx latest 691ae02b-147 2 minutes ago 0 B
コピーされた
実行 実行方法はこれまでと同一
$ cf ic run -d -p 80 registry.ng.bluemix.net/ruimo/nginx 37436d34-97f8-4420-b18e-4ba1e691c92d
$ cf ic ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37436d34-97f registry.ng.bluemix.net/ruimo/nginx:latest "" 38 seconds ago Running 80/tcp focused_lovelace
public ipが割り当たっていないので、割り当てが必要
実行
$ cf ic ip list Successfully Connected Number of allocated public IP addresses: 1 IpAddress ContainerId 134.168.1.155
空きIP(空きが無い時は、cf ic ip requestで取得する)
$ cf ic ip bind 134.168.1.155 focused_lovelace Successfully bound IP
割り当て実行
cf ic psで表示されたコンテナ名
確認
今回はport 80を指定したので、IPアドレスのみを指定すればok
自分でDockerfileを作る場合
自分でDockerfileを作る
FROM ubuntu:14.04 MAINTAINER Shisei Hanai<[email protected]> RUN \ apt-get update && \ apt-get install -y nginx && \ echo 'It works' > /usr/share/nginx/html/index.html EXPOSE 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
nginxを使って静的コンテンツを公開するDockerfile
ビルド
$ docker build -t ruimo/mynginx .
Dockerfileが存在するディレクトリで実行
ローカルで確認
$ docker run -d -p 80:80 ruimo/mynginx
起動したらブラウザで確認 (GUIが無い時は、sshでポート転送するか、w3mなどで確認する) 左は w3m http://localhost を実
行した結果 w3mは、sudo apt-get install w3m
でインストールできる
Bluemixのprivateレポジトリにdocker imageをコピー
ß ドキュメント上は、cf ic cpiでローカルのイメージをコピーできるように読めるが、2015/7/3時点では、Docker公式レポジトリにあるものしかコピーできない
ß このため、再度ビルドを行う $ cf ic build -t ruimo/mynginx .
$ cf ic images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry.ng.bluemix.net/ruimo/mynginx latest 07c04479-39c 2 minutes ago 0 B
2015/7/3時点、ビルド中になぜか" ---> Running in 48d403e628cd"と表示されて実行が始まってしまうことがある。この場合は、Ctrl+Cで中断してリトライ
する。
Bluemix上で実行
$ cf ic run -p 80 registry.ng.bluemix.net/ruimo/mynginx 実行方法は、これまでと同じ
$ cf ic ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7f69ca8-b50 registry.ng.bluemix.net/ruimo/mynginx:latest "" About a minute ago Running 80/tcp compassionate_almeida
$ cf ic ip list Successfully Connected Number of allocated public IP addresses: 1 IpAddress ContainerId 134.168.1.155
$ cf ic ip bind 134.168.1.155 compassionate_almeida Successfully bound IP
実行の確認 ブラウザで確認
今後の予定
ß ボリューム機能 ß コンテナ間リンク機能 ß オートスケール機能