NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

VMware Photon Linux について

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]をダウンロードします。
f:id:FriendsNow:20160104193639p:plain

次のサイトを参考に仮想マシンを作成し、ダウンロードしたイメージをマウントし起動します。
f:id:FriendsNow:20160104193726p:plain

今回は、Photon Full OS (All) を選択します。
f:id:FriendsNow:20160104194004p:plain

再起動後、インストール完了です。
f:id:FriendsNow:20160104194019p:plain

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 ログイン

root ユーザでの SSH ログインを許可します。*1

# 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

*1:Photon では、デフォルトで SSH が有効化されていますが、root ユーザでのログインは禁止されています。

*2:全てのディレクトリ/ファイルを含む

*3:タグ名を指定しない場合、多くのイメージには最新版(Latest)が指定されます。