クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

コンテナは環境ごと運ぶ箱

このレッスンのあとで: コンテナとは何か、なぜチームが使うのかを説明できる。

50分のレッスンコマンドなし

手元では動いたのに

大阪の物流会社で、配送管理システムを担当する山本さんの話です。

山本さんは、配達ルートの表示を直しました。自分のノートパソコンでは、きちんと動きました。

ところが本番のサーバーに入れると、画面にエラーが出ました。サーバーの Python が古かったのです。

「手元では動いたのに」は、開発の現場でよく聞く言葉です。このレッスンでは、これを防ぐ方法を学びます。

このレッスンのゴール

メモ

コンテナとは何か、なぜチームが使うのかを説明できる。

キーワード

ことばいみれい
依存関係アプリが動くのに必要な、別のソフトウェアです。flask 3.0
イメージアプリと、その依存関係をまとめた包みです。
コンテナ動いている状態のイメージです。
Dockerfileイメージの作り方を書いたファイルです。
レジストリイメージを置いておく、ネット上の倉庫です。

学生が入力するセルは、このプレビューでは空白です。

似た二台は、同じではない

アプリは、単独では動きません。Python のような言語や、いくつものライブラリを使います。これらが依存関係です。

ノートパソコンとサーバーでバージョンが違うと、片方だけで失敗します。

次のブロックを実行して、山本さんの二台を比べましょう。

ノートパソコンとサーバーを比べる

コード: bash
mkdir -p haiso && cd haiso
printf 'python 3.12\nflask 3.0\nrequests 2.32\n' > laptop.txt
printf 'python 3.9\nflask 2.2\nrequests 2.32\n' > server.txt

# diff は、二つのファイルで違う行だけを表示します
diff laptop.txt server.txt && echo "二台の環境は同じです"

# server.txt の python を 3.12、flask を 3.0 に直して、
# もう一度「実行」を押してください。最後の一行が変わります。

イメージは、アプリと依存関係の包み

解決策は、アプリと依存関係を一つに包むことです。この包みをイメージと呼びます。

イメージの作り方は Dockerfile に書きます。一行が一つの命令です。土台の OS、入れるもの、コピーするもの、起動の仕方を順に書きます。

イメージを動かしたものがコンテナです。ノートパソコンでもサーバーでも、中身は同じです。

Dockerfile を読む

コード: bash
mkdir -p haiso && cd haiso
cat > Dockerfile <<'END'
# 土台のイメージ: Python 3.12 が入った小さな OS
FROM python:3.12-slim
WORKDIR /app
# 先に依存関係を入れ、あとからアプリのコードを入れます
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["python", "app.py"]
END

# 命令の数を数えます (大文字で始まる行)
grep -c '^[A-Z]' Dockerfile
# どの土台から作るかを表示します
grep '^FROM' Dockerfile

よく使う Docker の命令は三つ

Docker は、いちばん広く使われているコンテナの道具です。この練習環境には Docker がないので、実際の画面の出力を下に載せます。

docker build はイメージを作り、名前とバージョンを付けます。docker run はコンテナを起動します。docker ps は、動いているコンテナを一覧にします。

作る、起動する、一覧を見る

コード: bash
$ docker build -t haiso-app:2.1 .
 => [1/5] FROM python:3.12-slim
 => [4/5] RUN pip install -r requirements.txt
 => naming to docker.io/library/haiso-app:2.1

$ docker run -d -p 8080:8080 haiso-app:2.1
7b2e94c0d1f3

$ docker ps
CONTAINER ID   IMAGE           STATUS          PORTS
7b2e94c0d1f3   haiso-app:2.1   Up 12 seconds   0.0.0.0:8080->8080/tcp

よくある間違い

注意

コンテナは「小さな仮想マシン」だと思う人が多くいます。そうではありません。仮想マシンは、OS を丸ごと一つ持ちます。コンテナは土台の OS を共有し、アプリだけを切り離します。だから数秒で起動できます。

仮想マシンとコンテナ

仮想マシンコンテナ
OS自分専用のものを丸ごと持つ土台の OS を共有する
よくある大きさ数GB数十から数百MB
起動の時間数分数秒
主な使い方システム全体を分けるアプリ一つを包んで運ぶ

学生が入力するセルは、このプレビューでは空白です。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。