Dockerを使ってapache環境を構築

ここではDocker上にapacheの環境を構築していきたいと思います。

apacheのイメージの取得

まずは、apacheのイメージを取得しておきたいと思います。

公式

apacheの公式のイメージは以下になります。

https://hub.docker.com/_/httpd

コマンド

公式のトップに載っているコマンドは以下になります。

docker pull httpd

実行

今回はこの記事を見た方も同じ結果になるようにバージョンを固定しておきます。

docker pull httpd:2.4

コマンドを実行すると以下のようになります。

$ docker pull httpd:2.4
2.4: Pulling from library/httpd
bc51dd8edc1b: Already exists
dca5bc65e18f: Pull complete
ccac3445152a: Pull complete
8515f2015fbc: Pull complete
e35494488b8c: Pull complete
Digest: sha256:b783a610e75380aa152dd855a18368ea2f3becb5129d0541e2ec8b662cbd8afb
Status: Downloaded newer image for httpd:2.4
docker.io/library/httpd:2.4
$

apacheイメージ起動

取得したイメージを起動したいと思います。

コマンド

今回は公式のサイトのサンプルをそのまま実行したいと思います。

docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

実行

コマンドを実行すると以下のようになります。

$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
fee51bf66d653df8768bfb5bafc5e250dc65603e3be0039d724570c25c0beb7a
$

docker psで、以下のようになっていればOKです。

$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                  NAMES
fee51bf66d65        httpd:2.4           "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   my-apache-app
$

コマンド解説

コマンドの内容について見ていきたいと思います。

docker run

上記は特に説明いらないかなと思います。コンテナを起動します。

-dit 

-ditは起動時のオプションです。

dはコンテナをデタッチド・モードで起動するオプションです。バッググラウンドで実行されるようになります。itは対話型モードで起動するオプションです。iとtで分かれているみたいですが、セットで実行することが多いと思います。

--name my-apache-app  

–nameはコンテナの名前の割り当てです。名前は好きにつけて大丈夫です。

-p 8080:80

-pオプションはポートの割り当てです。

上記だとホスト側(dockerコマンドを実行している側)の8080ポートとゲスト側(起動したコンテナ側)の80ポートが紐づいています。ホスト側の8080ポートへのアクセスは、ゲスト側の80ポートに流れることになります。

-v "$PWD":/usr/local/apache2/htdocs/ 

-vオプションはディスクのマウントの設定です。

左側がホスト側のディレクトリ、右側がゲスト側のディレクトリです。

「$PWD」はカレントディレクトリ(現在のディレクトリ)なので、コマンドを実行した際のディレクトリとコンテナ側の「/usr/local/apache2/htdocs/」が紐づくことになります。

httpd:2.4

最後の「httpd:2.4」は起動するイメージの指定です。特に説明はいらないと思います。

コンテナにログイン

起動したコンテナにログインしたいと思います。

コマンド

以下のコマンドでログインします。

docker exec -it my-apache-app /bin/bash

「my-apache-app」は起動時に指定したコンテナの名前になります。もし起動時の指定を変えていたら、その名前に変更してください。

実行

コマンドを実行すると以下のようになります。

$ docker exec -it my-apache-app /bin/bash
root@fee51bf66d65:/usr/local/apache2#

これでログインできました。

HTTPアクセス確認

コンテナにHTTPでアクセスしてみたいと思います。先ほど説明した通り、ホスト側の8080ポートがコンテナに割り当てられているので、8080ポートを指定してアクセスします。

curl

まずはcurlでアクセスしてみます。以下のようになりました。

$ curl http://localhost:8080
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<ul></ul>
</body></html>
$

特にファイルの配置や設定などもしていないので、apacheのデフォルトの表示(ディレクトリ表示)になっています。

ブラウザ表示

ブラウザで見ると以下の感じです。

ページの作成とHTTPアクセス確認

次にファイルを配置して、再度HTTPアクセスしてみます。

ページ(ファイル)作成

起動時にディレクトリのマウントをしているので、ファイルの作成はホスト側で実施できます。

もちろんコンテナ側でファイルを作成しても良いですが、httpdのイメージには最初はviも入っていないので、今回はホスト側でファイルを作成したいと思います。

ホスト側

ホスト側でindex.htmlファイルを作成します。ファイルの中身は適当です。

$ vim index.html
$ cat index.html
Hello World!
$

コンテナ側

先ほど作成したファイルがコンテナ側にも存在することを確認しておきます。

root@fee51bf66d65:/usr/local/apache2# ls /usr/local/apache2/htdocs/
index.html
root@fee51bf66d65:/usr/local/apache2#

ホスト側の更新がコンテナ側に反映されていることが分かります。

HTTPアクセス

ページの作成ができたので、HTTPアクセスしてみます。

curl

今回もまずはcurlでアクセスしてみます。

$ curl http://localhost:8080
Hello World!
$

先ほどと違い、index.htmlの内容が表示されました。

ブラウザ表示

ブラウザで見ると以下のようになりました。

次回

今回は以上としたいと思います。次回は設定ファイル(httpd.conf)を更新して反映することをやっていこうと思います。

コメント

タイトルとURLをコピーしました