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