目次
Photon OS: Linux Container Host
Ⅰ. はじめに
お久しぶり?でしょうか。
ディーネットのよろず請負の深見です。
ここ最近、検証などで Docker をゴソゴソと利用するとことが増えました。
最初は、CentOS環境を用意して、そこに Dcoker環境を構築していましたが、
Photon OSのことを思い出し、手を出すことになりました。
これが、なかなかにお手軽で面白かったので、ご紹介します。
※ご存じの方もいらっしゃるでしょうが、少々お付き合いいただければと思います。
Ⅱ. Photon OS とは?
Photon OS とは、VMware社にて進められた「Project Photon OS™」にて開発された Linux になります。
「Project Photon OS™」は、クラウドネイティブアプリケーション、クラウドプラットフォーム、およびVMwareインフラストラクチャ向けに最適化されたオープンソースの最小限のLinuxコンテナホストです。
1. Photon OS の特徴
- vSphere向けにKernelがチューニングされている
- Linuxカーネルは、Photon OS が vSphere 上での実行時に合わせてパフォーマンスを調整済み。
- コンテナのサポート
- Dockerデーモンが導入済み。
- Mesos と Kubernetes などのコンテナオーケストレーションフレームワークが利用可能。
- 効率的なライフサイクルを管理
- 管理、パッチ、および更新が容易。
- コンテナパッケージのセキュリティパッチやアップデートはタイムリーに更新。
- セキュリティの強化
- セキュアな OS
- カーネルをはじめとするOSは、セキュリティを重視して構築
詳細については、データシート(en)が公開されています。
因みに、最新バージョンは Photon OS 3.0 Revision 2 になります。
2. Photon OS の操作可能な環境
- VMware製品
- VMware vSphere、Workstation Pro、VMware Fusion
- パブリッククラウド
- Microsoft Azure
- Google Compute Engine(GCE)
- Amazon Elastic Computeクラウド(EC2)
- ARM64
- Raspberry pi 3
3. PhotonOSの提供形態
以下の形式で提供
- ISO
- フルインストールIOSと最小インストールISOを提供
- OVA
- 仮想ハードウェアバージョン11で提供
- Amazon Machine Image (AMI)
- Google Compute Engine image
- Azure VHD
-
Raspberry Pi3 Image
- ラズパイでも利用できます。
GitHub にて提供をしています。
https://github.com/vmware/photon/wiki/Downloading-Photon-OS
4. 必要要件
- メモリ(RAM): 2GB(推奨)
- ディスク : 512MB(最小)
- ISOのフルバージョンの場合
- 8GB (Fusion、Workstation)
- 16GB (vSphere)
- ISOのフルバージョンの場合
5. 提供場所
GitHub Project Photon OS™ by VMware
6. Photon OS Wiki
https://github.com/vmware/photon/wiki
英語となりますが、Photon OS の公式に公開されている資料(マニュアル)を確認できます。
7. Photon OS Wiki FAQ
https://github.com/vmware/photon/wiki/Frequently-Asked-Questions
こちらも英語ですが、公式の FAQ になります。
Ⅲ. Photon OS の構築
1. 実施環境
VMware環境に最適化されているので、今回は vSphere 6.0 環境を利用して構築をします。
ホスト環境は以下の通り
- vSphere 6.0環境(vCenter 6.0U3 / ESXi 6.0U3。vSphere の DRS クラスタ構成済み)
- vSAN 6.3(Photon OS VM のデータストアとして利用)
- NSX for vSphere 6.4.3(NSX Edge と論理スイッチなどを利用)
今回のゲスト OS 環境は、
- VMware Photon OS 3.0 (OAV - >Photon OS 3.0 Revision 2 Binaries)
- CPU: 1vCPU
- MEM: 2GB
- DIsk: 16GB
2. Photon OS 環境の構築
● 仮想マシン(PhotonOS)の作成
※ダウンロードした OAV ファイルを利用して、Web Client より仮想マシンを作成しますが、
以降で頻繁に Photon OS 環境を作成するのであれば、このOAV ファイルをテレートに
しておくと良いでしょう。
プロビジョニング タイプ | テンプレートからのデプロイ |
---|---|
ソース テンプレート | Template-PhotonOS-x64-V3.X (任意なテンプレート名) |
仮想マシン名 | photon03.localhost (任意な仮想マシン名) |
フォルダ | (省略) |
クラスタ | manage01 (任意のクラスタ) |
データストア | stor-01 (任意のデータストア) |
ディスク ストレージ | ソースと同じフォーマット |
※以上は、参考例になります。
● 仮想マシン(PhotonOS)の起動
※作成した仮想マシン:Photon OS サーバを起動します。
起動完了までは、しばらくかかります。
ここまでで、Photon OS の仮想マシンできました。
次は、OS 周りの環境を整えていきます。
● Photon OS サーバの各種設定
(1) 初回ログイン
ユーザ:root
パスワード:changeme
※パスワードの変更を求められるので、新しいパスワードを入力
ここでは、任意のパスワードを設定します。
(2) ネットワーク設定
cd /etc/systemd/network
①IPアドレスの設定
vi 10-static-eth0.network
cat 10-static-eth0.network
chmod 644 10-static-eth0.network
[Match]
Name=eth0
[Network]
Address=10.255.3.130/20
Gateway=10.255.0.1
DNS=10.255.2.2
※ IP アドレスを DHCP で自動割り当てができる環境であれば、
この設定は不要ですが、IP アドレスを自動取得できない環境の
場合は、この設定で任意の IP アドレスを割り当てます。
インタフェースのファイル名に注意してください。
mv 99-dhcp-en.network 99-dhcp-en.network_20200624
※念のため、リネームをしておきます。
②ネットワークの再起動
systemctl restart systemd-network
③IPアドレスの確認
ip addr show
※設定した IP アドレスが設定されていることを確認します。
※以降は、SSH接続で操作が可能になります。
ただし、キーボードの配列が US キーボードになるので要注意。
(3) キー配列の変更
※キーボードの配列が US ベースなので jp106 に対応させます。
①キー配列リストの確認
localectl list-keymaps
※この時点では、キーマップは存在しません。
②キー配列のパッケージのインストール
tdnf install kbd
③日本語キーボードに設定
localectl list-keymaps | grep jp106
localectl set-keymap jp106
localectl
※日本語キーボードの設定ができると上記の通りになります。
(4) ホスト名の変更
hostnamectl
root@photon-machine [ ~ ]# hostnamectl
Static hostname: photon-machine
Icon name: computer-vm
Chassis: vm
Machine ID: fa3c925a956742ad99cb919b7bd86170
Boot ID: 40f0f2ca02dd48aeb6ba9f1c93a37e72
Virtualization: vmware
Operating System: VMware Photon OS/Linux
Kernel: Linux 4.19.79-1.ph3-esx
Architecture: x86-64
※ホスト名はデフォルトは、"photon-machine" になっています。
hostnamectl set-hostname photon03.localhost
hostnamectl
root@photon-machine [ ~ ]# hostnamectl
Static hostname: photon03.localhost
Icon name: computer-vm
Chassis: vm
Machine ID: fa3c925a956742ad99cb919b7bd86170
Boot ID: 40f0f2ca02dd48aeb6ba9f1c93a37e72
Virtualization: vmware
Operating System: VMware Photon OS/Linux
Kernel: Linux 4.19.79-1.ph3-esx
Architecture: x86-64
※ホスト名が、設定した "photon03.localhost" になっています。
(5) タイムゾーンと時刻同期の設定
timedatectl
※デフォルトのタイムゾーンは "UTC" になっています。
systemctl status systemd-timesyncd -l
timedatectl list-timezones | grep Asia/Tokyo
timedatectl set-timezone Asia/Tokyo
※タイムゾーンを "Asia/Tokyo" に変更します。
timedatectl
(6) 各種 Linux コマンド(ツール)のインストール
必要そうな Linux コマンドのインストールを行います。
Photon OS では、パッケージ管理を Tiny DNF を使用しています。
基本的は RHLE8 や CentOS8 を利用されたことがあれば、ご存じの
DNF に似ています。
- sudo, wget, git, diff, less, lsof, traceroute のインストール
- sysstat のインストール
tdnf install sudo
tdnf install wget
tdnf install git
tdnf install diffutils
tdnf install less
tdnf install lsof
tdnf install traceroute
※パッケージのインストールのみで利用できます。
tdnf info sysstat
tdnf install sysstat
mkdir /var/log/sa
systemctl status sysstat.service
systemctl start sysstat.service
systemctl status sysstat.service
※sysstat(sar) は RHLE8 や CentOS8 と同じくサービス設定が必要になります。
このように任意に Linux コマンドをインストールできますので、任意に実施してください。
(7) 一般ユーザの作成
必要に応じて、任意の一般ユーザを作成します。
ここでは、denet を作成します。
useradd -m -g docker -G wheel denet
passwd denet
usermod -aG docker denet
(8) パッケージのアップデート
tdnf check-update
tdnf clean all
tdnf upgrade
(9) 仮想マシンの再起動
shutdown -r now
※ここまでで、PhotonOSの仮想マシンの基本準備は完了となります。
※この状態では、ディスク容量は 16GB ですので、容量不足であれば仮想マシンの容量の拡張を行います。
事前に仮想マシンの設定にて、仮想ディスクの容量を追加しておきます。
ここでは、事前に仮想マシンのディスク容量を 16GB から 30GB に拡張しておきます。
→作業後は、サーバの再起動を忘れずに
◎ 特別編:ディスク容量のリサイズ
(10) ディスクのリサイズ
tdnf install parted
※パーティション操作に必要です。
df -h
fdisk -l
parted /dev/sda
df -h
resize2fs /dev/sda3
df -h
root@photon03 [ ~ ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 16G 684M 15G 5% /
devtmpfs 998M 0 998M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 516K 999M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs 1000M 0 1000M 0% /tmp
/dev/sda2 10M 2.2M 7.9M 22% /boot/efi
tmpfs 200M 0 200M 0% /run/user/0
root@photon03 [ ~ ]#
root@photon03 [ ~ ]# fdisk -l
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F25E129F-AC16-4ECB-B235-943B4D0E2560
Device Start End Sectors Size Type
/dev/sda1 2048 10239 8192 4M BIOS boot
/dev/sda2 10240 30719 20480 10M EFI System
/dev/sda3 30720 33554398 33523679 16G Linux filesystem
root@photon03 [ ~ ]#
root@photon03 [ ~ ]# parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 5243kB 4194kB bios_grub
2 5243kB 15.7MB 10.5MB fat16 boot, esp
3 15.7MB 17.2GB 17.2GB ext4
(parted) resizepart 3 100%
resizepart 3 100%
Warning: Partition /dev/sda3 is being used. Are you sure you want to continue?
parted: invalid token: 100%
Yes/No? y
y
End? [17.2GB]? 32GB
32GB
(parted) quit
quit
Information: You may need to update /etc/fstab.
root@photon03 [ ~ ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 16G 684M 15G 5% /
devtmpfs 998M 0 998M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 516K 999M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs 1000M 0 1000M 0% /tmp
/dev/sda2 10M 2.2M 7.9M 22% /boot/efi
tmpfs 200M 0 200M 0% /run/user/0
root@photon03 [ ~ ]#
root@photon03 [ ~ ]# resize2fs /dev/sda3
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sda3 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/sda3 is now 7808660 (4k) blocks long.
root@photon03 [ ~ ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 684M 28G 3% /
devtmpfs 998M 0 998M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 516K 999M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs 1000M 0 1000M 0% /tmp
/dev/sda2 10M 2.2M 7.9M 22% /boot/efi
tmpfs 200M 0 200M 0% /run/user/0
※仮想マシンの再起動
shutdown -r now
Ⅳ. Docker 環境の整備
※Docker 関連については、標準でインストールされています。
ここでは、インストール済みの Docker を起動して、環境を整えていきます。
1. Docker の起動
(1) Docker の起動
docker -v
root@photon03 [ ~ ]# docker -v
Docker version 19.03.10, build 9424aea
※docker インストール済みです。
systemctl enable docker
systemctl start docker
systemctl status docker
root@photon03 [ ~ ]# systemctl start docker
root@photon03 [ ~ ]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: disabl
ed)
Active: active (running) since Wed 2020-06-24 17:01:44 JST; 8s ago
Docs: https://docs.docker.com
Main PID: 429 (dockerd)
Tasks: 8
Memory: 122.6M
CGroup: /system.slice/docker.service
mq429 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.so
ck
Jun 24 17:01:43 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:43.580904803+09:00" level=warning msg="Your kernel does not support cgroup rt runtime"
Jun 24 17:01:43 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:43.580978807+09:00" level=warning msg="Your kernel does not support cgroup blkio weight"
Jun 24 17:01:43 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:43.581036201+09:00" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Jun 24 17:01:43 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:43.581280564+09:00" level=info msg="Loading containers: start."
Jun 24 17:01:43 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:43.721229968+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
Jun 24 17:01:43 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:43.811630720+09:00" level=info msg="Loading containers: done."
Jun 24 17:01:44 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:44.673028319+09:00" level=info msg="Docker daemon" commit=9424aea graphdriver(s)=overlay2 version=19.03.10
Jun 24 17:01:44 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:44.691528714+09:00" level=info msg="Daemon has completed initialization"
Jun 24 17:01:44 photon03.sddc.vpms.jp systemd[1]: Started Docker Application Container Engine.
Jun 24 17:01:44 photon03.sddc.vpms.jp dockerd[429]: time="2020-06-24T17:01:44.752628085+09:00" level=info msg="API listen on /var/run/docker.sock"
※自動起動設定を行って、起動します。
docker --version
docker version
root@photon03 [ ~ ]# docker --version
Docker version 19.03.10, build 9424aea
root@photon03 [ ~ ]#
root@photon03 [ ~ ]# docker version
Client: Docker Engine - Community
Version: 19.03.10
API version: 1.40
Go version: go1.13.3
Git commit: 9424aea
Built: Sat Jun 6 02:18:46 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.10
API version: 1.40 (minimum version 1.12)
Go version: go1.13.3
Git commit: 9424aea
Built: Sat Jun 6 02:21:51 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc9
GitCommit: d736ef14f0288d6993a1845745d6756cfc9ddd5a
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker info
root@photon03 [ ~ ]# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.10
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: d736ef14f0288d6993a1845745d6756cfc9ddd5a
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.19.126-1.ph3-esx
Operating System: VMware Photon OS/Linux
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.951GiB
Name: photon03.sddc.vpms.jp
ID: YII6:56MZ:PECN:7J6C:FJ73:UZ72:SVQA:4O5F:IIC4:SX4S:ODNJ:7THC
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
※引き続き、Docker-Compose をインストールします。
(2) docker-compose の導入
・ダウンロード(最新バージョンをダウンロード)
sudo curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose
root@photon03 [ ~ ]# sudo curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 638 100 638 0 0 768 0 --:--:-- --:--:-- --:--:-- 767
100 11.6M 100 11.6M 0 0 1582k 0 0:00:07 0:00:07 --:--:-- 2416k
・実行権限追加
chmod +x /usr/local/bin/docker-compose
・バージョン確認
docker-compose --version
root@photon03 [ ~ ]# docker-compose --version
docker-compose version 1.26.0, build d4451659
※以上で Docker / Docker Compose が利用できる環境の整備が完了しました。
ここでは、仮想マシンのスペックは 1vCPU / MEM:2GB / Disk:30GB ですので、
必要に応じて仮想マシンのスペックを変更してください。
Ⅴ. おわりに
今回は、Docker 環境を手軽?に構築できる Photon OS をご紹介しました。
普通に CentOS などの汎用な Linux 環境で構築するよりも、かなり手数を省けるかと思います。
今回は、VMware 環境(vSphere 環境)での構築をご紹介しましたが、サポートされているプラットフォームは多いですので、みなさんのお使いの環境でも手軽に利用できると思います。
次回(近い未来で)、今回の環境で Docker 環境の利用例をご紹介できればと思います。
また、次回以降では、AWS 環境でも利用できますので、こちらもご紹介できればと思います。