# Docker Compose 基礎教學
---
## Docker Compose 簡介

----
Docker Compose 是一個開源工具,可讓您使用YAML文件來定義和運行多個容器應用程序。這些容器可以共同工作,以形成一個應用程序。使用Docker Compose,您可以編寫一個單一文件,以描述您的應用程序的架構和配置,然後使用一個命令來啟動,停止和重建整個應用程序。
----
### 優勢
* 簡化了多容器應用程序的部署和管理。
* 容易定義整個應用程序的配置,因為所有內容都包含在一個文件中。
* 可以快速複製和部署整個應用程序,使您的開發流程更加高效。
* 可以更好地管理容器的生命週期,例如在容器停止時清理資源。
---
### 編寫結構
----
Docker compose是採用YAML的格式編寫
以下是常見的Docker compose 參數
* version:Docker Compose的版本號。
* services:定義多個容器,每個容器都對應一個服務。
* networks:定義多個網絡,每個網絡對應一個區域網路。
* volumes:定義多個卷,每個卷對應一個資料區域。
* configs:定義多個配置,每個配置對應一個容器的配置。
----
```yaml=
version: '3' # 指定Docker Compose文件的版本號
services:
web: # 定義一個名為"web"的服務
build: . # 使用當前目錄下的Dockerfile進行構建
container_name: my_web_container # 指定容器名稱為"my_web_container"
restart: always # 容器退出後總是重啟
ports: # 映射端口號
- "8000:80" # 將主機的8000端口號映射到容器的80端口號
volumes: # 挂載卷
- ./webapp:/code # 挂載主機上的./webapp目錄到容器的/code目錄
db: # 定義一個名為"db"的服務
image: postgres:latest # 使用最新版的Postgres鏡像
container_name: my_db_container # 指定容器名稱為"my_db_container"
restart: always # 容器退出後總是重啟
environment: # 環境變量
POSTGRES_USER: myuser # 設置Postgres用戶名
POSTGRES_PASSWORD: mypass # 設置Postgres密碼
networks: # 定義網絡
app_net: # 定義一個名為"app_net"的網絡
volumes: # 定義卷
db_data: # 定義一個名為"db_data"的卷
```
----
* version:指定Docker Compose文件的版本號,這裡使用的是版本3。
* services:定義Docker Compose中的多個服務,這裡定義了兩個服務:"web"和"db"。
* build:指定Docker Compose中的服務使用當前目錄下的Dockerfile進行構建。
* container_name:指定Docker Compose中的服務對應的容器名稱。
* restart:指定Docker Compose中的服務在退出後總是重啟。
----
* ports:指定Docker Compose中的服務需要映射到主機的端口號,這裡將主機的8000端口號映射到容器的80端口號。
* volumes:指定Docker Compose中的服務需要掛載的卷,這裡挂載了主機上的./webapp目錄到容器的/code目錄。
* image:指定Docker Compose中的服務使用
----
```yaml=
---
version: "2"
services:
bookstack:
image: lscr.io/linuxserver/bookstack
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- APP_URL=http://192.168.1.58:6875
- DB_HOST=bookstack_db
- DB_PORT=3306
- DB_USER=bookstack
- DB_PASS=1qaz2wsx
- DB_DATABASE=bookstackapp
volumes:
- /path/to/data:/config
ports:
- 6875:80
restart: unless-stopped
depends_on:
- bookstack_db
bookstack_db:
image: lscr.io/linuxserver/mariadb
container_name: bookstack_db
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=1qaz2wsx
- TZ=Europe/London
- MYSQL_DATABASE=bookstackapp
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=1qaz2wsx
volumes:
- /path/to/data:/config
restart: unless-stopped
```
{"metaMigratedAt":"2023-06-18T00:52:15.426Z","metaMigratedFrom":"YAML","title":"Docker Compose 基礎教學","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"spotlight\":{\"enabled\":false}}","contributors":"[{\"id\":\"388c4bf6-8beb-45c5-8632-2fb50296a8c5\",\"add\":2766,\"del\":3}]"}