Photon OS を使って、Docker / Docker Compose 環境を作ってみよう

photonOS-logo-LG

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)

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 3.0 Booting

 ※作成した仮想マシン:Photon OS サーバを起動します。
  起動完了までは、しばらくかかります。

Photon OS Console

ここまでで、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 環境でも利用できますので、こちらもご紹介できればと思います。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA