60x Moby-logo

Dockerのセットアップ

はじめに

Dockerは、アプリケーションの開発、テスト、およびデプロイを効率化するためのコンテナ化プラットフォームです。コンテナは、アプリケーションとその依存関係を隔離し、異なる環境でも一貫した実行を保証します。この記事では、Dockerの主要コンポーネントであるコンテナ (Container)イメージ (Image)、**ボリューム (Volume)**について解説し、Windows、macOS、Linuxそれぞれのセットアップ方法を体系的に説明します。

コンテナ

Dockerコンテナは、軽量で独立した実行環境を提供します。コンテナは、ホストマシンのカーネルを共有し、仮想マシンよりも効率的にリソースを使用します。

  • コンテナは、実行中のアプリケーションやプロセスを隔離するために使用される。
  • コンテナは、指定したイメージを基にして起動される。
  • コンテナは、リソースの利用を制限するための機能(CPU、メモリ、I/Oなど)を提供する。

コンテナの基本操作

Dockerの基本操作は、次のコマンドで行います。

docker run -d --name my_container my_image
  • docker run: 新しいコンテナを起動する。
  • -d: バックグラウンドでコンテナを実行するオプション。
  • --name: コンテナの名前を指定する。
  • my_image: 使用するDockerイメージ。

イメージ

Dockerイメージは、コンテナの実行環境を定義する不変のテンプレートです。各イメージは、アプリケーション、ライブラリ、設定ファイルなどを含んでおり、コンテナを生成するために使用されます。

  • イメージは、ベースイメージ(たとえばUbuntu)の上にアプリケーションを積み重ねる形で作成される。
  • イメージは、軽量であり、多くのイメージを一つのホスト上で同時に扱うことが可能である。
  • イメージは、Docker Hubプライベートリポジトリから取得できる。

イメージの操作

イメージの操作には、次のようなコマンドを使います。

docker pull ubuntu
docker build -t my_custom_image .
  • docker pull: リポジトリからイメージをダウンロードする。
  • docker build: Dockerfileを基に新しいイメージを作成する。
  • -t: 新しいイメージにタグを付ける。

ボリューム

Dockerボリュームは、コンテナ間でデータを共有したり、永続化するために使用されます。ボリュームを使うことで、ホストマシン上に保存されたデータをコンテナが利用できるようにします。

  • ボリュームは、ホストシステムのファイルシステム上に保存され、コンテナが停止してもデータが保持される。
  • ボリュームは、複数のコンテナ間でデータを共有できる。
  • ボリュームは、コンテナのライフサイクルとは独立して管理される。

ボリュームの操作

ボリュームを作成および使用するための基本コマンドは以下の通りです。

docker volume create my_volume
docker run -d -v my_volume:/data my_image
  • docker volume create: 新しいボリュームを作成する。
  • -v: コンテナとホスト間でボリュームをマウントする。

Windowsでのセットアップ

WindowsでDockerをセットアップするには、Docker Desktop (Windows) をインストールします。

  1. Docker公式サイトからDocker Desktopをダウンロードします。
  2. インストーラーを起動し、指示に従ってインストールを完了します。
  3. インストール後、Docker Desktopを起動し、設定からWSL 2 Backendを有効にします。

macOSでのセットアップ

macOSでも、Docker Desktop (macOS) を利用して簡単にDockerをセットアップできます。

  1. Docker公式サイトからDocker Desktopをダウンロードします。
  2. ダウンロードした.dmgファイルを開き、指示に従ってインストールします。
  3. インストールが完了したら、Docker Desktopを起動します。

Linuxでのセットアップ

Linuxでは、Docker Engineを直接インストールします。以下の手順は、Ubuntuを例にしています。

  1. パッケージ情報を更新します。

    sudo apt-get update
  2. 依存パッケージをインストールします。

    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  3. Dockerの公式GPGキーを追加します。

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. Dockerのリポジトリを追加し、Dockerをインストールします。

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update
    sudo apt-get install docker-ce
  5. Dockerサービスを起動します。

    sudo systemctl start docker

Docker Desktop

Docker Desktop のインストールに含まれるのは、 Docker Engine 、 Docker CLI クライアント、 Docker Compose 、 Notary 、 Kubernetes 、Credential Helper です。

Docker Engine

Docker Engineは、Dockerコンテナをビルド、実行、管理するための中核となるコンポーネントです。コンテナの作成、起動、停止、削除などの操作を可能にし、仮想化技術を使用してアプリケーションを独立した環境にパッケージ化します。

Docker CLI クライアント

Docker CLIクライアントは、コマンドラインを通じてDocker Engineと対話するためのツールです。コンテナのビルド、イメージの管理、ネットワークの設定など、様々な操作を行うことができます。シンプルで強力なコマンドセットを提供し、開発者が簡単にDockerを操作できるようになっています。

Docker Compose

Docker Composeは、複数のコンテナを組み合わせてアプリケーションを構築および管理するためのツールです。YAMLファイルを使用して複数のサービス、ネットワーク、ボリュームなどを定義し、一括で起動や停止を行うことができます。複雑なアプリケーション環境の構築を簡素化し、環境の再現性を向上させます。

Notary

Notaryは、Dockerイメージの署名と検証を行うセキュリティツールです。コンテナイメージの信頼性を向上させ、改ざんされていないことを確認するために使用されます。Dockerイメージに署名を追加することで、信頼性の高いデプロイメントが可能となります。

Kubernetes

Kubernetesは、Dockerコンテナを自動的にデプロイ、スケーリング、管理するためのオーケストレーションツールです。コンテナクラスタを効果的に管理し、アプリケーションの高可用性やスケーラビリティを確保します。Dockerと組み合わせて使用され、大規模な分散システムの構築を容易にします。

Credential Helper

Credential Helperは、Dockerクライアントがリモートレジストリに対して認証情報を管理するための仕組みです。ユーザーが認証情報を手動で入力することなく、Dockerが自動的に認証を行えるようになります。セキュアなイメージのプルやプッシュを容易にし、運用の簡略化を図ります。

Docker Extension Essentials

Ref.:

Usage

 git clone https://github.com/<repo-name>/<name-of-your-extension>
 make build-extension
 docker extension install <repo-name>/<name-of-your-extension>
 docker extension ls
 docker pull <Docker-Hub-username>/<image-name>
 docker extension install <Docker-Hub-username>/<image-name>

Ref.:

Docker on WSL2

GPU Support

docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.

動作確認

sudo docker run --rm hello-world

停止・削除

完全に削除するには、コンテナ・イメージを削除する必要があります。

docker ps -q 
 
docker ps -q | xargs docker stop
docker ps -q | xargs docker rm # コンテナの削除
 
docker images -q | xargs docker rmi # イメージの一括削除
 
docker rmi <tag>:<id> # If it is tagged in multiple repositories, needs to select tag

Trouble shoot

  • Docker Desktop.exe が起動しない
    • システムを再起動する
  • docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
  • Check Docker Desktop> Settings > Resources > WSL integration
  • Docker desktopからの参照先WSLを変更

デフォルトでは、Docker DesktopはWSL 2エンジンのデータを C:\Users\[USERNAME]\AppData\Local\Docker\wsl。 たとえば、場所を別のドライブに変更する場合は、次の方法で変更できます Settings -> Resources -> Advanced Dockerダッシュボードのページ。 これと他のWindows設定の詳細を読む Windowsのドッカーデスクトップ設定の変更

  • e.g. F:\wsl\ubuntu\DockerDesktopWSL

Moving a disk image may take several minutes to complete depending on its size and the type of the source and destination drives.

- docker wsl change integrated distro
- `wsl --unregister docker-desktop`
- `wsl --shutdown`
 
  • version の不一致などを確認
cat /etc/os-release
docker -v