dockerのubuntu上でwebサーバーを構築

dockerでubuntuのコンテナを起動し、apache、php、perlをセットアップします。

Dockerでubuntuコンテナを起動

まず、ubuntuのコンテナを起動させます。

PS> docker run -tid -p 80:80 --name ubuntu ubuntu:focal

-itオプションがないと、すぐに Exited(0) で終了してしまうので、忘れずに!
起動出来たらコンテナ内のbashに入ります。

PS> docker exec -it ubuntu bash

既存のパッケージを更新

root@c5ebab4975dd:/# apt update
root@c5ebab4975dd:/# apt upgrade -y

apache2をインストール

root@c5ebab4975dd:/# apt install -y apache2

この際、タイムゾーンの設定を求められます。

Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by
presenting a list of cities, representing the time zones in which they are located.

1. Africa   3. Antarctica  5. Arctic  7. Atlantic  9. Indian    11. SystemV  13. Etc
2. America  4. Australia   6. Asia    8. Europe    10. Pacific  12. US
Geographic area: 6

Please select the city or region corresponding to your time zone.

1. Aden      16. Brunei       31. Hong_Kong    46. Kuala_Lumpur  61. Pyongyang      76. Tehran
2. Almaty    17. Chita        32. Hovd         47. Kuching       62. Qatar          77. Tel_Aviv
3. Amman     18. Choibalsan   33. Irkutsk      48. Kuwait        63. Qostanay       78. Thimphu
4. Anadyr    19. Chongqing    34. Istanbul     49. Macau         64. Qyzylorda      79. Tokyo
5. Aqtau     20. Colombo      35. Jakarta      50. Magadan       65. Rangoon        80. Tomsk
6. Aqtobe    21. Damascus     36. Jayapura     51. Makassar      66. Riyadh         81. Ujung_Pandang
7. Ashgabat  22. Dhaka        37. Jerusalem    52. Manila        67. Sakhalin       82. Ulaanbaatar
8. Atyrau    23. Dili         38. Kabul        53. Muscat        68. Samarkand      83. Urumqi
9. Baghdad   24. Dubai        39. Kamchatka    54. Nicosia       69. Seoul          84. Ust-Nera
10. Bahrain  25. Dushanbe     40. Karachi      55. Novokuznetsk  70. Shanghai       85. Vientiane
11. Baku     26. Famagusta    41. Kashgar      56. Novosibirsk   71. Singapore      86. Vladivostok
12. Bangkok  27. Gaza         42. Kathmandu    57. Omsk          72. Srednekolymsk  87. Yakutsk
13. Barnaul  28. Harbin       43. Khandyga     58. Oral          73. Taipei         88. Yangon
14. Beirut   29. Hebron       44. Kolkata      59. Phnom_Penh    74. Tashkent       89. Yekaterinburg
15. Bishkek  30. Ho_Chi_Minh  45. Krasnoyarsk  60. Pontianak     75. Tbilisi        90. Yerevan
Time zone: 79

とりあえず Asia/Tokyo で設定

root@c5ebab4975dd:/# apache2 -k start

これで起動するはずです。ブラウザで localhost を確かめてください。
もし、

apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot

というエラーが出た場合、

root@c5ebab4975dd:/# . /etc/apache2/envvars
root@c5ebab4975dd:/# mkdir /var/run/apache2

で治るはず…

PHPインストール

次にphpをインストールします。

root@c5ebab4975dd:/# apt install -y php

ファイル編集用にvimもインストール

root@c5ebab4975dd:/# apt install -y vim

テスト用にtest.phpを作成し、/var/www/html/に設置します。

<?php
// test.php
phpinfo();
?>
root@c5ebab4975dd:/# apache2 -k restart

Inkedphpinfo

root@4dcdfd32e1e0:/etc/apache2# apachectl -V
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2022-04-26T18:02:11
Server's Module Magic Number: 20120211:88
Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture:   64-bit
<em>Server MPM:     prefork</em>
threaded:     no
    forked:     yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"

デフォルトでは、モジュール版(prefork)で動くようです。

Perlをインストール

perlはデフォルトでインストールされていますが、モジュールを追加する必要があります
a2enmodはdebian系で使えるapacheの便利なコマンドです。

root@c5ebab4975dd:/# a2enmod cgid

そして/etc/apache2/apache2.confを書き換えます。

<Directory /var/www/>
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Require all granted
AddHandler cgi-script .pl .cgi
</Directory>

ExecCGIAddHandler cgi-script .pl .cgiを追加してください
先ほど作成したtest.phpと同じディレクトリ(/var/www/html/)にtest.plを作成します。

// test.pl
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "perl worked!";

1行目と2行目は省略できません。片方でも削除するとエラーになります。
最後にtest.plが単体で実行できるようにパーミッション(権限)を変更します。

root@c5ebab4975dd:/var/www/html# chmod +x test.pl

コメントする