Dockerとは?非エンジニアのためのコンテナ解説
Dockerは、アプリを実行に必要なものすべて(適切な言語のバージョン、ライブラリ、システムツール、設定など)と一緒に、コンテナと呼ばれる標準的な単位にまとめるツールです。コンテナは、開発者のノートパソコン、テスト用サーバー、クラウドのホストのどこでも同じように動くので、「自分の環境では動いたのに」という昔からの問題をなくします。コンテナを作るための手順は、Dockerfileと呼ばれる短いテキストファイルに書きます。
AIでアプリを作るときにDockerが重要な理由
アプリにバックエンド(Python、Node、C#、JavaのAPIなど)がある場合、正しいソフトウェアがすべてインストールされた環境で動かす必要があります。Dockerは、それを再現可能にする最も一般的な方法です。
- バックエンドのデプロイ。 Mythexを含む多くのホストは、Dockerfileからコンテナを作ってバックエンドをデプロイします。Mythexでは、「C#のWeb API」や「Javaのバックエンド」を頼むと、アプリとDockerfileが作られ、公開するとイメージが作成されてデプロイされます(APIバックエンド)。
- プラットフォームからの移行。 AIで作ったアプリをエクスポートする場合、Dockerfileがあれば別のホストで動かすのがずっと簡単になります。AIで作ったアプリをエクスポートして自前のサーバーで動かす方法をご覧ください。
- 開発者との協業。 プロジェクトに参加した開発者は、丸一日かけてツールを入れる代わりに、1、2個のコマンドでアプリ全体を起動できます。
身近なたとえ:輸送用コンテナ
標準の輸送用コンテナが登場する前、貨物は袋、樽、箱などを1つずつ積み込んでいて、港ごとに扱い方もばらばらでした。標準の鉄製コンテナは、それを変えました。一度詰めてしまえば、中身が何であっても、どの船、クレーン、列車、トラックでも運べます。
Dockerはソフトウェアにとって同じ役割を果たします。
- Dockerfile は、梱包リストと手順書です。
- イメージ は、封をして梱包されたコンテナです。
- 実行中のコンテナ は、そのコンテナが船の上で働いている状態で、ここではサーバーです。
- Docker Engine は、クレーンや船に当たるもので、どんなコンテナでも動かし方を知っている、サーバー上のソフトウェアです。
Dockerの仕組み
| 要素 | 内容 |
|---|---|
| Dockerfile | イメージを作るための手順を書いたテキストファイル。 |
| イメージ | 読み取り専用のパッケージ。OSの基本部分、実行環境、ライブラリ、あなたのコードを含みます。 |
| コンテナ | イメージを実行しているもの。同じマシン上の他のアプリから分離されています。 |
| レジストリ | イメージを保存して共有する場所。Docker Hubや、クラウドサービスが提供するレジストリなど。 |
| Docker Engine | イメージを作成し、コンテナを実行するバックグラウンドのサービス。無料でオープンソースです。 |
| Docker Desktop | Mac、Windows、Linux向けのアプリで、エンジンをグラフィカルな画面と一緒にまとめたもの。 |
コンテナと仮想マシンの違い:仮想マシンは、独自のOSを持つ別のコンピューターのように振る舞うので、重くて起動に時間がかかります。コンテナはホストのOSカーネルを共有し、アプリとそのファイルだけを分離するので、通常は数秒で起動し、メモリの使用量もずっと少なくて済みます。1台のサーバーで、多くのコンテナを並べて動かせます。
具体例:小さなPython API
AIビルダーが、予約アプリのためにPythonのFastAPIバックエンドを作ったとします。Dockerfileは次のようになるかもしれません。
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
1行ずつ見ていきましょう。
| 行 | 内容 |
|---|---|
FROM python:3.12-slim | Python 3.12がすでに入っている公式イメージから始める。 |
WORKDIR /app | コンテナ内の /app フォルダーで作業する。 |
COPY requirements.txt . と RUN pip install ... | ライブラリの一覧をコピーして、それらをインストールする。 |
COPY . . | アプリ自身のコードをコピーする。 |
EXPOSE 8000 | アプリがポート8000で待ち受けることを示す。 |
CMD [...] | コンテナが起動したときに、Webサーバーを開始するコマンド。 |
わかりやすく言うと、「Python 3.12から始めて、requirements.txt に書かれたライブラリをインストールし、コードをコピーして、ポート8000でWebサーバーを起動する」という意味です。
その後、開発者(またはホスティングのサービス)は、次の2つのコマンドを実行します。
docker build -t booking-api .
docker run -p 8000:8000 booking-api
1つ目のコマンドは、イメージを作成して booking-api という名前を付けます。2つ目のコマンドは、コンテナを起動して、マシンのポート8000をコンテナ内のポート8000に接続します。これでAPIが動いています。Dockerがあるどのサーバーでも、同じように動きます。
イメージに含まれていないものにも注目してください。パスワードやAPIキーです。これらは、コンテナを起動するときに環境変数として渡されます。そうすれば、同じイメージを、異なる設定でテスト環境と本番環境の両方で動かせます。
主な用語
| 用語 | 意味 |
|---|---|
| コンテナ | アプリと依存関係をまとめた、分離された実行中のパッケージ。 |
| イメージ | コンテナを起動するためのひな形。 |
| ベースイメージ | Dockerfileの FROM 行で指定する出発点。たとえば python:3.12-slim や node:22。 |
| レイヤー | Dockerfileの各手順は、キャッシュされるレイヤーを1つ追加します。これにより、再ビルドが速くなります。 |
| ポートのマッピング | ホスト側のポートを、コンテナ内のポートに接続すること。 |
| ボリューム | コンテナを入れ替えても残る保存領域。コンテナ自体は使い捨てです。 |
| Docker Compose | 一緒に動く複数のコンテナ(APIとデータベースなど)を記述するファイル。 |
| Kubernetes | 多くのサーバーにまたがって、多くのコンテナを動かすためのシステム。小規模なアプリにはたいてい不要です。 |
よくある誤解
- 「Dockerは仮想マシンだ」。 仮想マシンよりも軽量です。コンテナはホストのカーネルを共有します。
- 「コンテナの中に保存したデータは安全」。 コンテナは捨てて入れ替えることを前提にしています。永続させるべきもの(ユーザーのデータ、アップロードされたファイルなど)は、データベース、ファイルストレージ、またはボリュームに保存してください。
- 「Dockerfileに秘密情報を書いても、非公開だから大丈夫」。 イメージは共有されたり、レジストリにプッシュされたりします。秘密情報は実行時に渡してください。
- 「Dockerを使えば、アプリが安全になる」。 分離は助けになりますが、古いソフトウェアや弱い設定のコンテナは、依然として脆弱です。
- 「どのアプリにもDockerが必要」。 静的サイトやシンプルなフロントエンドは、通常、コンテナを使わずに普通のファイルとしてホストされます。
- 「Docker Desktopは誰でも無料」。 エンジンは無料ですが、Dockerの規約によると、大企業はDocker Desktopに有料のサブスクリプションが必要です。
AIビルダーに頼むときのポイント
- 「このアプリにDockerfileは必要?必要ならば、各行を分かりやすい日本語で説明して。」
- 「小さな公式のベースイメージを使い、言語のバージョンは固定して。」
- 「秘密情報はイメージに含めず、実行時に環境変数から読み込んで。」
- 「アップロードされたファイルやデータは、コンテナの中ではなく、データベースかファイルストレージに保存して。」
- 「開発者がフロントエンド、API、データベースを1つのコマンドでローカル実行できるように、Docker Composeファイルを追加して。」
- 「ホストがAPIの稼働を確認できるように、ヘルスチェック用のエンドポイントを追加して。」
MythexでのDocker
Mythexを使うのに、Dockerをインストールしたり実行したりする必要はありません。プロジェクトは非公開のクラウドのサンドボックスで動きます。C#、Java、カスタムのNodeやPythonのサービスなど、コンテナが必要なバックエンドを頼むと、MythexがアプリとDockerfileを作成し、サンドボックスでプレビューし、公開したときにデプロイします。ホスティングの設定は不要です(技術の選び方)。Proプランでは、プロジェクトをエクスポートしたり、GitHubに同期したりして、Dockerfileを持ち出せます。バックエンドとフロントエンドがどのように組み合わさるかについては、フロントエンドとバックエンドをご覧ください。
よくある質問
Dockerとは簡単に言うと何ですか?
Dockerは、アプリを実行に必要なもの(言語の実行環境、ライブラリ、設定など)と一緒に、コンテナと呼ばれる標準的な単位にまとめるツールです。コンテナは、ノートパソコン、テスト用サーバー、クラウドのホストのどこでも同じように動きます。
Dockerのイメージとコンテナの違いは何ですか?
イメージは、アプリとその依存関係をまとめた、読み取り専用のひな形です。Dockerfileから作られます。コンテナは、そのイメージを実行している実体です。1つのイメージから、複数のコンテナを起動できます。
Dockerは仮想マシンのことですか?
いいえ。仮想マシンは、独自のOSを持つコンピューター全体をエミュレートします。コンテナはホストマシンのOSカーネルを共有し、アプリだけを分離するので、起動が速く、メモリの使用量も少なくて済みます。
Dockerは無料ですか?
コンテナを動かす中核であるDocker Engineは、無料でオープンソースです。Dockerの利用規約によると、2026年9月時点で、Docker Desktopは非商用のオープンソースプロジェクトと、従業員250人未満かつ年間売上1,000万ドル未満の企業に無料で提供されています。それより大きい企業は、有料のサブスクリプションが必要です。
AIでアプリを作るのにDockerを学ぶ必要はありますか?
通常は必要ありません。多くのAIビルダーがコンテナの扱いを代わりに行ってくれます。ただし、Dockerfileが何かを知っておくと、バックエンドがどのようにパッケージ化されているかを理解でき、アプリをエクスポートした後に別のホストで動かすときにも役立ちます。