2015.4 VMwareから、コンテナ向けに最適化された軽量 LinuxOS「Photon Linux」が公開されました。
これまで仮想化ハイパーバイザを中心とした製品を開発し、OS とは一定の距離を保っていた VMwareにとって大きな変化といえます。出典:Publickey
今回、vSphere ESXi5.5 の基盤上に Photon Linuxをインストールし、基本的な動作を確認してみました。
Photon Linuxのインストール
VMware Githubから[Photon OS, Tech Preview 2 Full ISO]をダウンロードします。
次のサイトを参考に仮想マシンを作成し、ダウンロードしたイメージをマウントし起動します。
今回は、Photon Full OS (All) を選択します。
再起動後、インストール完了です。
Photon Linuxの環境確認
今回インストールした Photon Linuxのカーネルバージョンは、以下のとおりです。
# uname -a Linux photon 4.0.9 #1-photon SMP Thu Aug 20 19:57:53 UTC 2015 x86_64 GNU/Linux
Photon Linuxのディストリビューションバージョンは、以下のとおりです。
# cat /etc/lsb-release DISTRIB_ID="VMware Photon" DISTRIB_RELEASE="1.0 TP2" DISTRIB_CODENAME=Photon DISTRIB_DESCRIPTION="VMware Photon 1.0 TP2"
Docker のバージョンは、以下のとおりです。
> rpm -q docker docker-1.8.1-1.ph1tp2.x86_64
Photon への SSHログイン
# vi /etc/ssh/sshd_config # 134 行目あたりにある、「PermitRootLogin」を「yes」に変更します。 > PermitRootLogin yes
sshdを再起動します。
# systemctl restart sshd.service
Docker の起動
以下のコマンドで、Docker のサービスを開始します。
# systemctl start docker # systemctl enable docker
Docker イメージのダウンロード
Docker イメージは、コンテナを実行するために必要なアーカイブ*2と、コンテナのメタ情報を持ちます。
多くのベースイメージは Docker Hub Registry で公開されているので、そこからダウンロードするのが一般的です。イメージのダウンロードは、docker pull コマンドを実行します。
(書式) # docker pull {イメージ名}:{タグ名}
初期設定では、Docker レジストリとして「Docker Hub Registry」にアクセスするようになっています。
今回の例では、Ubuntu Linux Dockerイメージの最新版をダウンロードします。*3
# docker pull ubuntu
以下のコマンドで、ダウンロードした Docker イメージの一覧を確認します。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest d55e68e6cc9c 3 weeks ago 187.9 MB
Docker コンテナの作成・実行
docker run コマンドで、コンテナの新規作成と実行の両方を行います。
(書式) # docker run [オプション] [--name {コンテナ名}] {イメージ名}[:{タグ名}] [コンテナで実行するコマンド] [引数]
主なオプション
- 「-d」:バックグラウンドで実行する。(Web サーバー等、常時実行するコンテナで指定)
- 「-i」:コンテナの標準入力を開く。(/bin/bashなどでコンテナを操作する際に指定)
- 「-t」:tty(端末デバイス)を確保する。(/bin/bashなどでコンテナを操作する際に指定)
- 「-p{ホストのポート番号}:{コンテナのポート番号}」:Docker のホストとポートマッピングを構成
今回の例では、Ubuntuイメージからコンテナ「web01」を作成、端末を開き bashを実行します。
# docker run -it --name web01 ubuntu /bin/bash root@ef408ef16c7a:/# コンテナで bash が実行され、プロンプトが表示されます。 一瞬で新規作成~起動まで完了し、コンテナ内で任意の操作ができます。
Web サーバーの「nginx」をコンテナにインストールします。
# apt-get install -y nginx
curlを使用して確認します。
# curl localhost <!DOCTYPE html> <html> <head> <...snip...>
確認が完了したら[Ctrl]+[d]キーで bashプロセスを終了します。
プロセスの終了とコンテナの停止は連動するため、この時点でコンテナ「web01」は停止状態になります。
端末を再度開く場合は、プロセスを起動し docker attach コマンドを使用します。
# docker start web01 # docker attach web01
Docker コンテナの確認
Docker コンテナの一覧は、docker ps コマンドで確認します。
(書式) # docker ps [-a]
docker ps コマンドでは実行中のコンテナのみ表示されますが、「-a」オプションを付加すると、停止中のコンテナも表示されます。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ef408ef16c7a ubuntu "/bin/bash" 10 hours ago Exited (0) 7 minutes ago web01 STATUS で「Up」は実行中、「Exit」は停止を示します。
Docker イメージの作成
上記で作成したコンテナ(web01)から、新しいイメージ(ubuntu_template)を作成してみます。
(書式) # docker commit {コンテナ名}|{コンテナID} [{ユーザー名}/]{イメージ名}
# docker commit web01 user01/ubuntu_template
以下のコマンドで、作成した Docker イメージの一覧を確認します。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE user01/ubuntu_template latest e1f421fdefaf 5 seconds ago 216.5 MB ubuntu latest d55e68e6cc9c 3 weeks ago 187.9 MB
Docker コンテナのバックグラウンド実行
作成したイメージには、nginx が含まれているので、こちらからコンテナを作成、実行してみます。
# docker run -d -p 80:80 --name web02 user01/ubuntu_template /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf 7f5b4a545ba47c356148b78898d74342bd56249bc4d71938648a79279c50c10f 80番ポートを Listen しバックグラウンドで実行するようにオプションを指定します。
バックグラウンドで実行しているため、docker ps コマンドの-aオプションなしでも表示されます。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7f5b4a545ba4 user01/ubuntu_template "/usr/sbin/nginx -g '" About a minute ago Up About a minute 0.0.0.0:80->80/tcp web02
Docker コンテナのの停止
実行中の Docker コンテナは、docker stop で停止します。
(書式) # docker stop {コンテナ名}|{コンテナID}
停止後、docker ps を実行すると表示されなくなります。
# docker stop web02 web02 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker コンテナのの削除
Docker コンテナは docker rm、Docker イメージは docker rmiで削除します。
(書式) # docker rm {コンテナ名}|{コンテナID} # docker rmi {イメージ名}|{イメージID}
今回作成した Docker コンテナを削除します。
# docker rm web01 # docker rm web02
次に Docker イメージを削除します。
# docker rmi user01/ubuntu_template Untagged: user01/ubuntu_template:latest Deleted: e1f421fdefaf4c60018ccd3fbec43483ec8c6d07d3232d8c67293878e5422e6f