私は自分の個人的なLinuxサービスのいくつかを長い間コンテナ化したいと思っていました。私はコンテナ化の経験が豊富ですが、自分のアプリケーションに取り掛かることができなかったようです。やっとやった、嬉しい!
このシリーズの最初の記事では、私がコンテナ化したサービスを紹介しました。また、いくつかの落とし穴についても説明しました。リフトアンドシフト、リファクタリング、および書き換えのオプションを検討しました。また、アプリケーションに簡単/中程度/難しい評価を付けました。次に、パート2でWordPressのコンテナ化の経験について説明しました。
ここでは、MediaWikiに取り組みます。これは、Apache、PHP FPM、PHPベースのサービスでもあるため同様です。
編集者注:この記事では、podmanビルドを使用してRed Hat EnterpriseLinux8でコンテナーをビルドすることを前提としています。他のディストリビューションまたは他のツールチェーンで手順を使用できる場合がありますが、いくつかの変更が必要になる場合があります。
MediaWikiの移動
ビルド
MediaWikiは、まったく同じContainerfileから構築されたコンテナイメージで実行されます。 WordPressのセクションで言及されていない小さなことが1つあります。それは、crontabs
をインストールすることです。 およびCronie
。高度なバックアップユーティリティを備えたWordPressとは異なり、MediaWikiでは、バックアップを取得するためにMariaDBデータベースをダンプする必要があるため、cron
が必要です。 。
FROM registry.access.redhat.com/ubi8/ubi-init
MAINTAINER fatherlinux <[email protected]>
RUN yum install -y mariadb-server mariadb php php-apcu php-intl php-mbstring php-xml php-json php-mysqlnd crontabs cronie iputils net-tools;yum clean all
RUN systemctl enable mariadb
RUN systemctl enable httpd
RUN systemctl disable systemd-update-utmp.service
ENTRYPOINT ["/sbin/init"]
CMD ["/sbin/init"]
cron
の利用以外 、Mediawikiはhttpd-php
の特別なものに依存していません コンテナ画像。
[読者も気に入っています:Podmanを使用したルートレスコンテナ]
実行
それでは、WordPressとは少し異なるMediaWikiの実行方法を見てみましょう:
[Unit]
Description=Podman container - learn.fatherlinux.com
[Service]
Type=simple
ExecStart=/usr/bin/podman run -i --read-only --rm -p 8080:80 --name learn.fatherlinux.com \
-v /srv/learn.fatherlinux.com/code/mediawiki:/var/www/html/learn.fatherlinux.com:ro \
-v /srv/learn.fatherlinux.com/config/LocalSettings.php:/var/www/html/learn.fatherlinux.com/LocalSettings.php:ro \
-v /srv/learn.fatherlinux.com/config/learn.fatherlinux.com.conf:/etc/httpd/conf.d/learn.fatherlinux.com.conf:ro \
-v /srv/learn.fatherlinux.com/config/htpasswd:/etc/httpd/conf.d/htpasswd:ro \
-v /srv/learn.fatherlinux.com/config/root-crontab:/var/spool/cron/root:ro \
-v /srv/learn.fatherlinux.com/data/mariadb/:/var/lib/mysql:Z \
-v /srv/learn.fatherlinux.com/data/images/:/var/www/html/learn.fatherlinux.com/images:Z \
-v /srv/learn.fatherlinux.com/data/skins/:/var/www/html/learn.fatherlinux.com/skins:Z \
-v /srv/learn.fatherlinux.com/data/logs/httpd:/var/log/httpd:Z \
-v /srv/learn.fatherlinux.com/data/backups/:/root/.backups:Z \
--tmpfs /etc \
--tmpfs /var/log/ \
--tmpfs /var/tmp \
localhost/httpd-php
ExecStop=/usr/bin/podman stop -t 3 learn.fatherlinux.com
ExecStopPost=/usr/bin/podman rm -f learn.fatherlinux.com
Restart=always
[Install]
WantedBy=multi-user.target
–read-only
でコンテナを実行します および–rm
、WordPressと同じように、一時的なものにします。マウントコード/mediawikiも読み取り専用にバインドしていることに注意してください。別のレイヤードイメージを作成し、MediaWikiコードをそのレイヤーに埋め込むこともできましたが、代わりにバインドマウントすることにしました。多くのPHPアプリは、WordPressのようなパターンを使用しており、コードディレクトリは実行時に書き込み可能であることが期待されています。この設計上の決定により、コンテナーに配置するPHP Webアプリケーションに応じて、コードディレクトリを読み取り専用または書き込み可能にするオプションが意図的に提供されます。同じhttpd-php
イメージはそれらすべてに使用できるため、ソフトウェアサプライチェーンのサイズを縮小できます。 Glibc、OpenSSL、Apache、PHP FPM、またはPHPを更新してセキュリティの問題を修正すると、すべてのPHPアプリケーションは、再起動時に新しい構成を継承します。完璧な世界では、このhttpd-php
を継続的に再構築します 継続的な更新のための優れたテストハーネスを備えたCI/CDシステムのイメージ。
WordPressのような構成ファイルは、実行時に読み取り専用でコンテナーにバインドマウントされます。繰り返しになりますが、これは標準のLAMPサーバーからの優れたセキュリティアップグレードです。
MediaWikiにバインドマウントされたデータディレクトリは他にもあります。理由は次のとおりです:
- data / mariadb –これは簡単です。理由はWordPressと同じです。
- data / images – wikiにアップロードされた画像、PDF、およびその他のファイルを保存します。
- data / skins – WordPressと同様に、MediaWikiはコンテナーの前に設計されました。彼らは、コンテナのような将来の技術の必要性を知ることはできませんでした。 WordPressとは異なり、MediaWikiには、code / mediawiki/skinsディレクトリにあるこのディレクトリに事前入力されたスキンが付属しています。これは、カスタムスキンと組み合わせたデータのコピーです。バインドマウントされた読み取り/書き込みなので、必要に応じて新しいスキンを追加できます。将来的には、これはPodmanの「-vskins:skins:o」オーバーレイオプションで解決される可能性があります。これにより、最初のコードダウンロードに付属する既存のcode / mediawiki/skinsデータの上にカスタムデータを「オーバーレイ」できるようになります。
- データ/ログ– WordPressと同様に、コンテナの外部でログにアクセスしたい。
- データ/バックアップ– WordPressとは異なり、
cron
を使用する必要があります スケジュールに従ってMariaDBデータベースをダンプするジョブ。これらのバックアップはこのディレクトリに配置され、コンテナホストによってオフサイトにコピーされます。
[無料ガイド:DevOpsをわかりやすい英語で説明する方法]
まとめ
だから、それは2番目のサービスです-MediaWiki!おそらくWordPressよりも少し難しいですが、処理できないものは何もありません。この場合、cronie
を追加しました 構成。 systemd
の重要性も明らかです 設定は。
まだ行っていない場合は、WordPressのコンテナ化を振り返ることを忘れないでください。次は、リクエストトラッカーのコンテナ化について説明します。
このシリーズは、CrunchTools.comの「Linuxサービスをコンテナに移動するためのハッカーガイド」に基づいており、許可を得て再発行されています。