初心者向けDocker環境構築
今までWordPressとDockerを併用する形で構築した経験はあったのですが、WordPressなどのCMSを使わずにDocker環境を構築したのが初めてだったので手順と間違いやすいポイントなどをまとめます。
前提条件
・Docker Desktopはインストール済み
・コマンドラインはターミナルを利用(mac)
目次
手順
Docker imageのダウンロード
まずはdocker imageをダウンロードするために下記のコマンドを実行します。
docker image pull httpd
このコマンドでhttpdというdocker imageの最新版をpullすることができます。
docker imageには種類があってApache、Nginxがよく利用されているようです。
Nginxのほうが色々と優れている面があり人気らしいのですが、今回は参考にした記事がApache利用だったこと、とにかく動けばOKという感じだったのでApacheのhttpdをpullしました。
ここで、ちゃんとpullできてるか念のために
docker image ls
とコマンドを実行して結果を確認します。
結果はこちら。
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 8749b388d329 7 days ago 195MB
先程pullしたhttpdがちゃんと表示されてるのでOKです。
httpdイメージでコンテナの作成と起動
下記コマンドをコマンドラインで実行してください。
docker container run -d -p 8090:80 httpd
-p 8090:80を指定することにより、8090ポートをコンテナの80番と紐づけました。
(今回ポート番号を8090としたのは、8080を別のプロジェクトで既に使用していたので8090としました。)
この時点で、http://localhost:8090にアクセスするとIt work!が表示されるはずです。
これは、httpd側のindex.htmlが表示されてるということになります。
このあたり、意味がわからん!という方もおられるかと思うんですが記事全体を読んでいただけたら理解していただけるかと思います。
httpdのルートについて確認
まずはhttpdのコンテナIDを知る必要があるので
docker container ls
を実行してください。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9dc2def106b httpd "httpd-foreground" 23 minutes ago Up 23 minutes 0.0.0.0:8090->80/tcp frosty_g
こんな感じで結果が出てくるので、IDをコピーしておいてください。
私の場合はf9dc2def106bがIDなので
docker exec -it f9dc2def106b /bin/bash
というコマンドを実行します。
実行結果
root@f9dc2def106b:/usr/local/apache2#
ここでlsして中身をみてみると、
root@f9dc2def106b:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
こんな中身がはいってることがわかります。
そして、htdocs > index.htmlの中身を確認してみると、
htdocs > index.htmlが今http://localhost:8090に映し出されている内容「It work!」だということがわかります。
このhtdocs>index.htmlの中身を見たのは、ただの確認なので必ずする必要はありません。
ここまでできたらexitと入力して、コンテナから出ます。
ディレクトリの作成
今自分がいるディレクトリ(作業ディレクトリ)配下に適当なディレクトリを作ります。
今回はdistとしました。
そして、新規作成したdistの中に反映させたいファイル全てを突っ込みます!
反映させたいファイルがまだなくて、
ディレクトリの作成〜ファイル作成までをコマンドで実行する場合は
- cd 作業ディレクトリ(作業ディレクトリに移動)
- mkdr dist(distというフォルダを作る)
- cd dist (↑で作ったdistに移動)
- echo “hogehoge” > index.html
これをコマンドラインで実行すれば、できるはずです。
httpdコンテナのルート指定
docker container runでコンテナを起動するときに-v 以降に反映させたいファイルのパスとApache httpdのルートパス(/usr/local/apache2/htdocs/)をいれることでマウントさせます。
下記コマンドを実行します。
docker container run -d -p 8090:80 -v "[自分の作業ファイルのパス]:/usr/local/apache2/htdocs/" httpd
マウントって何?という感じなんですが、/usr/local/apache2/htdocs/に取り付ける、もしくは紐付ける…というような解釈です。
ここで私はつまづいたのですが、理由は単にパスの指定を間違っていました。
cd 作業ディレクトリ として、そこでコマンドを叩いてたのでなぜかそこからのパスでいいと思い込み…とりあえず、パスが足りてなかったのです。
失敗パターン
docker container run -d -p 8090:80 -v "/hoge/dist:/usr/local/apache2/htdocs/" httpd
こんな感じで実行すると
docker: Error response from daemon: Mounts denied:
The path /hoge/dist is not shared from the host and is not known to Docker.
You can configure shared paths from Docker -> Preferences… -> Resources -> File Sharing.
こんなエラーが出続けます。
正しくは
docker container run -d -p 8090:80 -v /Users/[ユーザー名]/Documents/[home]/hoge/dist:/usr/local/apache2/htdocs/" httpd
というように、パスを最初から記述しなければいけません。
これでhttp://localhost:8090にアクセスしてみると
表示したかったファイルがちゃんと表示されているはずです!
これで完了です!
ちゃんとした手順を踏み、ケアレスミスさえなければとても簡単に仮想化環境を構築することができますね。dockerってすごいです。
参考サイト
https://weblabo.oscasierra.net/docker-httpd-usage/
https://zenn.dev/ikuraikura/articles/a9cf216d31bda937a429
このカテゴリの最新記事
2023.04.19
2024.03.22
2024.05.15
2024.02.14