はじめに
こんにちは、エンジニア4年目の嶋田です。
この記事を開いていただき、ありがとうございます!
Dockerを初めて触ったとき、「コンテナって何?」「イメージとの違いは?」「docker runとdocker startって何が違うの?」と混乱したことはありませんか?
私もエンジニアになった頃、先輩から「Dockerで環境構築して」と言われて、ドキュメントを読んでも用語の意味が全然わからず、何度も挫折しかけました。
でも実は、Dockerの基本用語さえ理解すれば、環境構築がグッと楽になるんです。
そこで今回は、Dockerの基本用語と使い分けをなるべくわかりやすくまとめてみたいと思います。
是非最後までお付き合いください!
目次
- Dockerとは?
-
よく聞く用語を整理しよう
- イメージ(Image)
- コンテナ(Container)
- Dockerfile
- docker-compose.yml
- よく使うコマンドの違い
- 実際の開発フロー例
- よくあるエラーと対処法
- まとめ
- 最後に
Dockerとは?
Dockerは、アプリケーションとその実行環境を「コンテナ」という単位でまとめて管理できるツールです。
「開発環境では動いたのに、本番環境では動かない…」という悩みを解決してくれます。
なぜDockerが必要なのか?
例えば、あなたのPCではPHP 8.2がインストールされているけど、同僚のPCはPHP 7.4だったとします。
同じコードでも、環境が違うとエラーが出ることがありますよね。
Dockerを使えば、「PHP 8.2 + MySQL 8.0 + Nginx」といった環境をまるごとパッケージ化できるので、誰が実行しても同じ環境で動かせるんです。
よく聞く用語を整理しよう
1. イメージ(Image)
イメージは、コンテナを作るための「設計図」や「テンプレート」です。
例えるなら、たい焼きの型のようなもの。
- PHP、MySQL、Nginxなど、様々な種類のイメージが存在します
- Docker Hubという場所から、公式のイメージをダウンロード(pull)できます
- 一度作成したイメージは、何度でも使い回せます
# イメージをダウンロード
docker pull php:8.2
# 自分のイメージを確認
docker images
2. コンテナ(Container)
コンテナは、イメージから実際に起動した「実行環境」です。
たい焼きの型から作られた、実際のたい焼きです。
- イメージ1つから、複数のコンテナを起動できます
- コンテナ内でファイルを編集しても、元のイメージには影響しません
- 不要になったら削除できます
# コンテナを起動
docker run -d --name my-php php:8.2
# 起動中のコンテナを確認
docker ps
# 停止中も含めて確認
docker ps -a
3. Dockerfile
Dockerfileは、独自のイメージを作るための「レシピ」です。
「PHP 8.2に、このライブラリを追加して、この設定ファイルをコピーして…」という手順を記述します。
# ベースとなるイメージを指定
FROM php:8.2-fpm
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
git \
zip \
unzip
# 作業ディレクトリを設定
WORKDIR /var/www/html
# ファイルをコピー
COPY . /var/www/html
4. docker-compose.yml
複数のコンテナを一括で管理するための設定ファイルです。
例えば、「PHPコンテナ + MySQLコンテナ + Nginxコンテナ」を同時に起動したいときに使います。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: php:8.2-fpm
volumes:
- ./src:/var/www/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
# すべてのコンテナを一括起動
docker-compose up -d
# すべてのコンテナを一括停止
docker-compose down
よく使うコマンドの違い
docker run vs docker start
初心者が混乱しがちなのがこの2つのコマンドです。
docker run
- 新しくコンテナを作成して起動するコマンド
- イメージからコンテナを生成します
- 毎回実行すると、新しいコンテナが作られます
docker run -d --name my-app php:8.2
docker start
- 既に存在する(停止中の)コンテナを再起動するコマンド
- 以前作ったコンテナをもう一度動かすときに使います
docker start my-app
docker stop vs docker rm
docker stop
- コンテナを停止します
- コンテナ自体は残っているので、
docker startで再開できます
docker stop my-app
docker rm
- コンテナを削除します
- 停止中のコンテナを完全に消すときに使います
docker rm my-app
実際の開発フロー例
- Dockerfileを作成して、自分用のイメージを定義
- docker-compose.ymlを作成して、複数のコンテナをまとめて管理
-
docker-compose up -dで環境を起動 - 開発作業をする
-
docker-compose downで環境を停止
この流れさえ覚えれば、環境構築で困ることはグッと減ります!
よくあるエラーと対処法
「ポートがすでに使われています」
Error: bind: address already in use
原因:同じポート番号を使っている別のコンテナやアプリが動いている
対処法:
# 使用中のポートを確認(Mac/Linux)
lsof -i :80
# コンテナを停止
docker-compose down
「イメージが見つかりません」
Error: No such image
原因:指定したイメージがローカルに存在しない
対処法:
# イメージをダウンロード
docker pull php:8.2
まとめ
- イメージ:コンテナを作るための設計図
- コンテナ:イメージから起動した実行環境
- Dockerfile:独自イメージを作るレシピ
- docker-compose.yml:複数コンテナをまとめて管理
Dockerの用語は最初は難しく感じますが、「イメージ = 型」「コンテナ = 型から作った実物」とイメージすると理解しやすくなります。
最後に
記事を読んでくださり、ありがとうございます!
少しでもお役に立てていたら嬉しいです。
Dockerを制覇することで、環境構築の悩みはグッと減ります。
一緒に頑張りましょう!💪
私自身もまだまだ学びの途中なので、もし何か誤った情報がありましたら、コメントでご指摘いただければ幸いです!