Dockerの基礎
Dockerが解決しようとしている問題点
- アプリケーションがローカル環境ではうまく動いても、テストや本番環境など別の環境に移行するとパフォーマンスが低下する
- 私のマシンでは問題ないが、テストや本番のマシンでは動かない - テスト/本番環境に移行する際に何かの設定を見落としているかもしれない
Docker
- 完全に密閉されたコンテナを提供する
- コード全体を包み込む
- 環境間の移行時にうまく動く
- コード、依存関係、設定、プロセス、OSの断片など、Dockerにパッケージされている
Dockerは、主に次のことに使われるオープンソースの技術です。
- 開発
- 配布
- アプリケーションの実行
なぜDockerか
- DockerはOSレベルの仮想化ソフトウェアプラットフォームで、開発者とIT管理者が、必要な依存関係と共にアプリケーションをDocker内で作成、配布、実行できるようにする。
- Dockerコンテナは、アプリケーションを実行するために必要な依存関係(フレームワーク、ライブラリなど)を全て含んだ軽量なソフトウェアパッケージです。
Dockerって何?
Dockerは、アプリケーションを軽量のコンテナ内で自動的に配布して、アプリケーションが異なる環境でも効率よく動作するようにするツールです。
- 複数のコンテナが同じハードウェア上で動作する
- アプリケーションが隔離されて維持される
- 高い生産性
- 簡単で素早い設定
コンテナイゼーションとは
アプリケーションとそのすべての依存関係をパッケージ化して、異なる環境で効率よく問題なく実行できるようにするプロセスです。このバンドルされた一つのユニットをコンテナと呼びます。
Dockerの仕組み
- Dockerエンジン、または単にDockerとは、Dockerのコンポーネントとサービスを使ってコンテナをビルドし実行するために、あなたのホストマシンにインストールされる基本エンジンです。
- クライアント-サーバーアーキテクチャを採用しています。
- DockerクライアントとサーバーはRest APIを使って通信します。
ここで何が起こるか
- Dockerクライアントはコマンドを実行するサービスです。そのコマンドはREST APIを使って翻訳され、Dockerデーモン(サーバー)に送られます。
- そして、Dockerデーモンはクライアントのリクエストをチェックし、コンテナを作成または管理するためにOSとやり取りします。
Dockerの構成要素
Dockerのアーキテクチャ
参照: https://docs.docker.com/get-started/overview/
Dockerクライアントとサーバー
-
Dockerはクライアント-サーバー型アーキテクチャで動作します
-
クライアントはREST APIを通じて制御コマンドをDockerデーモンに送ります。
-
Dockerデーモンはコンテナをビルド、実行、配布する責任があります。
-
クライアントとデーモンは同じシステム上に存在することも、クライアントがリモートのデーモンに接続することもできます。
-
Dockerクライアントにはターミナルからアクセスがあり、DockerホストはDockerデーモンとレジストリを実行しています。
-
ユーザーはDockerサーバーにコマンドを送信してDockerイメージをビルドし、Dockerコンテナを実行することができます。
注意: Dockerサーバーを実行しているマシンのことをDockerホストと呼びます
Dockerイメージ
- Dockerイメージは指示と共にテンプレートで、Dockerコンテナを作成するために使用されます
- DockerイメージはDockerファイルを使ってビルドされます
- DockerイメージはDocker Hubやリポジトリ(例: registry.hub.Docker.com)に保存されます
注意: DockerファイルはDockerイメージをビルドするためのコマンドが含まれたテキストファイルです
Dockerコンテナ
- たくさんのDockerコンテナが同じインフラ上で動作し、他のコンテナとOSを共有します
- ここでは、各アプリケーションが隔離されて動作します
Dockerデスクトップ
Dockerデスクトップは、Mac、Windows、またはLinux環境に簡単にインストールできるアプリケーションで、コンテナ化されたアプリケーションやマイクロサービスを作成して共有することができます。
Dockerデスクトップには、Dockerデーモン(dockerd)やDockerクライアント(docker)が含まれています。
詳細はこちらDocker Desktop
Dockerデスクトップのインストール: ダウンロード
Dockerレジストリ
- Dockerレジストリは、イメージのホストと配布のためのオープンソースのサーバーサイドサービスです
- DockerにはDocker Hubと呼ばれる独自のデフォルトレジストリもあります
- ここでは、イメージは公開または非公開のリポジトリに保存されます
- ユーザーはDockerレジストリとやり取りするためにpullとpushのコマンドを使用します
- コンテナをビルドするために、pullコマンドはDockerイメージをDockerリポジトリから取得するために使用されます
Docker pull <image>:<tag> : Dockerレジストリからイメージを引っ張ってきます
- pushコマンドを使って、ユーザーはDockerイメージをDockerレジストリに保存できます
Docker push <image>:<tag> : Dockerレジストリにイメージをプッシュします
仮想マシンとDocker
コンテナのライフサイクル
新しく作成されたコンテナは、次の6つの状態のいずれかにあります:
- 作成
- 実行
- 一時停止
- 停止
- 再起動
- 死亡
Dockerコマンド
- docker run : イメージからコンテナを作成
- docker start : すでに停止されたコンテナを起動
- docker stop : アクティブなコンテナを停止
- docker build : DockerファイルからDockerイメージをビルド
- docker pull : 特定のリポジトリから作成済みのイメージを引っ張ってくる
- docker export : コンテナのファイルシステムを.tarアーカイブファイルにエクスポート
- docker images : ローカルシステム上の現在のDockerイメージを一覧表示
- docker search : リポジトリで指定されたイメージを検索
- docker ps : システム上で稼働中の全てのアクティブなコンテナを一覧表示
- docker kill : シャットダウンの猶予期間なしにアクティブなコンテナを停止
- docker commit : すでにアクティブなコンテナから新しいイメージを作成
- docker login : Docker Hubリポジトリへログインするコマンド
さらなる勉強のために
.NETアプリケーションのコンテナイゼーションに関する9つのヒント
結論: DockerとVMの基本、DockerアーキテクチャとDockerコマンドについて議論し、次の金曜日に新たな記事を投稿しDockerファイルやDockerビルドコマンドなどについて説明します。
コンテナを実行するためのAWSサービス: 私の以前のブログを参照してください。APP Runner
💬 このブログ投稿が有益であったと感じたら、レビューを残して意見を共有し、いいねしてください😀 そしてlinkedinでフォローしてください。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/aws-builders/fundaments-of-docker-lbd