生成AIにdockerコマンドとDokerfileとdocker composeの関係について分かりやすく説明するように指示してみた。
1 Apache サーバだけを立てる場合で比較
1-1 Dockerfile + docker run(手動方式)
Dockerfileをカレントディレクトリに作成する
補足:COPYの説明がない
(ホストの./public-html/の中身を/usr/local/apache2/htdocs/にコピー)
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/
Dockerfileを使ってイメージを作成する。ここではmy-apacheというタグ名を指定した。
補足:docker build .でカレントディレクトリのDockerfileを使用してイメージを作る
補足:-t を付けるとイメージに名前を付けられる。さもないと自動で適当な名前が付く(作成後にdocker image lsでタグ名等を確認した方が良い)
docker build -t my-apache .
作成したmy-apacheイメージを使ってコンテナを起動する。
docker run -dit --name web001 -p 8080:80 my-apache
# 生成AIが指示したコマンドは何故か-ditの位置が異なる
docker run --name web001 -p 8080:80 -dit my-apache
docker stop web001
docker rm web001 #コンテナを削除する場合
📌 ポイント
ポート番号や名前を毎回入力しなくてはならない
入力ミスしやすい
コマンドが長い
1-2 docker-compose を使った場合(少し楽)
カレントディレクトリにdocker-compose.yamlを記述する
services:
web:
build: . # カレントディレクトリ(.)のDockerfileをbuildする
ports:
- "8080:80" # ホストの8080ポートをコンテナの80にマッピングする
コンテナの起動は以下のコマンド
docker-compose up -d
📌 ポイント
毎回ポートやオプションを打つ必要がない
設定が YAML 1つにまとまる
コマンドが 短くて楽
2 Apache サーバに MySQL も追加する例で比較
ここから差が一気に広がります。複数コンテナの管理は compose が圧倒的に便利(by 生成AI)。
2-1 Dockerfile + docker run(2つのコンテナを手動で起動)
やることが一気に増える。
まずApache コンテナを build & run
補足:docker build .でカレントディレクトリのDockerfile(作成済)を使用
docker build -t my-apache .
docker run -dit --name web01 -p 8080:80 my-apache
続いてMySQL コンテナを pull & run
補足1:mysql:8:0はどこか(docker hub)から引っ張ってきたイメージ
補足2:パスワードとかボリューム(MySQLのデータ)などの説明はないみたい
docker run -dit --name db01 -e MYSQL_ROOT_PASSWORD=pass123 \
-v mysql-data:/var/lib/mysql mysql:8.0
ネットワーク設定も面倒(省略)
📌 ポイント
コンテナ2つの管理が複雑
環境変数・ボリュームも手動
初心者にはつらい
2-2 docker-composeで設定を1ファイルにまとめる(超すっきり)
docker-compose.yamlを作成する
services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: pass123
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
起動は1行
docker-compose up -d
#停止する場合
docker-compose down
📌 ポイント
2つのコンテナも一発で起動
ネットワークは自動で作成
depends_on で起動順まで管理
ボリューム・環境変数も YAML に集約
結論
🔵Apache 1つだけなら
docker run でもできる
compose を使うと「少し楽」になる
🟢Apache + MySQL になると
docker run は 設定が複雑で毎回大変
compose は 設定が1つにまとまり圧倒的に楽
つまり…
👉 コンテナが1個ならどっちでもOK
👉 2個以上になるなら絶対に docker-compose を使うべき!
以上、生成AI先生のDokcer講座でした!!
感想
超初心者向けと言っているが、この説明で「なるほど!」となる人は初心者本を1回はやった人だけだろうな。たぶん実際にLinuxサーバでLAMP環境を作れるくらいの人じゃないとDocker触ってもピンと来ないかもしれない。また、参照元のWEBサイトが古いせいなのか、コマンドや記述方法が若干古いことが気になった。