継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Docker 実践活用ガイド 1章~3章

タダです。

今回からDocker実践活用ガイドを読んだ内容をまとめていきます。 ※記事は理解ができるたびに何度もアップデートしていこうと思います。 book.mynavi.jp

なお、副教材としてドットインストールも使っていこうと思います。

初回は1章から3章(チュートリアル的な内容なので)までまとめていきます。

目次

なお、各章の内容は次の通りです。

  • 1章 Dockerとは
  • 2章 Dockerの仕組み
  • 3章 Dockerのインストール
  • 4章 Dockerを使ってみよう(コマンド編)
  • 5章 Dockerを使ってみよう(Kitematic(GUI)編)
  • 6章 Dockerイメージの操作
  • 7章 Dockerを使いこなす
  • 8章 複数のDokcerを使う(Docker Machine、Docker Swarm、Docker Compose)
  • 9章 Dockerをクラウドで使う(Docker Cloud)
  • 10章 DockerとJavaScriptウェブサービスを作る(簡易オンラインジャッジシステム)
  • 11章 DOckerを利用した実運用ウェブサービス構築事例(paizaオンラインジャッジシステム)
  • 12章 paizaの実行環境APIを使いウェブサービスを作る(簡易オンラインジャッッジシステム)
  • 13章 Dockerの内部

1.1

  • DockerとはLinux上で動作する軽量コンテナ環境
    • コンテナとは、仮想的なOS環境のこと
  • コンテナを使うことで実際には一台のマシンしかないのに、その中でも複数のマシンが動いているような環境を作り出せる

1.2

  • 仮想マシンとコンテナの違いは、前者は独立性を重視するが、後者は軽量性を重視する
    • 家に例えると、物理マシン(サーバー)を一軒家とするのに対し、仮想マシンはプライバシーが保たれる賃貸マンション、コンテナは同じ家の中で壁やドアで居室を分けるシェアハウスのようなもの
  • コンテナでは、OSを論理的に分割して仮想的にOS(Linux)を作り出す
    • コンテナから見ると、ファイルシステムを始めとするOS上のリソースコンテナは独自のものとして見える
      • コンテナAからコンテナBのアプリケーションは隔離されており、そのままでは通信できない
      • ただし、OSは全ての素コンテナで同じものを利用しているため、必要に応じて他のコンテナとOS上のリソース(ファイルやネットワークインタフェースなど)を共有出来る

1.3

  • Dockerの歴史は、2013年3月に初回が公開された
  • DockerはGoでかかれている

1.4

  • Dockerのコンセプトやビジョンは以下のもの
    • マシンを超えたコンテナの移動: Dokerの実行ファイルは1つのDockerイメージであるため、実行環境は同じになる
    • アプリケーション指向: Dockerはアプリケーションのデプロイに最適化されている
    • 自動ビルド: Dockerイメージの構築方法をコードして記述することができ、そのコードから自動的にビルドするためのツールを提供する
    • バージョン管理: Dockerはgitのようなバージョン管理機能を提供する
    • コンポーネントの再利用: 1度作った環境を設定を変更して別の環境に再利用できる
    • 共有: DockerイメージはDocker Hub上で世界上のユーザーと共有出来る
    • ツールのエコシステム: Dockerと連携できるようにコンテナ作成雨やデプロイを自動化するためのAPIを定義しているため、各種ツールの連携が可能

2.1

  • Dockerの仕組みはDocker本体と、クライアントに分かれている
    • Docker本体側の構成要素: Dockerサーバー、Dockerホスト、Docker Hub
      • Dockerサーバがコンテナやイメージの管理などを行うコアな要素で、ネットワーク(TCP/IP)やUNIXソケットを通じて通信を行う
      • DockerイメージはDocker Hubで提供されている
    • Dockerクライアント側の構成要素: Dockerコマンド、Docker GUI、Dockerツール

2.2

2.3

  • Dockerのコンテナやイメージのファイルシステムでは、ディスク領域を効率よく使って高速に動作する
  • コンテナのファイルシステムは、Dokcerイメージ上に各コンテナ独自のコンテナ層を積み重ねた形
  • コンテナでのプロセスのファイルの読み込みは、積み重なったそうの上から見て、最初に見つかったファイルに対して行う
    • コンテナ層にファイルがあればコンテナ層からよみこむけど、なければDockerイメージからよみこむ
    • 書き込みは必ず一番上のコンテナ層に行う

2.4

  • DockerではLinuxのcgroups機能を利用してコンテナのリソース制御を行う
    • cgroupsは複数のプロセスをグループ化し、グループ単位でリソース制御を行う

2.5

  • Dockerでは、Linux名前空間(ネームスペース)の機能を使って、コンテナ単位での名前空間を作ることができる
    • これによりコンテナAでのプロセス動作が別のコンテナのリソースに影響を与えないようにしている
  • プロセスID(pid)名前空間:コンテナ単位でプロセスID空間を保持する
  • ネットワーク(net)名前空間:コンテナ単位でネットワークインターフェース、ポート番号などのネットワークを保持する
  • プロセス間通信(ipc)名前空間: コンテナ単位で、共有メモリやセマフォト行ったSystem V IPCリソース空間保持する
  • マウント(mnt)名前空間:コンテナ単位でマウント情報を保持する
  • ホスト名(UTS)名前空間:コンテナごとに別のホスト名を割り当てることができる
  • ユーザ(user)名前空間: コンテナごとにユーザID空間を保持する

3.1

  • Dockerでは、パソコン上でDockerを使うためのインストーラを提供しており、このインストーラを利用することで簡単にDocker環境を構築できる

3.2

  • インストーラの構成は以下のとおり
    • Dockerコマンドラインツール
    • Docker GUIクライアント(Kitematic)
    • Docker Machine: Dockerサーバ環境、クライアント環境の設定を行うツール(Virtual Machineにより、VirtualBox上でDokcerサーバがインストールされたLinux環境を簡単に構築可能)
    • Docker Compose: 複数のDockerコンテナを連携させて動作させるためのツール
    • 仮想マシンソフトとウェア(VirtualBox、xhyve): Docker Toolbox(Windows,Mac)、Docker for Mac(xhyve)、Docker for Windows(Hyper-V)
    • Docker Quickstart Terminal: Docker Toolboxでdockerコマンドを利用するためのツール

※3.3以降はインストール手順の紹介のため割愛します。

来週は4章のまとめになります。