Dockerとはなんぞや
2020/11/09
Dockerとは
指定した環境を、冪等性がある状態で簡単に用意する事ができる技術。
- 冪等性とは「何度やっても同じように動く」こと。
- ちなみに「開発環境では動いていたのに、本番では動かない」は冪等性が低い状態
Dockerクライアントである「Docker for Mac(Windows)」を介して、仮想マシン(DOCKER_HOST)でDockerの操作することができる。
- これはひとつのPCの中でも、遠隔地にあるサーバに指示を出すことも可能。
キーワード
- dockerクライアント - Docker for Macなどのアプリケーション
- docker-deamon - dockerクライアントに渡した指示を受けて処理を実行するプロセス
- イメージ - DockerHubなどに保管されているngnixなどのアプリケーションのテンプレ
- コンテナ - イメージをもとに実際のプロセスとして仮想マシン上で動くもの
利用イメージ
- すぐ開発できるようにDockerでサービスの開発環境を作成したい
- 環境毎に違う固有現象に悩まされたくないので、Dockerで各環境のイメージを管理したい
など
どうやって利用するのか
下記を実行することで「hello-world」というイメージ取得・コンテナを作成して起動する事が可能。
- ローカルでイメージが存在していればソレを指定
- 存在しない場合、同名のイメージをDockerHubで検索してPullする
- 該当するイメージをもとにコンテナを作成して起動する
$ 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でイメージを公開することができる。