docker compose up –buildは何をしているのか?

はじめに

現職で以下の技術を使用する可能性があるため、買い物リスト作成アプリをオリジナルでChatGPT 5の力も借りながら作成している。

  • Docker
  • Django
  • Vue.js

基礎知識は多岐に渡るが、この記事では、アプリを起動する時のコマンド「docker compose up –build」について書いていく。

仮説

AIに聞く前に、自分なりの仮説を立ててみる。

これは、大AI時代にとても大事なこと。

自分の頭で考えることができなければ、AIに適切なプロンプトを入力して、適切な回答を得ることができない。

仮説としては、アプリに必要なファイル一式の依存関係を調整して、アプリを起動させるといったところか?

実際にコマンドを打った様子

現在作成中の以下のアプリで、docker compose up –buildを打った様子をお届けしよう。

https://github.com/ki-hi-ro/shopping_list_app

それがこちら。

hiroki@shibatahiroshitakanoiMac shopping_list_app % docker compose up --build

[+] Building 56.0s (24/24) FINISHED                                                                                                                                                                                                                                                                   
 => [internal] load local bake definitions                                                                                                                                                                                                                                                       0.0s
 => => reading from stdin 774B                                                                                                                                                                                                                                                                   0.0s
 => [backend internal] load build definition from Dockerfile                                                                                                                                                                                                                                     0.1s
 => => transferring dockerfile: 309B                                                                                                                                                                                                                                                             0.0s
 => [frontend internal] load build definition from Dockerfile                                                                                                                                                                                                                                    0.1s
 => => transferring dockerfile: 150B                                                                                                                                                                                                                                                             0.0s
 => [frontend internal] load metadata for docker.io/library/node:20-alpine                                                                                                                                                                                                                       2.2s
 => [backend internal] load metadata for docker.io/library/python:3.12-slim                                                                                                                                                                                                                      2.0s
 => [backend internal] load .dockerignore                                                                                                                                                                                                                                                        0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                  0.0s
 => [backend 1/6] FROM docker.io/library/python:3.12-slim@sha256:9c1d9ed7593f2552a4ea47362ec0d2ddf5923458a53d0c8e30edf8b398c94a31                                                                                                                                                                0.0s
 => => resolve docker.io/library/python:3.12-slim@sha256:9c1d9ed7593f2552a4ea47362ec0d2ddf5923458a53d0c8e30edf8b398c94a31                                                                                                                                                                        0.0s
 => [backend internal] load build context                                                                                                                                                                                                                                                        0.0s
 => => transferring context: 708B                                                                                                                                                                                                                                                                0.0s
 => CACHED [backend 2/6] WORKDIR /app                                                                                                                                                                                                                                                            0.0s
 => CACHED [backend 3/6] RUN apt-get update && apt-get install -y build-essential libpq-dev && rm -rf /var/lib/apt/lists/*                                                                                                                                                                       0.0s
 => CACHED [backend 4/6] COPY requirements.txt ./                                                                                                                                                                                                                                                0.0s
 => CACHED [backend 5/6] RUN pip install --no-cache-dir -r requirements.txt                                                                                                                                                                                                                      0.0s
 => CACHED [backend 6/6] COPY . .                                                                                                                                                                                                                                                                0.0s
 => [backend] exporting to image                                                                                                                                                                                                                                                                 0.2s
 => => exporting layers                                                                                                                                                                                                                                                                          0.0s
 => => exporting manifest sha256:7b993b1513a3debddd8264daf81bf615394ed4d19e38d89c4c55c0f2b3e7a982                                                                                                                                                                                                0.0s
 => => exporting config sha256:990f8bde0f9eb3a5afa0fbbcef62eabc8315540a7e4a0601c536d97f94ca9f0b                                                                                                                                                                                                  0.0s
 => => exporting attestation manifest sha256:49aafe8c09ef7758444fc09363d2f34461f3e5ba7ea0f8a805f88e7b63a5b14d                                                                                                                                                                                    0.0s
 => => exporting manifest list sha256:0b8e2367b4317234a997512951ceae6a5b942315b49e7c20ced91a7525796e41                                                                                                                                                                                           0.0s
 => => naming to docker.io/library/shopping_list_app-backend:latest                                                                                                                                                                                                                              0.0s
 => => unpacking to docker.io/library/shopping_list_app-backend:latest                                                                                                                                                                                                                           0.0s
 => [frontend internal] load .dockerignore                                                                                                                                                                                                                                                       0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                  0.0s
 => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:df02558528d3d3d0d621f112e232611aecfee7cbc654f6b375765f72bb262799                                                                                                                                                                 0.0s
 => => resolve docker.io/library/node:20-alpine@sha256:df02558528d3d3d0d621f112e232611aecfee7cbc654f6b375765f72bb262799                                                                                                                                                                          0.0s
 => [frontend internal] load build context                                                                                                                                                                                                                                                       2.3s
 => => transferring context: 985.91kB                                                                                                                                                                                                                                                            2.2s
 => [backend] resolving provenance for metadata file                                                                                                                                                                                                                                             0.0s
 => CACHED [frontend 2/5] WORKDIR /app                                                                                                                                                                                                                                                           0.0s
 => CACHED [frontend 3/5] COPY package.json package-lock.json* ./                                                                                                                                                                                                                                0.0s
 => CACHED [frontend 4/5] RUN npm ci || npm i                                                                                                                                                                                                                                                    0.0s
 => [frontend 5/5] COPY . .                                                                                                                                                                                                                                                                     17.0s
 => [frontend] exporting to image                                                                                                                                                                                                                                                               33.5s
 => => exporting layers                                                                                                                                                                                                                                                                         17.4s
 => => exporting manifest sha256:3e44ab65db695c1fb928be51e2396006c050d1224fab1fae4e02cfd1acf504b4                                                                                                                                                                                                0.0s
 => => exporting config sha256:4b1dfc90f1cf73d7040486e7b0540a3292e0151b961c52c910ed474c4f614dfe                                                                                                                                                                                                  0.0s
 => => exporting attestation manifest sha256:c8ba01edddf8dc4cf909be87734e845fd53a5c3539ae80e46d5167a26ffd1039                                                                                                                                                                                    0.0s
 => => exporting manifest list sha256:4a291d921162fdf3ca9461d0d9fa3a1e06a0aa558934971ce3dee2b904cbfedd                                                                                                                                                                                           0.0s
 => => naming to docker.io/library/shopping_list_app-frontend:latest                                                                                                                                                                                                                             0.0s
 => => unpacking to docker.io/library/shopping_list_app-frontend:latest                                                                                                                                                                                                                         15.6s
 => [frontend] resolving provenance for metadata file                                                                                                                                                                                                                                            0.1s
[+] Running 4/4
 ✔ backend                                 Built                                                                                                                                                                                                                                                 0.0s 
 ✔ frontend                                Built                                                                                                                                                                                                                                                 0.0s 
 ✔ Container shopping_list_app-backend-1   Recreated                                                                                                                                                                                                                                             1.7s 
 ✔ Container shopping_list_app-frontend-1  Recreated                                                                                                                                                                                                                                             2.6s 
Attaching to backend-1, db-1, frontend-1
db-1        | 
db-1        | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-1        | 
db-1        | 2025-08-11 02:20:19.919 UTC [1] LOG:  starting PostgreSQL 16.9 (Debian 16.9-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
db-1        | 2025-08-11 02:20:19.950 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db-1        | 2025-08-11 02:20:19.950 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db-1        | 2025-08-11 02:20:19.955 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db-1        | 2025-08-11 02:20:20.019 UTC [29] LOG:  database system was shut down at 2025-08-10 09:49:07 UTC
db-1        | 2025-08-11 02:20:20.080 UTC [1] LOG:  database system is ready to accept connections
frontend-1  | 
frontend-1  | > shopping-frontend@0.0.1 dev
frontend-1  | > vite --host 0.0.0.0
frontend-1  | 
backend-1   | Operations to perform:
backend-1   |   Apply all migrations: admin, auth, contenttypes, sessions, shopping
backend-1   | Running migrations:
backend-1   |   No migrations to apply.
frontend-1  | 
frontend-1  |   VITE v5.4.19  ready in 4538 ms
frontend-1  | 
frontend-1  |   ➜  Local:   http://localhost:5173/
frontend-1  |   ➜  Network: http://xxx.xx.x.x:5173/
backend-1   | Watching for file changes with StatReloader
backend-1   | Performing system checks...
backend-1   | 
backend-1   | System check identified no issues (0 silenced).
backend-1   | August 11, 2025 - 11:20:29
backend-1   | Django version 5.0.6, using settings 'shopping_backend.settings'
backend-1   | Starting development server at http://0.0.0.0:8000/
backend-1   | Quit the server with CONTROL-C.
backend-1   | 
db-1        | 2025-08-11 02:25:20.080 UTC [27] LOG:  checkpoint starting: time
db-1        | 2025-08-11 02:25:20.099 UTC [27] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.004 s, sync=0.001 s, total=0.018 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB; lsn=0/1A2D7E0, redo lsn=0/1A2D7A8


v View in Docker Desktop   o View Config   w Enable Watch

フロントエンドのURLは以下の2種類。

frontend-1  |   ➜  Local:   http://localhost:5173/
frontend-1  |   ➜  Network: http://xxx.xx.x.x:5173/

機密情報のため、自身のIPアドレスは隠してある。

Localは繋がった。

http://localhost:5173/

Networkが繋がらない。

NetworkのURLにアクセスできない問題を解決する

Dockerのアプリを起動してみる。

アイコンをクリックしても何も起こらなかったので、起動中のプロセスをcontrol + Cで停止した。

Gracefully stopping... (press Ctrl+C again to force)
[+] Stopping 3/3
 ✔ Container shopping_list_app-frontend-1  Stopped                                                                                                                                                                                                                                               0.7s 
 ✔ Container shopping_list_app-backend-1   Stopped                                                                                                                                                                                                                                               0.4s 
 ✔ Container shopping_list_app-db-1        Stopped                                                                                                                                                                                                                                               0.3s 
hiroki@shibatahiroshitakanoiMac shopping_list_app % 

朝、二つあったDockerアプリのうちの一つを削除したことが原因か?

今あるものをアンインストールしてから、入れ直そう。

と思ったが、アプリを右クリックして、パッケージの内容を表示を押して、

Contents > MacOS の中にあるアイコンをダブルクリックしたら、起動した。

この状態で再度、docker compose up buildを行う。

やはりアクセスできない。

これはGPT 5に聞いてしまおう。

NetworkのURLにアクセスできない問題をAIに相談

膨大な知識があることはわかったが、問題解決には至らなかった。

人間ならではの直感が大事になってくる。

大AI時代において。

接続しているIPアドレスに変更したら、うまく行った。

ログにあったIPとは異なる。

frontend-1  |   ➜  Local:   http://localhost:5173/
frontend-1  |   ➜  Network: http://xxx.xx.x.x:5173/

スマホでも同じURLでアクセスできている。

本題 : Docker compose up –buildは何をしているのか?

docker compose up --build は、Docker Compose が定義したサービスの イメージを必要に応じて再ビルドし、コンテナを起動してログに接続する コマンドです。

ポイントは3つ:

  • 再ビルド:Dockerfileや依存ファイルの変更を反映して新しいイメージを作成
  • 起動docker-compose.yml に基づき、すべてのサービスコンテナを立ち上げる
  • ログ接続:起動したコンテナのログをターミナルにリアルタイム表示

イメージ:アプリの実行環境や必要なファイル一式をまとめた“設計図”のようなもの。Python や Node.js のランタイム、依存ライブラリ、アプリのソースコードなどが含まれる。

サービスコンテナ:そのイメージから作られて実際に動いている“実行中の箱”のこと。アプリやデータベースなど、サービスごとに独立して動作する。

ランタイム:プログラムを動かすための実行環境。例として Python ランタイムなら Python インタプリタや標準ライブラリが含まれ、コードを動かせる状態を提供する。

サービス:アプリや機能の単位として動くコンポーネント。Webアプリのバックエンドやフロントエンド、データベースなど、特定の役割を持ったプロセスやコンテナのまとまり。

おっしゃる通り、3つのコンテナが立ち上がっている。

 ✔ backend                                 Built                                                                                                                                                                                                                                                 0.0s 
 ✔ frontend                                Built                                                                                                                                                                                                                                                 0.0s 
 ✔ Container shopping_list_app-db-1        Running                                                                                                                                                                                                                                               0.0s 
 ✔ Container shopping_list_app-backend-1   Recreated                                                                                                                                                                                                                                             4.9s 
 ✔ Container shopping_list_app-frontend-1  Recreated                                                                                                                                                                                                                                             4.9s 
Attaching to backend-1, db-1, frontend-1

フォルダ構成はこちら。

// Directory layout:
// .
// ├─ docker-compose.yml
// ├─ backend/
// │  ├─ Dockerfile
// │  ├─ requirements.txt
// │  ├─ manage.py
// │  ├─ shopping_backend/
// │  │  ├─ __init__.py
// │  │  ├─ settings.py
// │  │  ├─ urls.py
// │  │  └─ asgi.py
// │  └─ shopping/
// │     ├─ __init__.py
// │     ├─ models.py
// │     ├─ serializers.py
// │     ├─ views.py
// │     ├─ urls.py
// │     └─ admin.py
// └─ frontend/
//    ├─ Dockerfile
//    ├─ package.json
//    ├─ vite.config.js
//    ├─ index.html
//    └─ src/
//       ├─ main.js
//       ├─ App.vue
//       └─ components/
//          └─ ShoppingList.vue

ルートにあるdocker-compose.ymlの中で、dbが定義されていた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です