本投稿では、Dockerfileを活用して、Apacheが動作するWebサーバ用Dockerイメージを作成します。
1. Dockerfileの準備
Dockerfileに centos 7.5.1804 をベースとして、Apacheをインストールする処理を記述します。
$ cat Dockerfile
FROM centos:7.5.1804
RUN yum install -y httpd iproute && yum clean all
RUN echo "Hello Apache." > /var/www/html/index.html
RUN systemctl enable httpd
2. Dockerイメージの作成
手順1で作成した Dockerfileを活用して、Dockerイメージを作成します。
Dockerイメージ作成時にDockerfileを利用する場合は、 -t オプションで活用するDockerfileを指定します。
Dockerイメージの作成
$ docker image build -f ./Dockerfile -t centos:c75apache01 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos:7.5.1804
.
.
.
Step 4/4 : RUN systemctl enable httpd
---> Running in 24b73348522b
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service, pointing to /usr/lib/systemd/system/httpd.service.
Removing intermediate container 24b73348522b
---> f266477d66c2
Successfully built f266477d66c2
Successfully tagged centos:c75apache01
作成したDockerイメージの確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos c75apache01 f266477d66c2 2 minutes ago 257MB
3. Dockerコンテナの起動
手順2で作成したDockerイメージをコンテナで起動します。
以下のコマンドでは --tmpfs オプションを活用し、 /tmp と /run フォルダをメモリ上に展開するようにします。
-p オプションではポートを指定して、ホストOS上で8081番ポートを参照するとDockerコンテナの80番ポートへポートフォワードするように設定することができます。
$ docker container run \
> -itd \
> --tmpfs /tmp \
> --tmpfs /run \
> -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
> --stop-signal SIGRTMIN+3 \
> --name web0001 \
> -h web0001 \
> -p 8081:80 \
> centos:c75apache01 /sbin/init
6e97f6a5313703a2c5c5aa30b741164f096e6a4b97f9c52af2ec5b928a26f512
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e97f6a53137 centos:c75apache01 "/sbin/init" 9 seconds ago Up 8 seconds 0.0.0.0:8081->80/tcp web0001
$ docker container stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
6e97f6a53137 web0001 0.01% 11.94MiB / 1.952GiB 0.60% 5.35kB / 3.25kB 6.67MB / 4.1kB 12
コンテナへのログイン
コンテナ起動後に、 docker container exec コマンドでコンテナへログインし、Apacheが起動していることとドキュメントルートにファイルが展開されていることを確認します。
$ docker container exec -it web0001 /bin/bash
[root@web0001 /]# systemctl status httpd | grep active
Active: active (running) since Sun 2019-06-09 04:53:57 UTC; 3min 9s ago
[root@web0001 /]# cat /var/www/html/index.html
Hello Apache.
[root@web0001 /]#
Apacheの動作確認
ホストOS上で、8081番ポートへhttpアクセスすると上記手順で作成したコンテナ上にあるApacheにアクセスできることが確認できます。
$ curl http://localhost:8081/
Hello Apache.
$
参考文献
- 古賀政純, "Docker実践ガイド 第2版", 2019.
- Use tmpfs mounts _ Docker Documentation, https://docs.docker.com/storage/tmpfs/, Online; accessed 9-June-2019.