メインコンテンツへスキップ

Photon OSによるESXi上のdocker環境の構築

··3 分·
Docker-Compose Docker Esxi
Makoto Morinaga
著者
Makoto Morinaga
技術メモ、コーディング、環境構築のための個人ノート。
目次

ESXi上でDockerを稼動させるために、Photon OSをESXi上に導入します。

Photon OSとは
#

Photon OSはVMwareのインフラに最適されたオープンソースのLinuxコンテナホストであり、以下のような特徴があります。

  • VMware hypervisor向けに最適化
  • コンテナのサポート
  • tdnfによるパッケージ管理
  • セキュリティ強化

Photon OSのダウンロード
#

ESXi上にインストールしますので、ダウンロード対象としてOVAファイルかISOファイルの選択肢があります。

Photon OSのOVA、ISOは以下の特徴がありますので、今回はESXi環境向けにチューニングされたOVAファイルをダウンロードします。

  • OVAインポート: プリインストールされたPhotonOSを取得する。OVAはESXiで簡単にインポートでき、ESXi環境向けにカーネルチューニングがされている。プリインストールされていないパッケージはtdnfを使用してインストールする。
  • ISOインストール:通常のlinuxのインストール方法と同様。

以下のリンクからOVAファイルをダウンロードします。 今回は、 OVA-hw13_uefiを選択します。 Downloading Photon OS · vmware/photon Wiki · GitHub

Photon OSのインストール
#

ESXiのWebUIから新規仮想マシン画面を開いて、「OVFファイルまたはOVAファイルから仮想マシンをデプロイ」を選択して、インストールを進めます。

Photon OSへの初回ログイン
#

OVAでインストールしましたので、rootのパスワードが指定されています。初回ログイン時にパスワード変更が促されますので、適宜変更します。 初回ログインのデフォルト設定は以下の通りです。

設定
ユーザ名 root
パスワード changeme

Photon OSの初期設定
#

必要なパッケージのインストール
#

以下のコマンドで、lesssudoをインストールします。

Terminal
tdnf install less sudo

IPアドレスの固定
#

Photon OSでは、systemd-netowrkdでネットワーク設定がされています。 以下のコマンドでNICのデバイス名を確認します。ここでは、eth0がNICのデバイス名にあたります。

Terminal
networkctl list

<以下出力例>
IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           carrier     unmanaged
  2 eth0             ether              routable    configured

/etc/systemd/network/00-static.networkというファイルを作成して、以下のように編集します。

/etc/systemd/network/00-static.network
 [Match]
 Name=eth0

 [Address]
 Address=192.168.10.11/24

 [Network]
 DNS=192.168.10.254

 [Route]
 Gateway=192.168.10.254

上記は、例としてIPアドレスを192.168.10.11、DNSを192.168.10.254、Gatewayを192.168.10.254とします。

ネットワーク設定ファイルのパラメータは多数ありますが、以下を設定しておけばとりあえず利用できますので、適宜自分のネットワーク環境に合わせて設定します。

パラメータ 内容
Name 設定したいNICのデバイス名
Address サーバのIPアドレス
DNS サーバが参照するDNSのIPアドレス
Gatewary デフォルトゲートウェイ

以下のコマンドで/etc/systemd/network/00-static.networkのアクセス権限を変更します。

Terminal
chmod 644 /etc/systemd/network/00-static.network

デフォルトでDHCPが有効になっていますので、以下コマンドでDHCPを無効化します。

Terminal
sed -i -e "s/yes/no/g" /etc/systemd/network/99-dhcp-en.network

以下のコマンドでサービスを再起動して、ネットワーク設定ファイルの設定を有効化します。

Terminal
systemctl restart systemd-networkd.service

以下のコマンドでIPアドレス情報を確認して、設定したIPアドレスになっていればIPアドレスの固定が完了です。

Terminal
ip a

timezoneの設定
#

以下のコマンドを実行してtimezoneを日本に設定します。

Terminal
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

hostnameの設定
#

以下のコマンドを実行してhostnameを設定します。以下の【ホストネーム】は設定したいhostnameに適宜変更します。

Terminal
echo 【ホストネーム】 > /etc/hostname

一般ユーザの作成
#

以下のコマンドを実行して、一般ユーザを作成します。【ユーザ名】は作成したいユーザ名にします。

Terminal
useradd -m -G wheel 【ユーザ名】

以下のコマンドを実行して、一般ユーザのパスワードを設定します。

Terminal
passwd 【ユーザ名】

今回作成したユーザはwheelグループに追加していますので、sudoが利用できる。これからは管理者権限が必要な作業は、rootアカウントで実施せずにsudoコマンドを利用して一般ユーザから実施します。

rootからログアウトして、sshを使って一般ユーザでログインします。

Firewallの穴空け
#

iptablesがデフォルトで有効になっており、iptablesのデフォルト設定は/etc/systemd/scripts/ip4saveに記載されています。 外部からの接続は、デフォルトではsshの22番ポートしか許可されていません。 適宜、/etc/systemd/scripts/ip4saveに以下のように追記して必要なポートを空けます。

/etc/systemd/scripts/ip4save
## 【ポート番号】は空けたいポート番号
-A INPUT -p tcp -m tcp --dport 【ポート番号】 -j ACCEPT

編集が完了しましたら、以下のコマンドでiptablesのサービスを再起動します。

Terminal
sudo systemctrl restart iptables

sshの設定
#

sshはデフォルトで有効になっていますが、よりセキュリティを高めます。

まず、rootのssh接続を無効化します。 /etc/ssh/sshd_configにてPermitRootLoginの値をnoに変更する。なお、PermitRootLoginの設定が2箇所(1つはコメント)あるので、気をつける。

/etc/ssh/sshd_config
# PermitRootLogin yes
PermitRootLogin no

次にsshのデフォルトポート番号を変更します。 、上述のiptablesの設定で事前に変更するポート番号の外部からの接続を許可しておく必要があります。

ポート番号の変更は、/etc/ssh/sshd_configにて以下のように変更します。

/etc/ssh/sshd_config
# Port 22
Port 50134

rootでのssh接続拒否とポート番号変更を反映するために、以下のコマンドでsshサービスを再起動します。

Terminal
sudo systemctl restart sshd

また、パスワードでのsshログインが有効な状態なので、sshの鍵認証設定の記事を参考に鍵認証に変更します。

ディスク容量の拡張
#

OVAからインポートしましたので、ストレージサイズが16GBになっています。しかし、場合によっては16GB以上が必要になる場合もありますので、拡張します。 割り当てcpu数やメモリはESXiのWebUI上から簡単に変更できますが、ストレージサイズの変更は少し手間がかかります。

まず、仮想OSを停止して、ESXiのWebUIからストレージの割り当てを増やして、仮想OSを起動します(今回は32GBに変更)。

また、このままではPhoton OSを上で拡張した分のストレージ容量を認識できません。 認識させるためには、パーテーションの変更を行います。

まず、パーテーション変更のために、partedをインストールします。

Terminal
sudo tdnf install parted

partedコマンドを実行します。

Terminal
sudo parted

以下のコマンドでディスクの状況を確認します。

Terminal
print free

<以下出力例>
print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 17.2GB
Sector size (logical/physical): 512B/5
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File s
        17.4kB  1049kB  1031kB  Free S
 1      1049kB  11.5MB  10.5MB  fat16
 2      11.5MB  17.2GB  17.2GB  ext4

今回は2番の領域をリサイズします。 以下のコマンドでリサイズします。 コマンド実行後に続行するか聞かれますので、Yesを入力し、終わりの容量を聞かれるので、100%を押下します。

Terminal
resizepart 2

<以下出力例>
resizepart 2
Warning: Partition /dev/sda2 is being used. Are you sure you want to continue?
Yes/No? Yes
Yes
End?  [17.2GB]? 100%

再度、ディスクの状況を確認します。

Terminal
print free

<以下出力例>
print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  11.5MB  10.5MB  fat16              boot, esp
 2      11.5MB  34.4GB  34.3GB  ext4

リサイズに成功していれば、quitでpartedを終了します。

次に以下のコマンドでext4のファイルシステムを拡張します。

Terminal
sudo resize2fs /dev/sda2

以下コマンドでファイルシステムが拡張されていることを確認します(今回は32GB)。

Terminal
df  -h

<以下出力例>
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        32G  601M   30G   2% /
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/sda1        10M  2.2M  7.9M  22% /boot/efi
tmpfs           200M     0  200M   0% /run/user/1000

Dockerの起動設定
#

以下のコマンドでDockerサービスの起動し、自動起動を有効します。

Terminal
sudo systemctl enable docker
sudo systemctl start docker

以下のコマンドでDockerが正常に稼動することを確認します。

Terminal
# Hello from Docker!が出力される
sudo docker run --rm hello-world

# docker imagesの削除
sudo docker rmi hello-world

Docker Composeのインストール
#

以下のリンクを参考に、Docker Composeをインストールします。

Install Docker Compose | Docker Documentation

Docker Composeの安定リリースをダウンロードします。

Terminal
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Docker Composeに実行権限を付与します。

Terminal
sudo chmod 755 /usr/local/bin/docker-compose

上記の手順でPhoton OSでDocker及びDocker Composeが利用できるようになります。

関連記事

ESXi6.5/ESXi7.0でのRDM設定
··1 分
Rdm Esxi
net51-driversからnet55-driversへのアップデート
··1 分
Esxi
NSDとUnboundによる内部向けDNSサーバの構築
··2 分
Unbound Nsd Linux