【どっかー】

Docker とは?

最終更新:
💡 アプリを「コンテナ」に入れて、別の環境でも同じように動かしやすくする

アプリケーションを「コンテナ」という単位にまとめて、開発・配布・実行するためのプラットフォーム。アプリと必要な部品を一緒に包むので、環境の違いによる不具合を減らせる。

📌 このページのポイント
Docker レイヤー構造と変換フロー イメージのレイヤー構造 アプリケーション層 COPY app.js / CMD node ミドルウェア層 RUN npm install ベースイメージ層 FROM node:24-alpine 読み取り専用 ビルド・実行フロー Dockerfile 設計図(テキスト) build Image テンプレート(不変) run Container 実行中プロセス レイヤーの積み重ね ポイント 変更したレイヤー以降を再ビルド(それより前はキャッシュ) 1つのImageから複数のContainerを作成可能 Dockerfileからイメージをビルドし、コンテナとして実行する
Dockerはレイヤー構造のイメージからコンテナを起動する
ひよこ ひよこ
Dockerを使う理由は?
ペンギン先生 ペンギン先生
「自分のPCでは動くのにサーバーでは動かない」という問題を減らすためだよ。コンテナにはアプリを動かすのに必要なものが入っているから、ホスト側に何がインストールされているかに頼らなくて済むんだ。ただし完全に同じになるわけではないよ。コンテナはホストのカーネルを共有するから、CPUの種類(アーキテクチャ)が違うホストでは、同じイメージがそのままでは動かないことがあるんだ
ひよこ ひよこ
イメージとコンテナは何が違うの?
ペンギン先生 ペンギン先生
イメージは、コンテナを作るための手順が入った読み取り専用のテンプレート。コンテナは、そのイメージから起動した実行中のものだよ。Dockerfileという設計図からイメージをビルドして、1つのイメージから同じコンテナをいくつも起動できるんだ
ひよこ ひよこ
イメージのサイズを小さくするには?
ペンギン先生 ペンギン先生
公式のベストプラクティスには、①マルチステージビルドでビルド用と最終出力を分ける、②目的に合う小さなベースイメージを選ぶ(例としてAlpineは6MB未満)、③.dockerignoreでビルドに関係ないファイルを除く、が挙げられているよ。ビルドを速くするにはキャッシュも大事。あるレイヤーが変わると、それより後ろのレイヤーはすべて作り直しになるから、変わりにくい手順を先に書くのがコツだね
ひよこ ひよこ
Dockerのセキュリティで気をつけることは?
ペンギン先生 ペンギン先生
公式ドキュメントが挙げている基本は3つ。①特権がいらないサービスは、USER命令でroot以外のユーザーに切り替える。②Docker公式イメージやVerified Publisherのイメージなど、信頼できるベースイメージを選ぶ。③パスワードなどの秘密情報を、ビルド引数や環境変数でビルドに渡さない。最終イメージに残ってしまうから、シークレットマウントを使うんだ。コンテナに入れれば安全になるわけではないから、対策は別に必要だよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Docker」って出てきたら「アプリをコンテナにまとめて、環境の差を減らして動かすツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Docker」 = ドッカー
💬 英語のdockは、船の荷物を積み降ろしする場所のこと。荷物を入れるコンテナを扱う名前として覚えやすいね。名前の由来についての公式の説明は、ここでは確認していないよ

参考資料

← 用語集にもどる