入門編DockerfileからNginx環境構築
ある程度固定した環境を何度も利用する場合、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を作ってみようと思います。