Dockerとはなんぞや

Dockerとは

指定した環境を、冪等性がある状態で簡単に用意する事ができる技術。

  • 冪等性とは「何度やっても同じように動く」こと。
  • ちなみに「開発環境では動いていたのに、本番では動かない」は冪等性が低い状態

Dockerクライアントである「Docker for Mac(Windows)」を介して、仮想マシン(DOCKER_HOST)でDockerの操作することができる。

  • これはひとつのPCの中でも、遠隔地にあるサーバに指示を出すことも可能。

キーワード

  • dockerクライアント - Docker for Macなどのアプリケーション
  • docker-deamon - dockerクライアントに渡した指示を受けて処理を実行するプロセス
  • イメージ - DockerHubなどに保管されているngnixなどのアプリケーションのテンプレ
  • コンテナ - イメージをもとに実際のプロセスとして仮想マシン上で動くもの

利用イメージ

  • すぐ開発できるようにDockerでサービスの開発環境を作成したい
  • 環境毎に違う固有現象に悩まされたくないので、Dockerで各環境のイメージを管理したい

など

どうやって利用するのか

下記を実行することで「hello-world」というイメージ取得・コンテナを作成して起動する事が可能。

  1. ローカルでイメージが存在していればソレを指定
  2. 存在しない場合、同名のイメージをDockerHubで検索してPullする
  3. 該当するイメージをもとにコンテナを作成して起動する
$ docker run hello-world

コンテナのライフサイクル

コンテナの状態変化はライフサイクルと呼ばれており、それらに対応したコマンドが下記。

# 1. イメージの取得
$ docker pull

# 2. コンテナ生成
$ docker create

# 3. コンテナ起動
$ docker start

# 4. コンテナの停止
$ docker stop

# 5. コンテナの削除
$ docker rm 

そのほかのコマンド

ライフサイクル系の以外にもDockerコマンドが色々存在する。

# 1. イメージ取得 ~ 3. コンテナ起動 まで
$ docker run

# 4. コンテナの停止 => 3. コンテナの起動
$ docker restart

# pullしたイメージの一覧をみる
$ docker image

# コンテナの状態を確認する
$ docker ps

# コンテナのリネーム
$ docker rename {oldName} {newName}

# コンテナ内に入る(コンテナ内でBashを起動する)
$ docker exec -it {containerName} bash

実行時のオプション

$ docker run -d -p 80:80 --name myapp -v $(pwd):/var/www/html php:7.0-apache

# php:7.0-apache - PHP7.0とApacheがひとつのコンテナに入っているものを指定
# -d             - コンテナをバックグラウンドで起動する
# -p 80:80       - -p {アクセスされるポート番号} {コンテナ側のポート番号}でポートフォワードしてくれる
# -v $(pwd):/... - -v {ホスト側} {コンテナ側} で コンテナ外のボリュームをマウントする

Dockerfile

Dockerfileと呼ばれるyaml形式のコンフィグファイルを用意すれば、設定内容を元にイメージとコンテナを作成することが可能。

FROM php:7.0-apache
RUN apt-get update
RUN apt-get install -y vim

例えば、上記のようなものを用意して docker build -t php-vim . と実行すると、php7が入ったApacheを取得してaptをupdateしてvimを導入された状態のイメージを作成する。

作成したDockerfileはGithubを介してDockerHubでイメージを公開することができる。