Dockerの基本
本記事は2024年1月14日に開催された「【オンライン】飛騨高山Pythonの会 #48」での発表内容をまとめたものになります。
1. はじめに
ここでは、Dockerの基本的な概念と操作方法について学びます。Dockerに初めて触れる方や基本を理解したい方が対象です。
参考資料
1.1. Dockerとは何か?
Dockerは、アプリケーションをコンテナと呼ばれる隔離された環境で実行するためのプラットフォームです。この技術により、アプリケーションは異なる環境間で一貫性を持って動作し、開発からテスト、そして本番環境への移行がスムーズに行えます。
特徴
- 隔離性: 各コンテナは他のコンテナやホストシステムから隔離されており、独立したファイルシステムを持ちます。
- 軽量性: コンテナは仮想マシンよりも軽量で、より少ないリソースで多数のコンテナを実行できます。
- 移植性: コンテナはどのDocker環境でも同じように動作します。
- スケーラビリティ: アプリケーションの需要に応じて、コンテナを簡単に追加または削除できます。
1.2. Dockerの利点と主な用途
利点
- 環境一貫性: 開発、テスト、本番環境間での一貫性を保ち、"動かないバグ"を減少させます。
- 開発の迅速化: 環境設定にかかる時間を削減し、開発プロセスを加速します。
- アプリケーションの分離: 異なるアプリケーションを同じサーバー上で隔離して実行できます。
主な用途
- マイクロサービスの開発: 各マイクロサービスを独立したコンテナとして開発し、管理します。
- 継続的インテグレーション/継続的デリバリー (CI/CD): 自動化されたテストやデプロイプロセスの一部として使用します。
- データベースやその他のサービスの隔離: データベースやキャッシュなどのサービスを独立した環境で実行します。
2. Dockerの基本概念
2.1. コンテナとは?
コンテナは、アプリケーションとその実行環境をパッケージ化したものです。これにより、アプリケーションは異なる環境で一貫して動作します。
特徴
- 軽量: 仮想マシンに比べてリソース使用量が少ない。
- 高速: 起動が速く、スケールアップ・ダウンが容易。
- 移植性: どのDocker環境でも同じように動作。
2.2. イメージとコンテナの違い
イメージはアプリケーションとその依存関係を含む静的なファイルです。一方、コンテナはイメージを実行時にインスタンス化したものです。
イメージ:アプリケーションとその依存関係を含む静的なファイル
- 不変のテンプレート。
- Dockerfileから作成される。
コンテナ:イメージを実行時にインスタンス化したもの
- 実行中のイメージのインスタンス。
- 書き込み可能で一時的な状態を持つ。
3. Dockerのインストールと設定
3.1. Dockerのインストール
Dockerは多くのプラットフォーム(Windows, macOS, Linux)で利用可能です。公式サイトからインストーラーをダウンロードしてインストールします。
インストール手順
- Docker公式サイトにアクセス。
- ご利用のOSに合わせたインストーラーをダウンロード。
- 指示に従ってインストール。
3.2. 環境設定の確認
インストール後、基本的な設定を確認し、Dockerが正しく動作するかをテストします。
コマンド
docker --version # Dockerのバージョン確認
docker run hello-world # テストコンテナの実行
4. 基本的なDockerコマンド
4.1. Dockerコマンドの基本
Dockerを使うための基本的なコマンドを学びます。これらは日常的な操作で頻繁に使用されます。
コンテナの起動と停止
- 起動:
docker run [イメージ名]
- 停止:
docker stop [コンテナIDまたは名前]
4.2. イメージのダウンロードと管理
- ダウンロード:
docker pull [イメージ名]
- リスト表示:
docker images
4.3. Docker Hubの使い方
Docker HubはDockerイメージの公式なレジストリで、イメージの検索、ダウンロード、共有ができます。
- 検索:
docker search [キーワード]
- ダウンロード:
docker pull [イメージ名]
5. PythonプログラムをDockerで実行するデモ
5.1. Dockerfileの作成
まず、Pythonの実行環境を構築するためのDockerfile
を作成します。以下はその一例です。
# Pythonの公式イメージをベースに使用
FROM python:3.8
# 作業ディレクトリを設定
WORKDIR /usr/src/app
# 必要なファイルをコンテナにコピー
COPY . .
# Pythonの依存関係をインストール(存在する場合)
RUN pip install --no-cache-dir -r requirements.txt
# コンテナが起動したときに実行されるコマンド
CMD ["python", "./your-script.py"]
この**Dockerfile
は、Python 3.8をベースにしており、カレントディレクトリの内容をコンテナにコピーし、requirements.txt
にリストされた依存関係をインストールした後、your-script.py
**を実行します。
5.2. Pythonスクリプトの準備
簡単なPythonスクリプト(your-script.py
)を用意します。例えば、Hello Worldを出力するスクリプトは次のようになります。
# your-script.py
print("Hello, Docker!")
5.3. Dockerイメージのビルド
作成したDockerfile
を使用してDockerイメージをビルドします。以下のコマンドを実行します。
docker build -t python-demo .
このコマンドは、カレントディレクトリのDockerfile
を使用してpython-demo
という名前のイメージをビルドします。
5.4. Dockerコンテナの実行
ビルドしたイメージからコンテナを起動します。
docker run python-demo
このコマンドはpython-demo
イメージからコンテナを起動し、your-script.py
の中身を実行します。この例では、"Hello, Docker!"が出力されます。
まとめ
Dockerは、コンテナ技術を利用してアプリケーションのデプロイと管理を簡素化する強力なツールです。この記事では、Dockerの基本的な概要と簡単なデモを紹介しました。コンテナを使用することで、開発環境と本番環境の違いをなくし、一貫性のある動作を実現できます。また、依存関係の管理が容易になり、アプリケーションの移植性が向上します。
Dockerを使い始めることで、開発プロセスが効率化され、デプロイメントの自動化が進むでしょう。ぜひ、この機会にDockerを活用して、プロジェクトにおける開発・運用の効率化を図ってください。
今後も、Dockerのさらなる活用方法やベストプラクティスについて本ブログ内でご紹介していく予定ですのでお楽しみに!