はじめに
Docker は、開発者にとって、コンテナ化されたアプリケーションを容易に作成および管理するための不可欠なツールとなっています。このチュートリアルでは、macOS または Windows 上で Docker 開発環境をセットアップする手順を案内し、Docker ベースのアプリケーションの構築とデプロイに必要なツールと知識を習得できるようにします。
Docker の基礎理解
Docker とは何か?
Docker は、開発者がアプリケーションをコンテナと呼ばれる一貫した隔離された環境で構築、デプロイ、実行できるようにするオープンソースプラットフォームです。コンテナは、アプリケーションとそのすべての依存関係をパッケージ化し、アプリケーションが基盤となるインフラストラクチャに関係なく、確実に一貫して実行されるようにします。
Docker コンテナ
Docker コンテナは、アプリケーションの実行に必要なすべて(コード、ランタイム、システムツール、ライブラリ)を含む軽量、スタンドアロン、実行可能なパッケージです。コンテナは互いに、そしてホストオペレーティングシステムから隔離されており、アプリケーションが実行されるための安定した信頼性の高い環境を提供します。
graph LR
A[アプリケーション] --> B[依存関係]
B --> C[ランタイム]
C --> D[OS]
D --> E[Docker コンテナ]
E --> F[Docker ホスト]
Docker イメージ
Docker イメージは、コンテナの構成要素です。イメージは、Docker コンテナを作成するための指示を含む読み取り専用テンプレートです。イメージは、イメージを構築するために必要なすべての命令を含むテキストファイルである Dockerfile を使用して作成されます。
Docker レジストリ
Docker レジストリは、Docker イメージの保存と配布システムです。最も一般的なパブリックレジストリは Docker Hub であり、さまざまなアプリケーションやサービス向けに構築済みのイメージを多数提供しています。
Docker アーキテクチャ
Docker はクライアントサーバーアーキテクチャを採用しており、Docker クライアントは Docker デーモンと通信します。Docker デーモンは、Docker コンテナの構築、実行、管理を担当します。
| コンポーネント | 説明 |
|---|---|
| Docker クライアント | Docker システムのユーザーインターフェース。Docker デーモンと対話するために使用されます。 |
| Docker デーモン | Docker コンテナやイメージを管理するバックグラウンドプロセス。 |
| Docker レジストリ | Docker イメージを保存および配布するためのリポジトリ。 |
| Docker ネットワーク | コンテナが互いに、および外部の世界と通信できるようにします。 |
| Docker ボリューム | Docker コンテナによって生成され、使用されるデータを永続的に保存する方法を提供します。 |
macOS または Windows で Docker をインストールする
macOS で Docker をインストールする
- Docker ウェブサイト にアクセスし、Docker Desktop for Mac をダウンロードします。
- インストーラーを実行し、画面の指示に従ってインストールを完了します。
- インストール後、Docker アイコンがメニューバーに表示され、Docker が実行されていることを示します。
Windows で Docker をインストールする
- Docker ウェブサイト にアクセスし、Docker Desktop for Windows をダウンロードします。
- インストーラーを実行し、画面の指示に従ってインストールを完了します。
- インストール後、Docker アイコンがシステムトレイに表示され、Docker が実行されていることを示します。
インストールの確認
Docker のインストール後、ターミナル(macOS)または PowerShell(Windows)を開き、以下のコマンドを実行してインストールを確認できます。
docker version
これにより、システムにインストールされている Docker クライアントと Docker サーバー(デーモン)のバージョンが表示されます。
Docker Compose のインストール
Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するためのツールです。Docker Compose をインストールするには:
- Docker Compose の GitHub リポジトリ にアクセスし、オペレーティングシステムに対応した最新の Docker Compose をダウンロードします。
- ダウンロードしたファイルを以下のコマンドを実行して実行可能ファイルにします(Linux/macOS の場合):
chmod +x docker-compose - ダウンロードした Docker Compose バイナリを、システムの PATH にあるディレクトリ(例:
/usr/local/bin/または~/bin/) に移動します。
これで、以下のコマンドを実行してインストールを確認できます。
docker-compose version
これにより、システムにインストールされている Docker Compose のバージョンが表示されます。
Docker 開発環境の構築
Dockerfile の作成
Dockerfile は、Docker イメージを構築するために必要なすべての命令を含むテキストファイルです。シンプルな Python Web アプリケーションのための Dockerfile の例を次に示します。
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
この Dockerfile は以下の処理を行います。
python:3.9-slimベースイメージから開始します。- 作業ディレクトリを
/appに設定します。 requirements.txtファイルを作業ディレクトリにコピーします。requirements.txtに記載されている Python の依存関係をインストールします。- アプリケーションコードを作業ディレクトリにコピーします。
- アプリケーションを実行するためのコマンド (
python app.py) を指定します。
Docker イメージの構築
Dockerfile から Docker イメージを構築するには、Dockerfile と同じディレクトリで以下のコマンドを実行します。
docker build -t my-python-app .
これにより、タグ my-python-app を持つ Docker イメージが構築されます。
Docker コンテナの実行
my-python-app イメージから Docker コンテナを実行するには、以下のコマンドを使用します。
docker run -p 8080:8080 my-python-app
これにより、新しいコンテナが起動され、ホストのポート 8080 がコンテナのポート 8080 にマッピングされます。
Docker Compose を用いた開発
Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するためのツールです。データベースを備えたシンプルな Web アプリケーションのための docker-compose.yml ファイルの例を次に示します。
version: "3"
services:
web:
build: .
ports:
- 8080:8080
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: myapp
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
この docker-compose.yml ファイルは、web と db の 2 つのサービスを定義しています。web サービスは、現在のディレクトリから Docker イメージを構築し、ホストのポート 8080 をコンテナのポート 8080 にマッピングします。db サービスは、公式の PostgreSQL イメージを使用し、アプリケーション用のデータベースを設定します。
アプリケーションを起動するには、以下のコマンドを実行します。
docker-compose up -d
これにより、web と db のコンテナがバックグラウンドで起動します。
まとめ
このチュートリアルに従うことで、macOS または Windows マシンに Docker をインストールする方法、Docker の基本、そしてあなたのニーズに合わせた Docker 開発環境を構築する方法を学ぶことができます。これらのスキルを習得することで、開発ワークフローを効率化し、Docker が提供する一貫性のある再現可能な環境、容易なデプロイ、そして向上したスケーラビリティといった利点を活用できるようになります。



