Docker入門ガイド:アプリケーションのコンテナ化をすぐに始める
Docker入門ガイド:アプリケーションのコンテナ化をすぐに始める
Dockerは、現代のソフトウェア開発とデプロイメントにおいて不可欠な一部となっています。 Kubernetesに関する議論が広範囲に及んでいますが、Dockerは依然として多くの企業がアプリケーションを構築、テスト、およびデプロイするために好んで使用するツールです。 この記事では、Dockerをすぐに始めるために、そのコアコンセプトを理解し、アプリケーションのコンテナ化を始めるのに役立つ実用的な例を提供します。
Dockerのコアコンセプト
実践を始める前に、Dockerのいくつかのコアコンセプトを理解することが重要です。
-
イメージ (Image): イメージは読み取り専用のテンプレートであり、アプリケーションの実行に必要なすべてのもの(コード、ランタイム環境、システムツール、ライブラリ、および依存関係)が含まれています。 仮想マシンイメージに似ていますが、より軽量です。
-
コンテナ (Container): コンテナはイメージから作成された実行中のインスタンスです。 これはイメージのランタイムインスタンスであり、アプリケーションとそのすべての依存関係が含まれています。 コンテナは互いに分離されており、独自のファイルシステム、プロセス、およびネットワーク空間を持っています。
-
Docker Hub: Docker Hubは、パブリックなイメージリポジトリであり、事前に構築されたイメージをダウンロードしたり、独自のイメージをアップロードしたりできます。 GitHubに似ていますが、Dockerイメージ専用です。
-
Dockerfile: Dockerfileは、Dockerイメージを構築するためのすべての命令を含むテキストファイルです。 Dockerfileを作成することで、イメージの作成プロセスを自動化できます。
-
Docker Compose: Docker Composeは、マルチコンテナDockerアプリケーションを定義および実行するためのツールです。 これにより、YAMLファイルを使用してアプリケーションのサービスを構成し、単一のコマンドを使用してすべてのサービスを開始または停止できます。
Dockerのインストール
まず、Dockerをインストールする必要があります。 Dockerは、さまざまなオペレーティングシステム用のインストールパッケージを提供しています。 Dockerの公式ウェブサイトにアクセスし、対応する指示に従ってインストールしてください。
インストールが完了したら、docker --versionコマンドを実行して、Dockerが正しくインストールされていることを確認できます。
簡単なPythonアプリケーションのコンテナ化
簡単なPythonアプリケーションを作成し、Dockerを使用してコンテナ化します。
1. Pythonアプリケーションの作成
app.pyという名前のファイルを作成し、次のコードを含めます。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
この簡単なFlaskアプリケーションは、ルートパス/で"Hello, Docker!"を返します。
2. requirements.txtファイルの作成
アプリケーションはFlaskライブラリに依存しているため、これらの依存関係を宣言するためにrequirements.txtファイルを作成する必要があります。
Flask
3. Dockerfileの作成
Dockerfileという名前のファイルを作成し、次の内容を追加します。
# 公式のPythonイメージをベースイメージとして使用します
FROM python:3.9-slim-buster
# 作業ディレクトリを設定します
WORKDIR /app
# requirements.txtファイルを作業ディレクトリにコピーします
COPY requirements.txt .
# 依存関係をインストールします
RUN pip install --no-cache-dir -r requirements.txt
```# アプリケーションコードをワーキングディレクトリにコピー
COPY app.py .
# ポート 5000 を公開
EXPOSE 5000
# 起動コマンドを定義
CMD ["python", "app.py"]
Dockerfile の説明:
FROM python:3.9-slim-buster: ベースイメージを Python 3.9 のスリム版として指定します。WORKDIR /app: コンテナ内のワーキングディレクトリを/appに設定します。COPY requirements.txt .: 現在のディレクトリにあるrequirements.txtファイルをコンテナの/appディレクトリにコピーします。RUN pip install --no-cache-dir -r requirements.txt: コンテナ内でpipコマンドを実行し、requirements.txtファイルで指定された依存関係をインストールします。--no-cache-dirパラメータはイメージのサイズを小さくすることができます。COPY app.py .: 現在のディレクトリにあるapp.pyファイルをコンテナの/appディレクトリにコピーします。EXPOSE 5000: コンテナが 5000 ポートをリッスンすることを宣言します。CMD ["python", "app.py"]: コンテナ起動時に実行するコマンドを定義します。
4. Docker イメージの構築
Dockerfile を含むディレクトリで、次のコマンドを実行して Docker イメージを構築します。
docker build -t my-python-app .
docker build: イメージを構築するコマンド。-t my-python-app: イメージに名前 (my-python-app) を指定します。.: Dockerfile があるディレクトリ (現在のディレクトリ) を指定します。
構築プロセスには、ネットワーク速度と依存関係のサイズに応じて、時間がかかる場合があります。
5. Docker コンテナの実行
次のコマンドを使用して Docker コンテナを実行します。
docker run -d -p 5000:5000 my-python-app
docker run: コンテナを実行するコマンド。-d: デタッチモードでコンテナを実行します (バックグラウンドで実行)。-p 5000:5000: ホストマシンの 5000 ポートをコンテナの 5000 ポートにマッピングします。my-python-app: 使用するイメージ名を指定します。
6. アプリケーションの検証
ブラウザで http://localhost:5000 にアクセスすると、"Hello, Docker!" が表示されるはずです。
7. コンテナの停止と削除
次のコマンドを使用してコンテナを停止します。
docker stop
`` は docker ps コマンドで確認できます。
次のコマンドを使用してコンテナを削除します。
docker rm
Docker Compose 入門
アプリケーションが複数のサービスで構成されている場合は、Docker Compose を使用してそれらを管理できます。
1. docker-compose.yml ファイルの作成
docker-compose.yml という名前のファイルを作成し、次の内容を追加します。
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
docker-compose.yml の説明:* version: "3.9": Docker Composeファイルのバージョンを指定します。
services: アプリケーションのサービスを定義します。web: "web"という名前のサービスを定義します。image: my-python-app: サービスが使用するイメージを指定します。ports: ポートマッピングを定義します。
2. アプリケーションの起動
docker-compose.ymlファイルを含むディレクトリで、以下のコマンドを実行してアプリケーションを起動します。
docker-compose up -d
docker-compose up: アプリケーションを起動するコマンドです。-d: デタッチモードでコンテナを実行します。
3. アプリケーションの停止
以下のコマンドを使用してアプリケーションを停止します。
docker-compose down
Dockerのセキュリティベストプラクティス
議論からわかるように、Dockerイメージのセキュリティは重要な問題です。以下は、Dockerのセキュリティに関するベストプラクティスです。
- 公式イメージの使用: 可能な限り、公式が提供するイメージを使用してください。これらのイメージは通常、セキュリティスキャンとメンテナンスが行われています。
- イメージの脆弱性スキャン: Trivyなどのツールを使用して、イメージ内の既知の脆弱性をスキャンし、イメージをタイムリーに更新します。
- 最小権限の原則の使用: rootユーザーとしてコンテナを実行することを避けてください。
- コンテナリソースの制限: cgroupsを使用して、コンテナのCPUとメモリの使用量を制限します。
- イメージの定期的な更新: イメージを最新の状態に保ち、セキュリティ脆弱性を修正します。
- セキュリティスキャンツールの使用: Snyk、ClairなどのツールをCI/CDプロセスに統合して、イメージの脆弱性を自動的にスキャンできます。
結論この記事では、Dockerのクイックスタートガイドを提供し、コアコンセプト、インストール手順、および簡単なPythonアプリケーションのコンテナ化の例を網羅しています。これらの基礎知識を学ぶことで、Dockerを使用してアプリケーションを構築、テスト、およびデプロイできるようになります。覚えておくべきは、セキュリティが非常に重要であるということです。常にDockerイメージのセキュリティに注意し、アプリケーションを保護するための適切な対策を講じてください。Kubernetesは大規模なコンテナオーケストレーションにおいて強力ですが、Dockerは多くのシナリオで依然としてシンプルで効果的なソリューションです。Dockerを習得することで、現代のソフトウェア開発とデプロイメントの課題により良く対応できるようになります。





