kostumブログ

勉強したことやノート代わりのアウトプットに使っています。

Dockerを知る① Docker overview

目次

  • Dockerは、アプリケーションの開発、配布および実行のためのオープンプラットフォーム。
  • Dockerを使用すると、
    • アプリケーションをインフラから分離することができ、ソフトウェアを迅速に提供することができる。
    • アプリケーションを管理するのと同じ方法でインフラストラクチャを管理することができる
    • コードを迅速に配布、テスト、およびデプロイすることで、コードを書いてから本番環境で実行するまでの遅延を大幅に短縮することができる。

Docker platform

  • コンテナと呼ばれる分離された環境で、アプリケーションをパッケージ化して実行する機能を提供する。
  • この分離とセキュリティにより、特定のホスト上で多くのコンテナを同時に実行することができる。
  • コンテナは軽量で、アプリケーションの実行に必要なものが全て含まれているため、ホスト上に現在インストールされているものに依存する必要はない。
  • 作業中にコンテナを簡単に共有でき、共有する全員が同じ方法で動作する同じコンテナを取得することを確認できる。

  • コンテナのライフサイクルを管理するためのツールやプラットフォームを提供する

    • コンテナを使って、アプリケーションとそれをサポートするコンポーネントを開発する。
    • コンテナは、アプリケーションを配布し、テストするための単位になる。
    • 準備ができたら、アプリケーションをコンテナまたはオーケストレーテッドサービスとして本番環境にデプロイする。これは本番環境がローカルのデータセンターであっても、クラウドプロバイダーであっても、あるいはその2つのハイブリッドであっても同じ。

何ができるのか

アプリケーションの高速かつ安定したデリバリー

  • アプリケーションやサービスを提供するローカルコンテナを使用して、標準化された環境で作業できるようにすることで、開発サイクルを合理化できる。
  • コンテナは、継続的インテグレーションと継続的デリバリー(CI/CD)ワークフローに最適。
  • 次のようなシナリオを考えてみる。
    • 開発者はローカルでコードを書き、Dockerコンテナを使用して同僚と作業を共有する。
    • Dockerを使用して、アプリケーションをテスト環境にプッシュし、自動テストと手動テストを実行する。
    • 開発者がバグを発見した場合、開発環境で修正し、テスト環境に再展開してテストと検証を行うことができる。
    • テストが完了したら、更新したイメージを本番環境にプッシュするだけで、実行することができる。

レスポンシブなデプロイメントとスケーリング

  • コンテナベースのプラットフォームは、移植性の高いタスク量を可能にする。
  • コンテナは、開発者のローカルラップトップ、データセンター内の物理マシンや仮想マシンクラウドプロバイダ、またはそれらの混合環境で実行することができる。

同一ハードウェアでより多くのタスクを実行可能

  • ハイパーバイザーベースの仮想マシンに代わるコスト効率の高い選択肢として、より多くの計算能力をビジネスの目標に役立てることができる。
  • Dockerの高密度環境や、より少ないリソースでより多くの作業を行う中小規模のデプロイに最適。

アーキテクチャ

  • Dockerはクライアントーサーバアーキテクチャを使用している。
  • DockerクライアントはDockerデーモンと接続し、DockerデーモンはDockerコンテナの構築、実行、配布という重要な作業を行う。
  • Dockerクライアントとデーモンは同じシステム上で実行することができ、またDockerクライアントをリモートのDockerデーモンに接続することもできる。
  • Dockerクライアントとデーモンは、REST APIを使用してUNIXソケットまたはネットワークインターフェース上で通信する。
  • また、DockerクライアントにはDocker Composeがあり、コンテナ群からなるアプリケーションを操作することができる。

https://docs.docker.com/engine/images/architecture.svg

Docker デーモン(dockerd

  • Docker APIリクエストをlistenし、イメージ、コンテナ、ネットワーク、ボリュームなどのDockerオブジェクトを管理する。
  • また、デーモンはデーモンと通信し、Dockerサービスを管理することができる。

Docker クライアント(docker

  • Dockerとやり取りする際の主要な手段。
  • docker runなどのコマンドを使用すると、クライアントはそのコマンドをdockerdに送信し、dockerdはそのコマンドを実行する。
  • dockerコマンドはDocker APIを使用する。Dockerクライアントは、複数のデーモンと通信することができる。

Docker デスクトップ

  • MacまたはWindows環境に簡単にインストールできるアプリケーションで、コンテナ化されたアプリケーションやマイクロサービスを構築・共有することができる。
  • dockerd, docker, Docker Compose, Docker Content, Trust, KubernetesおよびCredential Helperが含まれている。

Docker レジストリ

  • Dockerのイメージを保存するもの。
  • Docker Hubはパブリックレジストリで、DockerはデフォルトでDocker Hub上のイメージを探すように設定されている。
  • docker pull, docker runコマンドを使用すると、設定したレジストリから必要なイメージが引き出される。
  • docker pushコマンドを使用すると、設定したレジストリにイメージがプッシュされる。

Docker オブジェクト

  • Dockerを使用する場合、イメージ、コンテナ、ネットワーク、ボリューム、プラグインおよびその他のオブジェクトを作成および使用することになる。

イメージ

  • Dockerコンテナを作成するための指示が書かれた読み取り専用のテンプレートのこと。
  • 多くの場合、イメージは他のイメージをベースにしていくつかのカスタマイズを加えたものになる。
    • 例:ubuntuイメージをベースに、Apacheウェブサーバとアプリケーションをインストールし、さらにアプリケーションの実行に必要な設定情報を加えたイメージを構築することができる。
  • イメージは自分で作成することができ、他の人が作成し、レジストリで公開されている物だけを使用することもできる。
  • 独自のイメージを作成するには、イメージの作成と実行に必要なステップを定義するための簡単な構文でDckerfileを作成する。
  • Dockerfileの各命令は、イメージのレイヤーを作成する。
  • Dockerfileを変更してイメージをリビルドすると、設定されたレイヤーだけがリビルドされる。これが他の仮想化技術と比較して、イメージを非常に軽量、小型、高速にする要因の一つ。

コンテナ

  • イメージの実行可能なインスタンス
  • Docker APIまたはCLIを使用して、コンテナの作成、起動、停止、移動、削除を行うことができる。
  • コンテナを1つまたは複数のネットワークに接続したり、ストレージをアタッチしたり、あるいは現在の状態に基づいて新しいイメージを作成したりすることもできる。

  • デフォルトでは、コンテナは他のコンテナやそのホストマシンから隔離されている。コンテナのネットワーク、ストレージまたはその他の基本サブシステムを、他のコンテナやホストマシンからどの程度分離するかを制御できる。

  • コンテナは、そのイメージと、作成時または起動時に指定した設定オプションによって定義される。コンテナが削除されると、コンテナの状態に対する変更で永続記憶装置に保存されていないものは全て消去される。

docker runコマンド

基礎技術

  • DockerはGo言語で書かれており、Linuxカーネルのいくつかの機能を利用してその機能を提供している。
  • コンテナと呼ばれる分離されたワークスペースを提供するために、名前空間と呼ばれる技術を使用している。コンテナを実行すると、Dockerはそのコンテナのために一連の名前空間を作成する。

参考

www.docker.com

前の記事