15
14

More than 3 years have passed since last update.

DockerでWebサーバーを構築する

Last updated at Posted at 2020-05-17

1.Dockerで仮想環境を作成する方法

Dockerをインストールした後、アプリケーションの仮想環境を作成します。
方法は2つあります。

  • Docker Hub からイメージをダウンロードする
  • 自分でコンテナを作成して構築する

今回は、手始めに簡単にできるDocker Hubから作成済みのコンテナをダウンロードして環境を構築します。

2.Docker Hubとは

Docker Hubは、クラウド上に用意されているアプリケーションやサービス・コンテナの配布、公開などを行っています。
運営は、docker社が行っています。
(参考)http://docs.docker.jp/docker-hub/overview.html
サイトにアクセスするにはユーザー登録がいりますが、無償でも参加できます。
また、Docker Hubに登録されているアプリケーションを検索することができます。

3.Docker HubからWebサーバーをダウンロードして構築する

今回は、Webサーバとしてapacheを使用します。

  • dockerが起動していることを確認し、以下のコマンドを実行してダウンロードします。
# docker pull httpd

実行例

# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
afb6ec6fdc1c: Pull complete 
5a6b409207a3: Pull complete 
41e5e22239e2: Pull complete 
9829f70a6a6b: Pull complete 
3cd774fea202: Pull complete 
Digest: sha256:db9c3bca36edb5d961d70f83b13e65e552641e00a7eb80bf435cbe9912afcb1f
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
  • ダウンロードされたことを確認します。
# docker images

実行例

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               latest              d4e60c8eb27a        31 hours ago        166MB
centos              latest              470671670cac        4 months ago        237MB
hello-world         latest              fce289e99eb9        16 months ago       1.84kB

「httpd」 があることを確認します。

4.Webサーバーを起動する。

先ほどダウンロードしたapacheを起動し、動作を確認します。

# docker run -d -p 81:80 httpd

docker コマンドの紹介は別途しますが、ここで意識するオプションは3つです。
 -d   → コマンドをバックグラウンドで実行する
 -p (サーバーのポート):(コンテナのポート) → ポートの紐づけ
       上記の例では、サーバー81番ポートと、コンテナ(httpd)80番ポートを紐づけます。
       つまり、コンテナのWebサーバにアクセスするときは、81番ポートに接続するということになります。
 httpd 実行するイメージ

[root@dockerl ~]# docker run -d -p 81:80 httpd
b8fd34885a6c2828f10f4db4b0dc960688bea07818e9d1013d4da49e5e1e9a1b

実際に、ウェブブラウザでアクセスしてみます。
URLは以下になります。
http://(サーバのIPアドレス):81/

画面が出れば成功です。
ちなみに、私の環境では「It's Works!」というテキストだけの画面が出ました。

5.Webサーバの停止

Dockerのコンテナを停止は以下のようにします。

  • コンテナのコンテナIDを調べる
  • コンテナIDを指定して停止させる
# docker ps

# docker stop (コンテナID)

実行例

# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
b8fd34885a6c        httpd               "httpd-foreground"   6 minutes ago       Up 5 minutes        0.0.0.0:81->80/tcp   eager_noether
# docker stop b8fd34885a6c    # stop の後には、docker psのCONTAINER IDを指定する。
b8fd34885a6c
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
#

docker stop の後のdocker ps でhttpd が消えていれ成功です。

6.コンテナに独自の設定を行う

ダウンロードしたhttpdには、初期設定が入っています。
独自の設定をするにはローカルサーバー上に設定ファイルやコンテンツを保存し、コンテナにそこを参照させます。
その方法は、docekr run の -v オプションを使用します。

 -v "(サーバーのパス):(コンテナに配置するパス)" →ファイル、ディレクトリの紐づけ
      ディレクトリ指定の場合は必ず最後に/ を入れてください。
      /を入れない場合はファイルと認識されるようです。

例)ディレクトリを置き換える

# docker run -d -p 81:80 -v "/tmp/httpdtest/:/usr/local/apache2/htdocs/" httpd

/tmp/httpdtest にindex.html やコンテンツを保存したうえで上記を実行すると、保存したファイルが表示されます。
なお、-v オプション、-pオプションは1つのコマンドで複数選択できます。
例えばコンテンツが複数のディレクトリに分かれている。httpd.conf を変更したいといった場合、
複数のポートを使用している場合にも適用できます。

今回使ったオプションのまとめ

 -d   → コマンドをバックグラウンドで実行する
 -p (サーバーのポート):(コンテナのポート) → ポートの紐づけ
       上記の例では、サーバー81番ポートと、コンテナ(httpd)80番ポートを紐づけます。
       つまり、コンテナにWebサーバにアクセスするときは、81番ポートに接続するということになります。
 -v "(サーバーのパス):(コンテナに配置するパス)" →ファイル、ディレクトリの紐づけ
       パスはディレクトリ指定の場合は必ず最後に/ を入れてください。
       /を入れない場合はファイルと認識されるようです。
 httpd 実行するイメージ

.7参考

dockerやdockerコマンドについての詳細は、下記を参照してください。
  Docker ドキュメント日本語化プロジェクト : http://docs.docker.jp/index.html
  Dockre Docs : https://docs.docker.com/

以上です。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14