Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Dockerfileを活用したDockerイメージの作成

More than 1 year has passed since last update.

本投稿では、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.
$

参考文献

  1. 古賀政純, "Docker実践ガイド 第2版", 2019.
  2. Use tmpfs mounts _ Docker Documentation, https://docs.docker.com/storage/tmpfs/, Online; accessed 9-June-2019.
ksugawara61
都内のIT企業で働いております。 サーバサイド / クライアントサイドいろいろやっています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away