0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerfileとCompose.yamlについて

0
Last updated at Posted at 2025-12-03

生成AIにdockerコマンドとDokerfileとdocker composeの関係について分かりやすく説明するように指示してみた。

1 Apache サーバだけを立てる場合で比較

1-1 Dockerfile + docker run(手動方式)

Dockerfileをカレントディレクトリに作成する
補足:COPYの説明がない
(ホストの./public-html/の中身を/usr/local/apache2/htdocs/にコピー)

Dockerfile(Apache を入れた簡単なイメージ)
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を記述する

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コマンド
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を作成する

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サイトが古いせいなのか、コマンドや記述方法が若干古いことが気になった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?