Posted at

Docker入門 CentOSとNginxでWebサーバー構築


目的


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

  • コンテナOS: centos7

  • webサーバー: Nginx


Docker


  • コンテナ型の仮想環境構築プラットフォーム

  • VirtualBoxなど仮想マシンに比べて軽量で高速

  • Dockerfileによるコード共有で同一環境の作成が容易

公式ドキュメント

https://docs.docker.com/

公式ドキュメントの日本語化プロジェクト

http://docs.docker.jp/index.html


Dockerfile作成


Dockerfile

FROM centos:7

LABEL maintainer "My Name <mail@foo.bar>"
COPY ./nginx/nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum install -y nginx
CMD ["nginx", "-g", "daemon off;"]

ここでの記述がなにをしているか確認


FROM


  • ベースイメージを指定 以降の命令のベースとなる


  • FROM イメージ FROM イメージ:タグ のように記述する

  • Dockerfileはコメント以外では必ず FROM から開始する


  • FROM は複数指定可能


LABEL


  • メタデータの記述

  • 本例ではmaintainer(Author)を記述した

  • 任意項目のため必要な分だけ記述する


COPY


  • ローカルのファイルをコンテナにコピーする

centosにnginxのリポジトリが登録されてない場合にNo package nginx availableエラーが発現しインストールできないため、本例3行目の記述でリポジトリを追加する

ローカルにリポジトリ追加記述ファイルを作っておく


nginx/nginx.repo

[nginx]

name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1


RUN


  • コマンドを実行する

  • イメージのビルド(docker build)時に実行される

  • シェル形式・exec形式での記述が可能

  • 本例ではcentos7にnginxをyum installする

RUN yum install -y nginx


CMD


  • コマンドを実行する

  • buildされたイメージからコンテナを作成(docker run)するときに実行される

  • 推奨フォーマットはexec形式 CMD ["実行バイナリ", "パラメータ1", "パラメータ2"]

  • シェル形式でも記述可能

  • 本例ではnginxサーバを起動する

CMD ["nginx", "-g", "daemon off;"]


Dockerイメージ作成

上記で作成したDockerfileをビルドしイメージを作成する

$ docker build -t centos-nginx:1.0 .

オプションを確認する


-t

作成するイメージ名:タグを指定する

-t イメージ名:タグ または --tag=イメージ名:タグ のように記述


Dockerコンテナ起動

上記で作成したDockerイメージからコンテナを起動する

$ docker run -d -p 8000:80 centos-nginx:1.0

オプションを確認する


-d

バックグラウンド実行用オプション

-d または --detach


-p

コンテナのポートを指定するオプション

-p ポート番号 または --publish=ポート番号 のように記述

本例ではコンテナ起動後にブラウザで http://localhost:8000 にアクセスし、Nginxの起動を確認する

Welcome to nginx! 画面が出ていれば正常


まとめ

docker入門編としてwebサーバを構築するところまでやってみた

学習コストが高い分自由度が高く、使いこなせればおもしろそう

nginx.confなどの細かい設定やdockerの細かいオプションなども勉強していきたい

次はnginxを利用したAPIスタブなどを作ってみようと思う