DockerfileでNginxのコンテナを構築

Dockerfileにコンテナの定義を記載してNginxのコンテナイメージを起動するまでの手順です。
他のApacheとかでも似たような手順なので、Dockerfileの書き方というよりは起動までの一連の流れを書きます。

Dockerfileの作成

適当な作業ディレクトリでDockerfileを作成します。


$mkdir nginx
$cd nginx
$vi Dockerfile
FROM centos:centos7
MAINTAINER Your name
ENV container docker
RUN yum -y update && yum clean all
RUN yum swap -y fakesystemd systemd && yum clean all
RUN yum -y install epel-release && yum clean all
RUN yum -y install nginx && yum clean all
ADD nginx.conf /etc/nginx/
RUN echo "Hello World" > /usr/share/nginx/html/index.html
RUN systemctl enable nginx
EXPOSE 8080

$ls
Dockerfile nginx.conf

この例ではADDでホスト側で準備しておいたnginx.confをコンテナ側の/etc/nginx配下にコピーしています。
nginx.confの詳細な定義内容はここでは目的のスコープ外なので記載しません。
適当に必要な設定ファイルを作成してDockerfileと同じディレクトリに配置すればこのDockfileそのままで動作します。
Webコンテンツはサンプルなので"Hello World"をindex.htmlにリダイレクトして作成していますが、ここは環境に合わせて変えていけばいいです。

コンテナのビルド

Dockerfileの内容でコンテナのビルドを行います。


$docker build -f ./Dockerfile -t cenots:c7web01 --no-cache=true .

コンテナの起動と確認

Dockfileでsystemdをインストールしており、コンテナ内でsystemdを利用するのでコンテナ起動時に--privilegedを指定しバックグラウンドで起動します。指定するコマンドは/sbin/initです。
起動したらinspectコマンドでIPアドレスを取得し、curlで"Hello World"が帰ってくればOK。


$docker run -d --privileged --name websrv01 -h websrv01 centos:c7web01 /sbin/init
$docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' websrv01
172.17.0.2
$curl http://172.17.0.2:8080/index.html
Hello World

コンテナに普通にログインしたい場合は下記コマンドでログイン可能です。


$docker exec -it websrv01 /bin/bash