はじめに
前回までの記事ではDocker Hubにアップされているイメージをそのまま使いましたが、今回はDockerfileを使ってカスタマイズしたイメージを利用する方法を備忘録としてまとめてみました。
やりたい事
- AlmaLinux9のイメージをベースにして、Apacheの入ったコンテナを作る。
- 任意のフォルダをマウントして、Apache上でサンプルのHTMLを動作させる。
作成したDockerfile
- OSはAlmaLinux 9を使うため
almalinux:9
と書いていますが、AlmaLinuxの最新版(latest)を使う場合はalmalinux
と指定するだけで良いそうです。- 実際の開発環境だと、しっかりバージョン指定した方が無難だと思います。
- docker run時に実行する
CMD
については、以下のDockerfileでは推奨されている「exec形式」を使っています。-
CMD /usr/sbin/httpd -D FOREGROUND
のような「シェル形式」は非推奨のようです。
-
- EXPOSEで80番ポートを明示的に開放していますが、これはもしかすると不要かもしれません。
Dockerfile
# OSの名前とバージョン
FROM almalinux:9
# 作成するイメージに付けるラベル情報
LABEL maintainter="nkojima" \
version="1.0"
# RUN, CMD, ENTRYPOINT, docker run, execで実行するコンテナプロセスのユーザーを指定する
USER root
# システム全体を更新
RUN dnf update -y
# httpdをインストールして起動
# コンテナは起動後、実行しているプロセスがなかったら停止してしまうためFOREGROUNDで起動する
RUN dnf install -y httpd
RUN systemctl enable httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
# 80番ポートを開放する
EXPOSE 80
イメージの作成(構築)
- Dockerfileのあるフォルダに移動した後、以下のコマンドを実行してDockerfileでカスタマイズしたイメージを作成します。
-
-t
オプションを使い、作成したイメージの名前をalma9_httpd
としました。
PowerShell
PS> docker build . -t alma9_httpd
コンテナの作成と実行
-
前回の記事で書いた方法で任意のフォルダをマウントした上で、コンテナを作成・実行します。
- 前回と違いマウント先が
target=/var/www/html
となっていますが、これはAlmaLinux上のApacheのDocumentRootが/var/www/html
となっているためです。
- 前回と違いマウント先が
PowerShell
PS> docker run --name alma9_test -p 10088:80 -it --mount type=bind,source=D:\test,target=/var/www/html alma9_httpd