お知らせ
  • 登録されたお知らせ内容がありません。

Ubuntu 20.04でPHP 7.4とApache 2.4をDockerでインストールするガイド

2022年10月25日
ビュー 49
コメント 0

目次

Ubuntu 20.04でPHP 7.4およびApache 2.4ウェブサーバーをインストールする方法を説明します。このガイドにはioncubeモジュール、php-mysql、php-pear、php-mbstring、php-curl、php-gd、php-imagick、php-xmlrpc、php-geoip、php-zip、php-soap、php-memcache、php-redisモジュールも含まれています。

この文書で説明されているファイルはGitHubリポジトリでも公開されています。GitHubリポジトリも参照してください。

完成したDockerイメージは次のDocker Hubで利用できます。

 

Dockerファイルの作成

Dockerで使用する基本ベースをUbuntu 20.04に設定します。

FROM ubuntu:20.04

APTリポジトリを更新およびアップグレードします。

RUN apt-get update -y
RUN apt-get upgrade -y

日本の時間を使用するために、Ubuntuのタイムゾーン関連パッケージをインストールし、タイムゾーンをAsia/Seoulに変更します。

RUN apt-get install -y tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

デフォルトのUbuntuパッケージをインストールします。

RUN apt-get install -y gcc make telnet whois vim git gettext cron mariadb-client iputils-ping net-tools wget

Apache、PHP、およびPHPの拡張パッケージをインストールします。

RUN apt-get install -y apache2 apache2-utils
RUN apt-get install -y php php-dev libapache2-mod-php composer
RUN apt-get install -y php-mysql php-pear php-mbstring php-curl php-gd php-imagick php-xmlrpc php-geoip php-zip php-soap php-memcache php-redis

PHP Mime関連ライブラリをインストールします。

RUN pear install MIME_Type

Apache SSLを設定するためにSSLを有効化し、デフォルトの証明書をインストールします。

RUN mkdir /etc/apache2/ssl
RUN openssl genrsa -out /etc/apache2/ssl/server.key 2048
RUN openssl req -new -days 365 -key /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.csr -subj "/C=KR/ST=Daejeon/L=Daejeon/O=Docker/OU=IT Department/CN=localhost"
RUN openssl x509 -req -days 365 -in /etc/apache2/ssl/server.csr -signkey /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.crt
RUN sed 's//etc/ssl/certs/ssl-cert-snakeoil.pem//etc/apache2/ssl/server.crt/g' /etc/apache2/sites-available/default-ssl.conf > /etc/apache2/sites-available/default-ssl.conf.tmp
RUN sed 's//etc/ssl/private/ssl-cert-snakeoil.key//etc/apache2/ssl/server.key/g' /etc/apache2/sites-available/default-ssl.conf.tmp > /etc/apache2/sites-enabled/000-default-ssl.conf
RUN rm /etc/apache2/sites-available/default-ssl.conf.tmp -f

Apacheで使用するモジュールを有効にします。

RUN a2enmod ssl
RUN a2enmod cache
RUN a2enmod cache_disk
RUN a2enmod expires
RUN a2enmod headers
RUN a2enmod rewrite

Apacheのデフォルトのindex.htmlを削除し、phpinfo()が含まれたindex.phpをコピーします。index.phpファイルはGitHubリポジトリを参照してください。

RUN rm /var/www/html/index.html
COPY index.php /var/www/html/index.php

Apacheで使用するhttpおよびhttpsの設定ファイルをコピーします。これらの設定ファイルはGitHubリポジトリ(000-default.conf000-default-ssl.conf)を参照してください。

COPY default.conf /etc/apache2/sites-enabled/000-default.conf
COPY default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf

IonCubeモジュールをインストールします

RUN mkdir /root/tmp 
RUN cd /root/tmp
RUN wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz -O /root/tmp/ioncube_loaders_lin_x86-64.tar.gz
RUN tar -zxvf /root/tmp/ioncube_loaders_lin_x86-64.tar.gz -C /root/tmp
RUN cp /root/tmp/ioncube/ioncube_loader_lin_7.4.so /usr/lib/php/20190902
RUN echo "zend_extension = /usr/lib/php/20190902/ioncube_loader_lin_7.4.so" >> /etc/php/7.4/apache2/php.ini
RUN echo "zend_extension = /usr/lib/php/20190902/ioncube_loader_lin_7.4.so" >> /etc/php/7.4/cli/php.ini

CronデーモンおよびApacheサーバーを実行します。

RUN echo 'service cron start
/usr/sbin/apachectl -D FOREGROUND' > /entrypoint.sh

作業ディレクトリ、ボリューム、ポート、およびエントリーポイントスクリプトを設定します。

WORKDIR /var/www/html
VOLUME ["/var/www/html"]
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]

 

Dockerfileのビルド

次のコマンドを入力してDockerfileをビルドします。ビルドされたイメージはwebserverという名前で保存されます。

$ docker build -t webserver . && docker run -it --rm -p 80:80 -p 443:443 webserver

ビルドが完了したら、正常なテストを行うために次のコマンドを入力してください

$ docker run -it --rm -p 80:80 -p 443:443 webserver

正常に実行されると、ウェブブラウザからhttp://127.0.0.1にアクセスできます。 Dockerイメージのビルドに問題がない場合、次のようにphpinfoが表示されます。

これで、コンソールでCtrl+Cをクリックするとサーバーが停止し、テストのために実行したコンテナは自動的に削除されます。

 

Dockerコンテナ

次のコマンドを使用して生成されたDockerイメージで実行します。ウェブサーバーポートは80と443(SSL)、ボリュームはホストディレクトリをDockerイメージの/var/www/htmlにマップします。 --nameオプションでコンテナイメージの名前を設定します。

$ docker run -d -p 80:80 -p 443:443 -v [host directory]:/var/www/html --name=webserver webserver

Docker Buildプロセスをスキップし、筆者が直接作成したDockerイメージを使用してコンテナを実行する場合、次のコマンドを使用してDockerコンテナを実行します。

$ docker run -d -p 80:80 -p 443:443 -v [host directory]:/var/www/html --name=webserver dadyzeus/webserver:ubuntu20.04-php7.4-apache
ポスト統計
今見ているポストの統計データを確認してみてください。
  • ビュー
    49
  • 過去30日間のビュー
    12
関連ポスト
コメント作成