Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

Dockerの事前知識

f:id:overworker:20200628105903p:plain

事前知識

コンテナ技術の特徴

  • ホストOS上に論理的な区画(コンテナ)を作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションなどを一つにまとめ、あたかも個別のサーバのように扱うことができるようにしたもの。

    • ホストOSのリソースを論理的に分離し、複数のコンテナで共有して使う。

    • OSやディレクトリ、IPアドレスなどのシステムリソースを、個々のアプリケーションがあたかも占有しているように見せることができる。

  • アプリケーションに必要なモジュールをコンテナとしてまとめられる。

    • 複数のコンテナ組み合わせて一つのアプリケーションを構成するマイクロサービス型のアプリケーションと親和性が高いのが特徴です。

Dockerの概要

  • アプリケーションの実行に必要な環境を一つのイメージにまとめ、そのイメージを使って、様々な環境でアプリケーション実行環境を構築/運用するためのオープンソースプラットフォーム。

  • 内部でコンテナ技術を使っている。

Dockerの基本的な機能

  • 1.Dockerイメージを作る(Build)
  • 2.Dockerイメージを共有する機能(Ship)
  • 3.Dockerイメージを動かす機能(Run)

1.Dockerイメージを作る(Build)

  • Dockerイメージとは

    • アプリケーションの実行に必要なプログラム本体、ライブラリ、ミドルウェア、OS、ネットワークの設定等を一つにまとめたもの(ディレクトリ)。
    • Dockerコマンドを使用するとイメージをtarファイルに出力できる。
    • 一つのイメージには一つのアプリケーションのみを入れておくことが推奨されている。
  • Dockerイメージの作り方は大きく二つ

    • Dockerコマンドを使って手動で作る
    • Dockerfikeという設定ファイルを作ってそれをもとに自動でイメージを作る(推奨)

2.Dockerイメージを共有する機能(Ship)

3.Dockerイメージを動かす機能(Run)

  • Dockerイメージさえあれば、Dockerがインストールされた環境であればどこでもコンテナを動かすことができる。
  • Dockerイメージから複数のコンテナを起動することもできる。
  • コンテナの起動、停止、破棄はdockerコマンドを使います。

  • 1つのLinuxカーネルを複数のコンテナで共有してうる。

    • コンテナ内で動作するプロセスを1つのグループとして管理し、グループごとにそれぞれファイルシステムやホスト名/ネットワークなどを割り当てています。
    • グループが異なればプロセスやファイルへのアクセスができません。

Dockerを使用してアプリ開発をする際の必要手順

  • 必要なツールをインストールする(初回のみ)
  • 初期設定を実施する(初回のみ)
  • Dockerイメージを作る(アプリケーションごと)
  • Dockerを起動する(PC起動ごと)
    • PC起動時のスタートアップに登録することが可能)
  • Dockerコンテナを動かす(開発する際に1回)
  • アプリケーションを開発する (開発実施)
  • Dockerコンテナを停止する

私のDockerに対する認識のまとめ

可搬性

実行環境としての可搬性を提供する

  • Dockerがインストール可能な環境であれば、Dockerで作成したアプリケーションを実行可能である
    • オンプレミス、パブリッククラウドを問わず様々な環境で実行可能である。
      • 駆動環境の選択が多様なので、合い見積もり等が可能になり、コスト的な節約が期待できる。
    • 使用するミドルウェア等のバージョンの競合等を危惧する必要がない

開発環境(クライアントOS)としての可搬性を提供する

  • Dockerがインストール可能な環境であれば、Dockerがインストールされた実行環境で動作するアプリケーションを開発することが可能である
    • 実際のWebサービスの駆動環境(Linux)と、開発環境(Windows)のOSが異なる場合等に生じる差を吸収する機能がある
      • 複数のサービスが駆動する環境において、ミドルウェア資源をサービスごとに分離・独立させることで各サービスが利用するミドルウェアが他のサービスへ影響を及ぼすことを回避する。
      • 使用するミドルウェア等のバージョンの競合等を危惧する必要がない。

起動の高速化

  • OS自体はホストマシンの資源(起動済みOS)を活用するので、仮想環境(コンテナ)起動時の時間的なオーバーヘッドを短くすることができる。
    • すでに動いているOS上でプロセスを実行するのとほぼ同じ速さ。

参考文献

以下の本を読みながら、Dockerの勉強を開始しました。

その他の記事へ