入門編DockerfileからNginx環境構築

2016年11月23日

ある程度固定した環境を何度も利用する場合、DockerでDockerfileに開発環境をコードとして設定しておくことで、Dockerfileを元にコンテナImageをビルドすることができます。

一度作成しておけば、githubでの管理・Imageの再利用が容易になります。

今回は、個人的に触る機会が増えましたので、Centos上にNginxを設定することを例にして学習していこうと思います。

スポンサーリンク

今回のゴール

・Centos7コンテナにNginx設定し、Hello Docker!!表示
・Dockerfileの書き方学習

事前準備

・MacにDockerインストール
前回記事MacでDockerはじめました

構築手順

githubからDockerfileを取得し、Imageを作成して、コンテナを起動すれば完了です。

Dockerfile

以下でDockerfile・設定ファイル類を取得。

// 作業フォルダを作成し、クローン
$ git clone https://github.com/yuchimaru/docker-centos7-nginx.git

Image作成

以下でDockerfileからImage作成。

$ cd docker-centos7-nginx
$ docker build -f Dockerfile -t centos7/nginx:ngix001 --no-cache=false .

Nginxコンテナ起動

// Imageの確認
$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
centos7/nginx                 ngix001             d3368ff338f4        14 seconds ago      492.4 MB

// コンテナ起動
$ docker run -d --name web1 -i -t -p 80:80 centos7/nginx:ngix001

// コンテナ起動確認
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                NAMES
XXXXXXX        centos7/nginx:ngix001   "/usr/sbin/nginx -g '"   34 seconds ago      Up 33 seconds       0.0.0.0:80->80/tcp   web1

Web表示確認

ブラウザからlocalhostにアクセス。

以上で、初期設定完了です。

ここからは、各作業の詳細についてです。

各種設定ファイルについて

git cloneすると以下のようなファイルが取得できます。

・Dockerfile:Imageを作成する元になるファイル
・README.md:githubのreadme
・index.html:ブラウザで表示するファイル
・nginx.conf:Nginxの個別設定ファイル

Dockerfileについて

Dockerfileの設定について、以下に記載。

// Dockerfile中身表示
$ cat Dockerfile
FROM centos:7
MAINTAINER YuuichiNishioka <westhillworker@gmail.com>
RUN yum update -y && yum clean all
RUN yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y --enablerepo=nginx nginx
RUN yum swap -y fakesystemd systemd && yum clean all
ADD index.html /var/www/
ADD nginx.conf /etc/nginx/conf.d/
RUN mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
RUN systemctl enable nginx
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

FROM

ベースとなるイメージを設定します。
今回は利用するOSとしてcentosを採用しています。

イメージは、以下Docker Hubから色々なOS/ミドルウェアを利用することができます。

MAINTAINER

Dockerfile作成者名を設定します。

RUN

イメージ上で実行するコマンドを設定します。

今回は、Centosにyumで必要なパッケージをインストールしています。

ADD

ファイルを追加しています。

今回は、webで表示するindex.htmlファイルとnginxの設定ファイルを移動させています。

EXPOSE

ポートをコンテナが実行時にリッスンすることを Dockerに設定しています。

ENTRYPOINT

コンテナが実行するコマンドを設定します。
同様の機能で「CMD」もあり、CMDは「docker run」で上書きも可能です。

index.html

webに表示するタグを設定します。
今回は、簡単に文字だけとなっています。

nginx.conf

通常のnginxでの初期設定では「/etc/nginx/conf.d/default.conf」を利用しますが、今回は、初期ファイルをバックアップして、オリジナルの設定ファイルとしています。

ご自身の利用に応じて、設定ファイルをカスタマイズください。

その他

起動中のコンテナ内の状況を確認したい場合などは、
以下のようにexecコマンドでコンテナに命令を出せます。

// execでコンテナにアクセス
$ docker exec -i -t web1 /bin/bash

まとめ

入門編ということで、割と簡単にnginxの環境を構築することができました。
vagrant upなどで仮想環境を起動時間より、格段にコンテナの起動は早く感じました。

一度Dockerfileを作ってしまえば、多人数での開発環境共有も楽ちんに行えます。

次回は、データベース・webフレームワークあたりのDockerfileを作ってみようと思います。