Memo

メモ > サーバ > 各論: 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

Advertisement