Docker Compose
1. Docker Compose 可以做什麼?
主要是解決容器管理的問題。舉個例子,一個小型的 LNMP 網站,需要 Linux 容器,Nginx 容器,MySQL容器,PHP容器 相互配合,這時 docker compose 就派上用場了。
2. Docker Compose 常用命令
命令 | 解釋 |
---|---|
docker-compose ps | 檢視當前資料夾下 compose 管理的容器 |
docker-compose start CONTAINER_NAME | 啟動容器 |
docker-compose stop CONTAINER_NAME | 停止容器 |
docker-compose -p PROJECT_NAME up -d | 建立並啟動當前資料夾下 docker-compose.yml 配置的 所有容器(-d:後臺執行,-p:指定專案名稱)可以使用 -f 指定 啟動時讀取的 配置檔案 |
docker-compose down | 停止 並 刪除所管理的容器 |
docker-compose logs 容器名稱 | 檢視容器的log日誌 |
3. 編寫 docker-compose.yml 配置檔案
# 代表我們定義的 docker-compose.yml 檔案內容所採用的版本
version: "3"
networks:
frontend:
backend:
# 定義了網路驅動的型別,並指定了子網的網段
spnet:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.10.1.0/24
volumes:
mysql-data:
external-data:
# 如果我們想把屬於 Docker Compose 專案以外的資料卷引入進來直接使用,我們可以將資料卷定義為外部引入,
# 在加入 external 定義後,Docker Compose 在建立專案時不會直接建立資料卷,而是優先從 Docker Engine 中已有的資料卷裡尋找並直接採用。
external: true
services:
redis:
# 映象
image: redis:3.2
# 網路
networks:
backend:
# 定義網路別名
aliases:
- backend.database
# 資料卷
volumes:
- ./redis/redis.conf:/etc/redis.conf:ro
# 埠對映
ports:
- "6379:6379"
# Redis 啟動命令
command: ["redis-server", "/etc/redis.conf"]
database:
image: mysql:5.7
networks:
- backend
# 應用已經定義的資料卷
volumes:
- ./mysql/my.cnf:/etc/mysql/my.cnf:ro
- mysql-data:/var/lib/mysql
# 環境變數
environment:
- MYSQL_ROOT_PASSWORD=my-secret-pw
ports:
- "3306:3306"
webapp:
build: ./webapp
networks:
- frontend
- backend
volumes:
- ./webapp:/webapp
# 依賴
depends_on:
- redis
- database
nginx:
image: nginx:1.12
networks:
- frontend
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./webapp/html:/webapp/html
depends_on:
- webapp
ports:
- "80:80"
- "443:443"
本作品採用《CC 協議》,轉載必須註明作者和本文連結