Traffine I/O

日本語

2022-06-03

Docker概要

Dockerとは

Dockerはオープンソースのコンテナ化プラットフォームで、開発者がアプリケーションとその依存関係を軽量、移植性が高く自己完結型のコンテナにパッケージ化することができます。これらのコンテナは、基盤となるインフラストラクチャに関係なく、Dockerがインストールされた任意のシステムで実行できます。この柔軟性により、開発者は異なる環境や設定の管理の複雑さに悩まされることなく、コードの書き込みに集中できます。

コンテナ vs 仮想マシン

コンテナと仮想マシン(VM)にはいくつかの類似点がありますが、重要な点で異なります。VMは、仮想化されたハードウェア層で完全なオペレーティングシステムを実行するため、リソースの非効率性や起動時間の長さが問題となります。一方、コンテナはホストシステムのカーネルを共有し、リソースを少なく使用するため、より速く、軽量でスケーラブルです。

Dockerの利点

Dockerは、従来のデプロイ方法に比べていくつかの利点があります。

  • 一貫性
    Dockerは、異なる環境でアプリケーションが同じように実行されることを保証し、"私のマシンでは動いていた"問題を軽減します。

  • 分離性
    コンテナは、アプリケーションを包含し、依存関係を管理し、競合を防止する安全で分離された環境を提供します。

  • スケーラビリティ
    Dockerは、水平方向のスケーリングを簡単に行うことができ、複数のコンテナインスタンスを展開して負荷を処理することができます。

  • 移植性
    Dockerを使用することで、Dockerをサポートする任意のシステムでアプリケーションを実行できるため、デプロイや移行のプロセスを簡素化できます。

  • バージョニング
    Dockerイメージはバージョン管理され、簡単に以前のバージョンに戻ったり、更新を展開したりすることができます。

Dockerのコンポーネント

Dockerには、次のような主要なコンポーネントがあります。

  • Docker Engine
    Dockerの中核であり、コンテナの構築と実行を担当します。

  • Dockerイメージ
    コンテナを作成するために使用される読み取り専用のテンプレートです。

  • Dockerコンテナ
    アプリケーションとその依存関係をカプセル化したDockerイメージの実行インスタンスです。

  • Docker Hub
    Dockerイメージを共有および配布するための公開レジストリです。

  • Dockerfile
    Dockerイメージを作成する方法を定義するスクリプトで、ベースイメージ、依存関係、および構成を指定します。

Dockerのアーキテクチャ

Dockerは、コンテナのビルド、デプロイ、および管理を行うためのいくつかのコンポーネントからなるクライアント・サーバーアーキテクチャです。

Docker Architecture
Architecture of Docker

Docker Engine

Docker Engineは、Dockerプラットフォームの中心です。コンテナの作成、実行、および管理を担当します。Docker Engineには、Dockerデーモン(dockerd)、REST API、およびDocker CLIが含まれます。

  • Dockerデーモン(dockerd)
    ホストで実行されるバックグラウンドサービスで、Docker APIリクエストを受信し、コンテナ、イメージ、ネットワークなどのDockerオブジェクトを管理します。

  • REST API
    DockerデーモンとDockerクライアントの間で通信を可能にします。

  • Docker CLI
    ユーザーがDockerデーモンと対話するためのコマンドラインインターフェイスです。

DockerクライアントとDockerデーモン

Dockerクライアントは、コンテナのビルドや実行などのさまざまなタスクを実行するためにDockerデーモンと通信します。ユーザーは、Docker CLIや他のサードパーティツールを使用してDockerクライアントと対話します。

ユーザーがコマンドを実行すると、DockerクライアントはREST APIを介してDockerデーモンにリクエストを送信します。Dockerデーモンはリクエストを処理し、結果をクライアントに返します。

Dockerイメージとレジストリ

Dockerイメージは、コンテナの構築ブロックです。アプリケーションのコード、依存関係、ライブラリ、およびランタイム環境を含む読み取り専用のテンプレートです。

Dockerイメージは、イメージを共有および配布するための集中型のリポジトリであるレジストリに保存されます。Docker Hubはデフォルトのパブリックレジストリですが、ユーザーは自己組織化されたプライベートレジストリを作成することもできます。

Dockerコンテナ

Dockerコンテナは、Dockerイメージの実行インスタンスです。コンテナは軽量で移植性が高く、アプリケーションとその依存関係をカプセル化した分離された環境です。

コンテナはイメージから作成され、開始、停止、および削除が可能です。各コンテナには独自のファイルシステムとネットワークスタックがあり、ホスト上の他のコンテナとの分離を保証します。

Dockerネットワーク

Dockerは、コンテナ間や外部システムとの通信を可能にする組み込みネットワーク機能を提供します。Dockerネットワークを使用すると、コンテナトラフィックの分離とセキュリティを実現し、IPアドレスの割り当て、コンテナ間の通信ルールの定義などを行うことができます。

Dockerは、特定の使用例や特性に応じたさまざまなネットワークドライバをサポートしています。

  • Bridge
    スタンドアロンコンテナに適したデフォルトのネットワークドライバです。

  • Host
    Dockerネットワークスタックをバイパスし、コンテナが直接ホストのネットワークスタックを共有できるようにするドライバです。

  • Overlay
    分散アプリケーションやコンテナオーケストレーションに有用な、マルチホストネットワークを可能にするドライバです。

  • Macvlan
    コンテナにMACアドレスを割り当て、ネットワーク上の物理デバイスのように表示させるドライバです。

Dockerボリュームとストレージ

Dockerは、コンテナ内で生成されたデータを永続化したり、コンテナ間でデータを共有するためのストレージシステムを提供しています。Dockerボリュームは、コンテナで生成されたデータを永続化したり、コンテナ間でデータを共有するための推奨される方法です。ボリュームはDockerによって作成および管理され、簡単にバックアップ、移行、またはコンテナおよびホスト間で共有することができます。

参考

https://www.docker.com/
https://docker-curriculum.com/
https://www.geeksforgeeks.org/architecture-of-docker/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!