Docker とは
Dockerとは、コンテナを用いたアプリケーションの実行環境を構築/運用するためのプラットフォームです。
...と言われても僕は「なにそれ?コンテナ?聞いたことはあるけどなんだっけ...???」となったのでコンテナの説明をします。
コンテナとは
ホストOS上に区画を作って、アプリを動作するためのライブラリなどを一つにまとめ、まるで個別のサーバのように使うことができるようにしたもの。
アプリケーションの実行に必要なモジュールをコンテナとしてまとめられるので、複数のコンテナを組み合わせるマイクロサービス型のアプリケーションと親和性が高い特徴を持っています。
参考:コンテナ技術の基礎知識
Dockerの必要性
僕なりの解釈ですが、「環境」が変わってもそのアプリケーションは正常に動作するのか?という点で必要だと思います。環境といってもテスト環境やステージング環境、プロダクション環境があります。テスト環境で動作したとしても、いざそのアプリをデプロイすると動かないこともあります。
Dockerではこれらの環境をすべて「コンテナ」として管理していきます。アプリケーションに必要なすべてのファイルをコンテナとしてまとめて、このコンテナのもとになるDockerイメージをDocker Hubなどのレポジトリで共有します。これによって、Dockerをインストールしている環境であれば、上記で説明した「テスト環境で動作したとしても、いざそのアプリをデプロイすると動かない
」というリスクは減少すると思います。そしてDocker上で動作させるコンテナの構成情報を記すのがDockerfile
です。
Dockerfile とは
Docker上で動作させるコンテナの構成情報を記述するためのファイルです。
主な構成情報
- ベースとなるDockerのイメージ
- OSの設定
- ミドルウェアのインストール
- Docker上で行うコマンド
- 環境変数の設定
- Dockerコンテナ上で動作させるためのデーモン実行
※デーモン ... OSにおいて動作するプロセスで、主にバックグラウンドで動作するプロセス。
参考:デーモン(daemon)【Wikipedia】
Dockerfileに記述された情報をもとにして、docker build
コマンドにてDockerのイメージを作成します。
Dockerfileの構文
命令は大文字でも小文字でもどちらでもいいらしいです。(大文字のほうしか見ないので、大文字で記載します。)
命令 | 説明 |
---|---|
FROM | ベースイメージの指定 |
RUN | コマンド実行 |
CMD | コンテナの実行コマンド |
LABEL | ラベルの設定 |
EXPOSE | ポートを指定 |
ENV | 環境変数 |
ADD | ファイル(ディレクトリ)の追加 |
COPY | ファイルコピー |
ENTRYPOINT | コンテナの実行コマンド |
VOLUME | ボリュームのマウント |
USER | ユーザの指定 |
WORKDIR | 作業ディレクトリ |
ARG | Dockerfile内の変数 |
ONBUILD | ビルド時に実行される命令 |
STOPSIGNAL | システムコールシグナルの設定 |
HEALTHCHECK | コンテナのヘルスチェック |
SHELL | シェルの設定 |
コメントはpythonみたいな感じで#
を使うことができます。
FROM centos:centos7 #ベースイメージの指定
DockerfileからDockerイメージを作成
以下のコマンドで作成します。
docker build -t [イメージ名]:[タグ名] Dockerfileの場所
例:「sample」というイメージを作りたい。
docker build -t sample:1.0 /home/docker_sample/sample
まとめ
ざっくりまとめました。イメージがつきやすいように図とか用意して更新していきます。
次回はDockerをインストールして、DockerfileからDockerイメージを作成する流れを紹介します。