メモ > サーバ > 各論: Docker > イメージの利用(Apache + PHP 環境の構築)
イメージの利用(Apache + PHP 環境の構築)
ベースとなるイメージが、Docker公式イメージとして利用できる。
Apacheやnginxなど、よく使われるものはたいてい揃っている。(公式以外のイメージもある。)
Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築 - Qiita
https://qiita.com/naga3/items/be1a062075db9339762d
■Apache+PHPのイメージを取得
$ docker container run -d php:8.1-apache … PHP+ApacheのイメージをDocker Hubから取得し、バックグラウンド(-d)でコンテナを起動。
$ docker image ls … 取得したイメージ一覧を表示。
$ docker container ls … 起動しているコンテナ一覧を表示。
「-d」を指定しない場合、フォアグラウンドで起動される。
この場合、プロセスの標準入出力・標準エラーをコンソールに出力する。
■ブラウザで確認
$ docker container run -p 80:80 -d php:8.1-apache … ホストの80番ポートとコンテナの80番ポートを結びつけて、コンテナを起動。
$ docker container ls … 起動しているコンテナ一覧を表示。
ブラウザで以下にアクセスし、「403 Forbidden」が表示されれば成功。
http://127.0.0.1/
■コンテナを終了する場合
$ docker container ls … コンテナのIDを確認。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06256413da0f php:8.1-apache "docker-php-entryp..." 14 minutes ago Up 14 minutes 0.0.0.0:80->80/tcp thirsty_bardeen
957ba4371700 hello-world "/hello" 38 minutes ago Exited (0) 38 minutes ago vigorous_colden
$ docker container rm -f 06256413da0f … ID「06256413da0f」のコンテナを終了する場合。
$ docker container rm -f $(docker container ls -a -q) … すべてのコンテナを終了する場合。
■イメージを削除する場合
$ docker image ls … イメージのIDを確認。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker-whale latest 2f37bab81128 About a minute ago 274.1 MB
hello-world latest 0a6ba66e537a 2 weeks ago 960 B
$ docker image rm 2f37bab81128 … ID「2f37bab81128」のイメージを削除する場合。
■コンテンツを作成
$ docker container run --name php -p 80:80 -d php:8.1-apache … コンテナに「php」という名前を付けて起動。
$ docker container exec -it php bash … phpコンテナのターミナルに接続。
# echo '<?php phpinfo();' > index.php … index.php を作成。(初期状態ではviはインストールされていない。)
ブラウザで以下にアクセスし、phpinfoが表示されれば成功。
http://127.0.0.1/
# exit
$ docker container rm -f $(docker container ls -a -q) … 確認できたら終了。
docker exec -itって実際は何をしてるの?【90日目】 - エンジニアのひよこ_level10
https://www.nyamucoro.com/entry/2018/01/11/224932
■ファイル共有(C:\Users 配下を対象にする)
※Windows側とファイルを共有。
Vagrantとは違い、コンテナを終了させるとデータも初期化されるため、データ保持のためにも。
以下、作業フォルダが C:\Users\refirio であるとする。
docker\test\code\index.php を作成し、以下の内容を記述。
<?php phpinfo() ?>
以下のようにして起動。
$ docker container run --name php -v $PWD/docker/test/code:/var/www/html -p 80:80 -d php:8.1-apache … docker\test\code と /var/www/html を共有。
$ docker container exec -it php bash … phpコンテナのターミナルに接続。
# ls /var/www/html … 同期されたファイルを確認。
# exit
ブラウザで以下にアクセスし、phpinfoが表示されれば成功。
http://127.0.0.1/
$ docker container rm -f $(docker container ls -a -q) … 確認できたら終了。
「$PWD」は現在のフォルダを表す。
$PWD/docker/test/code:/var/www/html をフルパスで指定する場合、以下のようにする。相対パスでは指定できないみたい。
/home/refirio/docker/test/code:/var/www/html
フォルダがWindows領域なら以下のようになる。(Docker Toolboxの使用時など。)
/c/Users/refirio/docker/test/code:/var/www/html
■ファイル共有(C:\Users 配下以外を対象にする)
※Docker Toolboxで検証していたときに発生した問題。
WSL2ならWSL2内にコンテンツを配置すればいいので問題にならない。
C:\Users 配下以外をファイル共有対象にして起動しようとすると、以下のようなエラーになる。
ERROR: for php Cannot start service php: oci runtime error: container_linux.go:262:
starting container process caused "chdir to cwd (\"/var/www/html\") set in config.json failed: no such file or directory"
C:\Users 配下以外を対象にしたい場合、マウントの指定を行う必要がある。
ここでは
・Docker用のマシン名は「default」である。
・C:\localhost\home\test\public_html\docker を作業フォルダにする。
という場合を想定する。
Dockerを起動させている場合、「Oracle VM VirtualBox マネージャ」で「default」の電源をオフにしておく。
VboxManageでVirtualBox共有フォルダを追加する。 (初回のみ実行する。)
>cd C:\Program Files\Oracle\VirtualBox
>VBoxManage sharedfolder add default --name data --hostpath "C:\localhost\home\test\public_html\docker"
「Docker Quickstart Terminal」を起動し、マウントを行う。 (Dockerを起動させるたび実行する。)
docker-machine ssh default 'sudo mkdir -p /c/localhost/home/test/public_html/docker'
docker-machine ssh default 'sudo mount -t vboxsf -o uid=0,gid=0 data /c/localhost/home/test/public_html/docker'
以降は通常どおりの手順で起動できる。
Dockerにホストのフォルダをマウントしたい! - Qiita
https://qiita.com/dojineko/items/f623894ef2436bef890e