勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法

  サーバー

Cockpitにはcockpit-podmanというPodman(Dockerの後継)をGUIで操作できるアプリケーションがあり、こちらを試してみたい。まずはWebサーバ(Apache)用のコンテナを作成し、ブラウザからアクセスすると「Hello World」が表示される状態まで環境構築する方法をメモ。

 

環境について

VPS

今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。

  • 接続ポート -> 22
  • ユーザ名 -> root
  • パスワード or 秘密鍵 -> インスタンス作成時に選択したもの

AlmaLinux / Apache

詳細なバージョンは以下の通り。

#AlmaLinuxのバージョン確認
cat /etc/redhat-release

#実行結果
AlmaLinux release 8.10 (Cerulean Leopard)

#Apacheのバージョン確認
httpd -v

#実行結果
Server version: Apache/2.4.37 (AlmaLinux)

 

事前準備

Cockpit

Cockpitは過去記事を参考にインストールしておく。また、必要に応じてcockpit-navigator(ファイルマネージャープラグイン)も導入しておく。

VPS

過去記事を参考にユーザーの追加からyumのアップデート(現在だとdnfのアップデート)を済ませておく。

特にPodmanは割り当てるメモリが無いと停止する可能性があるらしいのでスワップ領域は合計3~4GBほど設定する

また、VPS側のページとコンテナ側のページで切り替えて表示できているか試したかったので、VPS側も過去記事を参考にApache2.4系とPHP8.5系をインストールしておいた。

 

作業内容

Podman本体とcockpit-podmanのインストール

サーバのSSH接続し以下コマンドでインストールする。

#(必要に応じて)dnfのアップデート
dnf update

#Podman本体とcockpit-podmanのインストール
sudo dnf install podman cockpit-podman

#Cockpitを再起動
systemctl restart cockpit

この時点でCockpitにアクセスすると左メニューに「Podmanコンテナー」が追加されている筈。

イメージのダウンロード

「Cockpit > Podmanコンテナページ > イメージ欄右側にあるメニューアイコン(縦の三転リーダー、ケバブボタン)」をクリックし、新規イメージのダウンロードを選択する。

ダイアログが開くので以下の通り入力・選択する。

  • 所有者 → システム
  • 検索 → docker.io/library/phpで検索して選択
  • タグ → 8.4-apacheや8.3-apache等を入力

ダウンロードボタンをクリック後、しばらくすると以下のようにダウンロードした項目が表示される筈。

所有者について

システム(root)とCockpitにログインしている一般ユーザーが表示される筈。一般ユーザーを指定した場合、ネットワークポートの設定が必要になったり、パーミッション設定が複雑になるらしい。今回はその辺りはスキップしたいのでシステムを指定する。

検索とタグについて

docker.io/library/phpと8.4-apacheを指定することでApacheとPHP8.4系をまとめて導入できる。タグが8.3-apacheだとPHP8.3系なる。

尚、タグに何も指定しないもしくは「latest」を指定した場合、その時点で最新のPHPがダウンロードできるが、将来的にPHP9等の新しいバージョンが出た際、コンテナを再起動したタイミングでコンテナ内のPHPのバージョンも勝手に上がるらしい。

PHPのマイナーアップデートならともかくメジャーアップデートだと不具合やエラーを起こす可能性が高くなるのでバージョンは指定した方が良さそう。

ディレクトリとファイルの作成

事前にVPS側でコンテナ用のファイルをアップロードするためのディレクトリを作成しておく。今回はわかりやすく「/var/www/html/podman_test_1」とする。

また、Hello World用のファイル(index.html)とphpinfo用のファイル(info.php)を作成しアップロードしておく。念のため以下がディレクトリ、ファイル設置状況。

/var/www/html/podman_test_1/
├index.html
└info.php

コンテナの作成

次に「Cockpit > Podmanコンテナページ > イメージ欄のにあるコンテナーの作成ボタン」をクリックする。

ダイアログが開くので「詳細」タブ内は以下の通り入力、選択する。尚、他のタブ欄も設定が必要なのでまだ「作成を実行する」ボタンはクリックしない

  • 名前 → 任意の名前を入力。今回は分かりやすく「apache-php8.4」
  • 所有者 → システム
  • メモリー制限 → 任意だが今回はチェックを入れて「256MB」
  • その他項目 → デフォルトのまま

次に「インテグレーション」タブに進み、「ポートマッピングの追加」をクリックし以下の通り入力する。

  • IPアドレス → 空のまま
  • ホストポート → 8080
  • コンテナポート → 80
  • プロトコル → TCPのまま

次に「ボリュームの追加」ボタンをクリックし、以下の通り入力する。

  • ホストパス → 事前に作成したコンテナ用のディレクトリ。今回は「/var/www/html/podman_test_1/」
  • コンテナーパス → /var/www/html/
  • モード → チェックをいれたまま

ここまで進んだらダイアログ下部の「作成して実行する」をクリックする。

正常にコンテナが作成された場合、以下のように表示される筈。

ブラウザからアクセス

ブラウザから「【ドメインもしくはIPアドレス】:8080」にアクセスするとHello Worldページが、「【ドメインもしくはIPアドレス】:8080/info.php」にアクセスするとphpinfoが表示され、PHP8.4で動作する点が確認できる筈。

また、VPS側にApacheとPHP8.5をインストールしている場合「【ドメインもしくはIPアドレス】/podman_test_1/info.php」にアクセスするとPHP8.5で動作する点が確認でき、コンテナとVPS側でそれぞれ切り替えて動作している点も確認できる筈。

 

注意点等

コンテナの修正・編集について

後からホストパスやポートを変えたいといったケースが出てくるかと思うが、コンテナは修正や編集は不可となり、削除後に新たに作成しなおす形となる。

こちらは不変なサーバ基盤(Immutable Infrastructure)がコンテナ技術の根本思想のためだとか。

MySQLを追加したいような場合

今回のApache&PHPにMySQLを追加したいような場合、MySQL用のコンテナを作成し、コンテナ同士を接続するような形になる。

 

Podman

公式サイト

https://podman.io/

 

cockpit-podman

公式サイト

https://cockpit-project.org/applications#cockpit-podman

Github

https://github.com/cockpit-project/cockpit-podman

 

所感

コンテナやdockerというのはよく目にしていたが触ったことがなかった(業務上ではレンタルサーバでの作業がほとんどだったため)。

ちょっと触った感じではVPSのOS・アプリケーションテンプレートのようで、さらには導入から起動までのスピードが速く便利そう。

本サイトがAlmaLinux8から9系に移るときはコンテナ運用で良いかも。

あとは実運用の際の負荷(特にメモリ使用量)が気になるところ。

また、ある程度慣れてきたらCockpitからではなくCLIでPodmanを使えるようになっておきたい。

 - サーバー

  関連記事

Cockpitにrootユーザでのログインを禁止する方法
Cockpitにrootユーザでのログインを禁止する方法

先日CockpitにGoogle Authenticatorを用いたワンタイムパ ...

CockpitにGoogle Authenticatorを用いたOtp認証を導入する方法
CockpitにGoogle Authenticatorを用いたOtp認証を導入する方法

Cockpitのセキュリティ対策としてGoogle Authenticatorを ...

サーバ管理ツール「Cockpit」にファイルマネージャー用プラグインを導入する方法
サーバ管理ツール「Cockpit」にファイルマネージャー用プラグインを導入する方法

先日メモしたサーバ管理ツール「Cockpit」にブラウザ上からファイルの作成や編 ...

Cockpitでプログラムの自動実行(systemd timer)設定を行う方法
Cockpitでプログラムの自動実行(systemd timer)設定を行う方法

Cockpitでプログラムの自動実行設定を行いたい。調べたところCronは難しそ ...

サーバー管理をブラウザベース(GUI)で行えるCockpitの導入方法
サーバー管理をブラウザベース(GUI)で行えるCockpitの導入方法

以前にサーバ管理をブラウザ上で行えるWebminについてメモしたが、もっと機能を ...