🐳

🐳Docker基礎

に公開

🐳Dockerとは?

Dockerとは、コンテナ技術を使ってアプリケーションを実行・配布・管理するためのツールです。
Linuxカーネルの機能を直接使ってコンテナを実現しています。
イメージ(アプリの設計図)とコンテナ(実行中の実体)を区別します。
仮想マシンと違って軽量・高速に起動・削除ができます。

コンテナとは?

コンテナは、「ホストOSのカーネルを共有しながら、隔離された環境で動くプロセス」のことです。
ホストのカーネルは使いますが、ファイルシステム・プロセス空間・ネットワークなどは仮想的に独立しています。

カーネルとは?

カーネルとは、OSの中核部分でハードウェアとソフトウェアの間を取り持つプログラムです。
CPU、メモリ、ストレージ、ネットワークなどのリソース管理を担当しています。

🐳Docker vs 🦭Podmanの実用的な違い

  • Dockerは1つの常駐プロセス(dockerd)で全てのコンテナを管理
    • 管理が集中するが、セキュリティ的にやや懸念あり
  • Podmanはデーモンレスで、コンテナはユーザープロセスとして動く
    • セキュア(特にrootless対応)
    • systemdと統合しやすい
項目 Docker Podman
デーモン 必要(dockerd 不要
root権限 必要な場合あり rootless(非root)
コマンド互換性 docker コマンド dockerと互換あり
セキュリティ 一般的 より高い(rootless対応)
OCI準拠 対応 対応(Red Hat推奨)

Macで動く理由

Macで使える理由はDocker Desktopが内部にLinux仮想マシンを持っているためです。
MacにはLinuxカーネルが存在しないため、内部でLinux仮想マシンを立ち上げています。
以下のような構成で動作しています。

[Mac]
  ↓
[軽量なLinux仮想マシン]
  ↓
[Linuxカーネル + Dockerエンジン]
  ↓
[コンテナ]

Discussion