一人前エンジニア道場

開発環境とインフラ基礎(Linux・Docker) / 約20分

なぜコンテナか:VMとの違い、イメージとコンテナ

なぜこれを学ぶか

「私の環境では動くのに本番では動かない」を終わらせたのがDockerです。

コンテナはアプリケーションと実行環境をまとめてパッケージ化する技術です。VM(仮想マシン)がOSごと仮想化するのに対し、コンテナはホストOSのカーネルを共有するため軽量に動作します。

イメージは設計図(読み取り専用)、コンテナはそのイメージから起動された実行中のインスタンスです。同じイメージから何個でも同じ環境のコンテナを作れます。

Docker Hub等のレジストリから既存イメージをdocker pullで取得できます。自作のイメージはDockerfileというテキストファイルからdocker buildで作成します。

環境構築を「手順書(人が読んで再現する)」ではなく「実行可能なコード(誰が実行しても同じ結果になる)」として共有できることが、DX上の本質的な価値です。

重要ポイント

  • VMとの違い=ホストOSカーネル共有で軽量
  • イメージ=設計図、コンテナ=実行中インスタンス
  • 環境構築を「コード」として共有できることがDXの本質

コードレビュー演習

新メンバーから「READMEの手順通りに進めてもNode.jsのバージョンが違ってエラーが出る」と相談されました。そこで以下のような`Dockerfile`を用意することにしました。この場合、バージョン不一致の問題はどうなるでしょうか?

FROM node:20-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]

このDockerfileを使うことで、Node.jsのバージョン不一致問題はどうなるか?

ヒントを見る

`FROM node:20-alpine`はベースイメージにNode.js 20系を固定しています。誰が`docker build`しても同じイメージから始まります。

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?