はじめに
アプリケーション開発やシステム構築の現場では、「自分の環境では動くのに、他人の環境では動かない」という問題が頻発します。こうした課題を解決するために登場したのが Docker です。Dockerは軽量なコンテナ技術を提供し、アプリケーションとその依存関係をまとめてパッケージ化することで、どこでも同じように動作させることができます。
本記事では、Dockerの基礎を学びつつ、実際に簡単なアプリをコンテナで動かすハンズオンまでを体験します。
Dockerの基本概念
Dockerを理解する上で重要な用語は以下の3つです。
- イメージ(Image)
アプリケーションとライブラリなどをまとめた「設計図」。 - コンテナ(Container)
イメージから作られる実行環境。アプリが動作する箱。 - Docker Hub
世界中の開発者がDockerイメージを共有するリポジトリ。
仮想マシンとの違いは「軽さ」にあります。仮想マシンがOSごと動かすのに対し、DockerはホストOSのカーネルを共有するため、起動も軽くリソース消費も少なくなります。
Dockerのインストール
公式サイトから自分のOSに合わせたDocker Desktopをインストールしてください。
インストール後に以下のコマンドで動作確認をします。
docker --version
docker run hello-world
「Hello from Docker!」と表示されれば準備完了です。
基本的なDockerコマンド
まずはよく使うコマンドを押さえましょう。
# コンテナを起動
docker run -it ubuntu bash
# 実行中のコンテナ一覧
docker ps
# 停止中も含む全てのコンテナ一覧
docker ps -a
# コンテナを停止
docker stop <コンテナID>
# イメージ一覧
docker images
# イメージを削除
docker rmi <イメージID>
Dockerfile入門
アプリをDocker化するには Dockerfile を使います。
例:シンプルなPythonアプリを動かすDockerfile
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
このDockerfileは、Python3.9の公式イメージをベースに、app.py
をコピーして実行するコンテナを作成します。
ハンズオン:FlaskアプリをDocker化して動かす
ここでは、Pythonの軽量Webフレームワーク Flask をDockerで動かしてみましょう。
1. アプリを作成
まず、以下の app.py
を作成します。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
2. Dockerfileを作成
同じディレクトリに以下のDockerfileを作成します。
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
RUN pip install flask
CMD ["python", "app.py"]
3. イメージをビルド
docker build -t flask-app .
4. コンテナを起動
docker run -d -p 5000:5000 flask-app
5. 動作確認
ブラウザで http://localhost:5000
にアクセスすると
Hello, Docker! と表示されます。
Docker Compose入門
本格的な開発では、WebアプリとDBを一緒に動かしたい場面があります。そこで便利なのが Docker Compose です。
例:Flask + MySQLを同時に起動する docker-compose.yml
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sample
以下でまとめて起動できます。
docker-compose up -d
Dockerの利点と注意点
- 利点
- 開発環境を誰でも同じ状態で再現可能
- 軽量・高速に動作
- CI/CDとの相性が良い
- 注意点
- セキュリティ更新が必要
- イメージサイズ肥大化に注意
- 本番運用ではログ管理・監視が課題になる
次のステップ
Dockerを触ってみて基礎を理解したら、以下のステップに進むと良いでしょう。
- Dockerfileの最適化
- マルチステージビルドでイメージを軽量化
- ボリューム管理
- データ永続化の仕組みを理解する
- ネットワーク構築
- コンテナ同士の通信や複数ネットワークの設計
- オーケストレーション
- KubernetesやDocker Swarmで大規模運用へ
- CI/CD連携
- GitHub ActionsやGitLab CIと組み合わせて自動デプロイ
コメントを残す