「自分の環境では動くのに本番で動かない」——この悩みを解決するのがDockerです。今さら聞けないコンテナの基本を、インフラ目線でまとめます。
コンテナとは
アプリと、それが動くのに必要なもの(ライブラリ、設定)を、ひとつの箱にまとめたものがコンテナです。この箱ごと持ち運べるので、開発環境でも本番でも同じ状態で動きます。「動かない」の多くは環境差が原因なので、そこを潰せるのが大きな利点です。
仮想マシンとの違い
- VM … OSごと丸ごと動かす。重い、起動が遅い。
- コンテナ … OSのカーネルは共有し、アプリ層だけを箱にする。軽い、起動が速い。
コンテナは軽量なので、1台のサーバに多数動かせます。
最初の一歩
docker run -d -p 8080:80 nginx
これだけで、nginxが起動し、http://localhost:8080 で見えます。ホストにnginxを入れなくても、コンテナの中で動くのがポイントです。
Dockerfile(イメージの設計図)
自分のアプリを箱にするには、Dockerfileを書きます。
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
「node20をベースに、コードを入れて、依存を入れて、起動する」という手順書です。これを docker build するとイメージ(箱の元)ができます。
よく使うコマンド
docker ps … 動いているコンテナ一覧
docker images … イメージ一覧
docker logs コンテナ … ログ確認
docker exec -it コンテナ bash … 中に入る
docker stop / rm … 停止 / 削除
docker composeで複数まとめて
Web+DBのように複数コンテナをまとめて起動するなら、compose.yamlに書いて docker compose up 一発です。開発環境の構築が劇的に楽になります。
インフラ視点での意義
- 環境差による「動かない」を撲滅
- 使い捨て・再現が容易(壊してもすぐ作り直せる)
- CI/CDやKubernetesの土台になる
まずは docker run で既存イメージを動かす体験から。手元で1つ動かすと、「なぜみんなコンテナを使うのか」が一気に腑に落ちます。