Skip navigation
2016

VMware Photon OS の、Docker Hub オフィシャルリポジトリが公開されました。

Docker コンテナイメージが「docker pull photon」でダウンロードできます。

 

Three New Official Repos Join the Docker Library

http://blog.docker.com/2016/01/three-new-official-repos-join-the-docker-library/http://blog.docker.com/2016/01/three-new-official-repos-join-the-docker-library/

 

Docker Hub の photon リポジトリ。

https://hub.docker.com/r/library/photon/https://hub.docker.com/r/library/photon/

 

リポジトリの Tag を見ると、現時点(2016/01)でインストーラの ISO イメージが公開されている

Photon OS 1.0 TP2 と、それよりも新しい 1.0 RC が公開されています。

この時点の latest Tag は 1.0RC のイメージに割り当てられています。

dockerhub-photon-repo.png


ということで、Docker Hub オフィシャルのイメージからコンテナを起動してみます。

 

オフィシャル photon イメージからコンテナ起動。

 

Docker ホストは、Photon OS 1.0 TP2 を使用しています。

root [ ~ ]# cat /etc/photon-release

VMware Photon Linux 1.0 TP2

 

今回の Docker ホストは、photon21 というホスト名にしています。

root [ ~ ]# uname -n

photon21

 

Docker Hub のオフィシャルの photon はこれです。

NAME に「/」がなく、OFFICIAL が [OK] になっています。

root [ ~ ]# docker search photon | grep -v /

NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

photon                               Photon OS is a technology preview of a min...   5         [OK]

 

イメージをダウンロード(pull)してみます。

タグなしで「photon」と指定しているので、「photon:latest」がダウンロードされます。

root [ ~ ]# docker pull photon

Using default tag: latest

latest: Pulling from library/photon

2b04b19ccb4f: Pull complete

a7d41096d06c: Pull complete

b12b5ead0dad: Pull complete

library/photon:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.

Digest: sha256:b2848958bab911122e8469411184ab683d8105859497ecb33bb9f3760ace6ce0

Status: Downloaded newer image for photon:latest

 

ダウンロードされました。

root [ ~ ]# docker images photon

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

photon              latest              b12b5ead0dad        2 weeks ago         119.1 MB

 

コンテナを起動してみます。

起動と同時にコンテナの中に入っていることが、プロンプトとホスト名からわかります。

root [ ~ ]# docker run -it photon

root [ / ]# uname -n   ★ここからコンテナの中。

4ee5f47acd72

 

latest から起動したコンテナの Photon OS のバージョンは 1.0 RC になっています。

root [ / ]# cat /etc/photon-release

VMware Photon Linux 1.0-RC

PHOTON_BUILD_NUMBER=09637bc

 

Photon OS では、yum のかわりに tdnf という yum 互換コマンドで RPM パッケージを管理します。

コンテナイメージに登録済みのリポジトリを見てみます。

root [ / ]# tdnf repolist

repo id             repo name                               status

photon              VMware Photon Linux 1.0(x86_64)         enabled

photon-updates      VMware Photon Linux 1.0(x86_64)Updates  enabled

lightwave           VMware Lightwave 1.0(x86_64)            enabled

 

tdnf は、yum と同様のリポジトリ参照設定をします。

今回のコンテナでは、このように設定されていました。

tdnf / yum コマンドを実行しなくても、baseurl に設定されている URL に Web ブラウザなどで

アクセスすると、実際にどのような RPM が用意されているのか確認できます。

root [ / ]# ls /etc/yum.repos.d/

lightwave.repo  photon-iso.repo  photon-updates.repo  photon.repo

root [ / ]# cat /etc/yum.repos.d/photon.repo

[photon]

name=VMware Photon Linux 1.0(x86_64)

baseurl=https://dl.bintray.com/vmware/photon_release_1.0_RC_x86_64

gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY

gpgcheck=1

enabled=1

skip_if_unavailable=True

root [ / ]# cat /etc/yum.repos.d/photon-updates.repo

[photon-updates]

name=VMware Photon Linux 1.0(x86_64)Updates

baseurl=https://dl.bintray.com/vmware/photon_updates_1.0_RC_x86_64

gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY

gpgcheck=1

enabled=1

skip_if_unavailable=True

root [ / ]# cat /etc/yum.repos.d/lightwave.repo

[lightwave]

name=VMware Lightwave 1.0(x86_64)

baseurl=https://dl.bintray.com/vmware/lightwave

gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY

gpgcheck=1

enabled=1

skip_if_unavailable=True

root [ / ]# cat /etc/yum.repos.d/photon-iso.repo

[photon-iso]

name=VMWare Photon Linux 1.0(x86_64)

baseurl=file:///mnt/cdrom/RPMS

gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY

gpgcheck=1

enabled=0

skip_if_unavailable=True

 

ちなみに、このコンテナイメージには、yum は入っていません。

ただし、photon のリポジトリには配置されているので追加インストールすることは可能です。

root [ / ]# yum

bash: yum: command not found

root [ / ]# tdnf list yum

yum.noarch                                  3.4.3-2.ph1rc             photon

 

オフィシャル photon イメージのカスタマイズ。

 

photon では標準で tdnf を使用するようになっているので、

コンテナイメージをカスタマイズするときは、

これまで yum を使用していた手順では、かわりに tdnf コマンドを使用します。

たとえば、docker build ~ するときは、下記のような感じになります。

 

まず、例として httpd をインストールして起動するだけの超簡易的な Dockerfile を作成してみました。

 

Dockerfile の内容

FROM photon

MAINTAINER gowatana

 

RUN tdnf install -y httpd

ENTRYPOINT /usr/sbin/httpd -D FOREGROUND

 

イメージを build してみます。

root [ ~ ]# docker build -t photon-web:1.0 .

Sending build context to Docker daemon 10.75 kB

Step 0 : FROM photon

---> b12b5ead0dad

Step 1 : MAINTAINER gowatana

---> Running in 750719e6d0e2

---> e945a2934d58

Removing intermediate container 750719e6d0e2

Step 2 : RUN tdnf install -y httpd

---> Running in 989cd40787da

 

Installing:

Linux-PAM                       x86_64      1.1.8-2.ph1rc       1011.17 k

krb5                            x86_64      1.12.2-1.ph1rc        3.51 M

e2fsprogs                       x86_64      1.42.9-4.ph1rc        2.67 M

cyrus-sasl                      x86_64      2.1.26-4.ph1rc      548.33 k

apr                             x86_64      1.5.2-5.ph1rc       519.52 k

apr-util                        x86_64      1.5.4-5.ph1rc       394.36 k

openldap                        x86_64      2.4.40-2.ph1rc        1.51 M

httpd                           x86_64      2.4.12-4.ph1rc       12.19 M

 

Total installed size: 22.30 M

 

Downloading:

httpd                                  4692452    100%

openldap                                865721    100%

apr-util                                156350    100%

apr                                     181582    100%

cyrus-sasl                              276100    100%

e2fsprogs                              1051512    100%

krb5                                   1406668    100%

/var/tmp/rpm-tmp.gShFPX: line 3: groupadd: command not found

/var/tmp/rpm-tmp.gShFPX: line 6: useradd: command not found

 

Testing transaction

Running transaction

 

Complete!

---> 9b51afe2abb4

Removing intermediate container 989cd40787da

Step 3 : ENTRYPOINT /usr/sbin/httpd -D FOREGROUND

---> Running in fac2999916a5

---> ccfd44e6ff70

Removing intermediate container fac2999916a5

Successfully built ccfd44e6ff70

 

「photon-web:1.0」が build されました。

root [ ~ ]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE

photon-web          1.0                 ccfd44e6ff70        About a minute ago   147.6 MB

photon              latest              b12b5ead0dad        2 weeks ago          119.1 MB

 

コンテナを起動して curl でアクセスすると、ちゃんと httpd でおなじみの「It works!」ページが返されています。

root [ ~ ]# docker run -d -p 8001:80 photon-web:1.0

a38e5be9e9d27a932d86b08781833a67592e4d36dcc00f9a88179426773fc86f

root [ ~ ]# curl http://localhost:8001/

<html><body><h1>It works!</h1></body></html>

 

ただ、Photon OS はコンテナ用の軽量 OS のため、デフォルトで設定されている photon の tdnf のリポジトリには

あまり RPM が配置されていません。

このイメージは、特定の用途(Lightwave とか)で使用するか、もしくは

カスタマイズするためにいくらか tdnf(yum)のリポジトリを追加する必要がありそうです。

 

以上、Docker Hub オフィシャルの photon イメージについてでした。

ESXi では VM のディスク(VMDKファイル)拡張は簡単にできます。

その VMKD 拡張後にゲスト側ではどうしたらよいか聞かれることが多いので

Linux ゲストを例として、ディスク拡張をやってみます。

 

VMの仮想ディスク拡張の考え方。

仮想ディスクのサイズ拡張は、VMだけでなくゲスト側でも作業が必要です。

下のレイヤから順に拡張作業することになります。

ちなみに、今回はの環境は・・・

  • ESXi は、6.0 U1 。VMバージョンは 11。(vmx-11)
  • VM では「準仮想化」の SCSI コントローラを使用している。
  • ゲスト OS は、Oracle Linux 6.7。 (ただし仮想マシンのタイプは RHEL6)
  • 拡張する VMDK は、VM の「ハードディスク 2」。ゲスト OS では /dev/sdb と認識されている。
  • ゲスト OS では、ディスクは単一パーティション(/dev/sdb1)だけ。
  • ゲスト OS では、/dev/sdb1 に ext4 ファイルシステムを作成している。
  • /dev/sdb では、ゲスト OS での LVM は使用していない。

vmdk-extend.png

 

最初の状態を確認しておきます。

 

OS は、Oracle Linux 6.7 です。RHEL 6.x や CentOS 6.x でも同様な手順が使えるはずです。

[root@ol67-vm01 ~]# cat /etc/oracle-release

Oracle Linux Server release 6.7

 

パーティションを見てみます。

今回、拡張する VMDK は /dev/sdb で、パーティションは /dev/sdb1 です。

[root@ol67-vm01 ~]# cat /proc/partitions | grep sdb

   8       16   10485760 sdb

   8       17   10485744 sdb1

 

今回は sfdisk コマンドでパーティション拡張してみます。

sfdisk でも、初期状態を見ておきます。

※-uM は MB 表示、-uS はセクタ表示です。

[root@ol67-vm01 ~]# sfdisk -l -uM /dev/sdb

 

ディスク /dev/sdb: シリンダ数 10240、ヘッド数 64、32 セクタ/トラック

Units = 1048576 バイトをメガバイト、1024 バイトのブロック、0 から数えます

 

デバイス ブート 始点   終点   MiB  #ブロック   Id  システム

/dev/sdb1         0+ 10239  10240-  10485744   83  Linux

/dev/sdb2         0      -      0          0    0  空

/dev/sdb3         0      -      0          0    0  空

/dev/sdb4         0      -      0          0    0  空

 

[root@ol67-vm01 ~]# sfdisk -l -uS /dev/sdb

 

ディスク /dev/sdb: シリンダ数 10240、ヘッド数 64、32 セクタ/トラック

ユニット = 512 バイトのセクタ、0 から数えます

 

デバイス ブート    始点      終点    #セクタ  Id システム

/dev/sdb1            32  20971519   20971488  83  Linux

/dev/sdb2             0         -          0   0  空

/dev/sdb3             0         -          0   0  空

/dev/sdb4             0         -          0   0  空

 

ファイルシステムは ext4 にしています。だいたい 10 GB です。

[root@ol67-vm01 ~]# df -hT

Filesystem           Type   Size  Used Avail Use% Mounted on

/dev/mapper/vg_ol67min-lv_root

                     ext4    14G  1.7G   12G  14% /

tmpfs                tmpfs  873M     0  873M   0% /dev/shm

/dev/sda1            ext4   477M   72M  376M  16% /boot

/dev/sdb1            ext4   9.8G   23M  9.2G   1% /u01

 

ファイルシステム上のファイルが読み取れることを確認しておきます。

[root@ol67-vm01 ~]# cat /u01/test.txt

abcd

efg

 

 

1. 仮想ディスク(VMDK)の拡張。

 

vSphere Web Client で作業します。

拡張したい VMDK を接続している VM の「設定の編集」の、

「仮想ハードウェア」→「ハードディスク 2」のサイズを増やします。

※逆に、サイズを縮小することはできません。

 

現状では、10GB です。

vmdk-extend-01.png

 

サイズを 20GB に増やしました。

vmdk-extend-02.png

 

VM のサマリ画面でも、容量が 20GB になったことがわかります。

vmdk-extend-03.png

 

2. パーティションの拡張。

 

これは、Linux ゲスト に直接ログインして作業します。

 

まず、ファイルシステムをアンマウントしておきます。

今回、/dev/sdb1 は、/u01 にマウントしています。

※ディレクトリやファイルをつかんでいるアプリケーションなどは停止しておく必要があります。

[root@ol67-vm01 ~]# umount /u01

 

この時点では、まだ VMDK のサイズ拡張が認識されていないはずです。

[root@ol67-vm01 ~]# cat /proc/partitions | grep sdb

   8       16   10485760 sdb

   8       17   10485744 sdb1

 

パーティションテーブルを、いったん再読み込みします。

[root@ol67-vm01 ~]# sfdisk -R /dev/sdb

 

VMDK の拡張が認識されます。

[root@ol67-vm01 ~]# cat /proc/partitions | grep sdb

   8       16   20971520 sdb

   8       17   10485744 sdb1

 

/dev/sdb1 パーティションを拡張します。

今回は、開始セクタ(sfdisk -l -uS 表示の「開始」)が 32 なので、

[root@ol67-vm01 ~]# sfdisk -l -uS /dev/sdb

 

ディスク /dev/sdb: シリンダ数 20480、ヘッド数 64、32 セクタ/トラック

ユニット = 512 バイトのセクタ、0 から数えます

 

デバイス ブート    始点      終点    #セクタ  Id システム

/dev/sdb1            32 20971519   20971488  83  Linux

/dev/sdb2             0         -          0   0  空

/dev/sdb3             0         -          0   0  空

/dev/sdb4             0         -          0   0  空

 

32 セクタから末尾まで拡張してみます。

[root@ol67-vm01 ~]# echo '32,,' | sfdisk -uS /dev/sdb

現在、誰もこのディスクを使っていないかを調べます...

OK

 

ディスク /dev/sdb: シリンダ数 20480、ヘッド数 64、32 セクタ/トラック

古い場面:

ユニット = 512 バイトのセクタ、0 から数えます

 

デバイス ブート    始点      終点    #セクタ  Id システム

/dev/sdb1            32  20971519   20971488  83  Linux

/dev/sdb2             0         -          0   0  空

/dev/sdb3             0         -          0   0  空

/dev/sdb4             0         -          0   0  空

新たな場面:

ユニット = 512 バイトのセクタ、0 から数えます

 

デバイス ブート    始点      終点    #セクタ  Id システム

/dev/sdb1            32  41943039   41943008  83  Linux

/dev/sdb2             0         -          0   0  空

/dev/sdb3             0         -          0   0  空

/dev/sdb4             0         -          0   0  空

警告: ブート可能な基本パーティションがありません

LILO にとっては問題ありませんが、DOS MBR はこのディスクをブートできなく

なってしまいます。

新たなパーティションの書き込みに成功

 

パーティションテーブルを再読み込み中...

 

もし、DOS パーティションを作成または変更したならば -- たとえば /dev/foo7 、

dd(1) をつかって最初の 512 バイトをゼロにして下さい:

dd if=/dev/zero of=/dev/foo7 bs=512 count=1

(詳細は fdisk(8)を見てください。)

 

この時点だと、まだ /dev/sdb1 に作成された ext4 のファイルシステムは拡張されていません。

[root@ol67-vm01 ~]# mount /u01

[root@ol67-vm01 ~]# df -hT /u01

Filesystem     Type  Size  Used Avail Use% Mounted on

/dev/sdb1      ext4  9.8G   23M  9.2G   1% /u01

 

3. ファイルシステムの拡張。

 

引き続き、Linux ゲスト にて作業します。

いちおう、ファイルシステムをアンマウントしておきます。

[root@ol67-vm01 ~]# umount /u01

 

そして、ファイルシステムチェック(e2fsck)を実施した後に、

ファイルシステムを拡張(resize2fs )します。

[root@ol67-vm01 ~]# e2fsck -f /dev/sdb1

e2fsck 1.43-WIP (20-Jun-2013)

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

/dev/sdb1: 12/655360 files (0.0% non-contiguous), 79664/2621436 blocks

[root@ol67-vm01 ~]# resize2fs /dev/sdb1

resize2fs 1.43-WIP (20-Jun-2013)

Resizing the filesystem on /dev/sdb1 to 5242876 (4k) blocks.

The filesystem on /dev/sdb1 is now 5242876 blocks long.

 

これで、ファイルシステムも 20GB に拡張されました。

[root@ol67-vm01 ~]# mount /u01

[root@ol67-vm01 ~]# df -hT /u01

Filesystem     Type  Size  Used Avail Use% Mounted on

/dev/sdb1      ext4   20G   28M   19G   1% /u01

 

もともと配置していたファイルが読み取れています。

[root@ol67-vm01 ~]# cat /u01/test.txt

abcd

efg

 

Linux のディストリビューションや、LVM 利用の有無、ファイルシステムの種類によって

使用するツールやコマンドラインは変わりますが、このような流れで VM のディスク拡張が可能です。

また、実際にディスク拡張をする場合は、

事前に拡張対象ファイルシステムにあるデータのバックアップを取得しておくとよいと思います。

 

以上、VM のディスク拡張についてでした。