docker-compose簡介
Compose 是用於定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啓動所有服務。
docker 容器使用
yml 文件不僅指定正在使用的容器,還指定如何單獨配置各容器
基本規則
大小寫敏感
使用縮進表示層級關係
禁止使用tab縮進,只能使用空格鍵
縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級
使用#表示註釋
字符串可以不用引號標註
YAML中允許表示三種格式,分別是常量值,對象和數組
uild:定義鏡像生成,可以指定Dockerfile文件所在的目錄路徑,支持絕對路徑和相對路徑;
image:從指定的鏡像中啓動容器,可以是存儲倉庫、標籤以及鏡像 ID,如果鏡像不存在,Compose 會自動拉去鏡像;
environment:定義環境變量和配置;
ports:定義端口映射,比如上面配置中將容器上的公開端口 80 轉接到主機上的外部端口 9901和9902;
depends_on,定義依賴關係。此定義會讓當前服務處於等待狀態,直到這些依賴服務啓動。比如某個服務依賴數據庫服務,那麼通過此配置解決了服務的啓動順序的問題;
volumes,掛載一個目錄或者一個已存在的數據卷容器,可以直接使用 HOST:CONTAINER 這樣的格式,或者使用 HOST:CONTAINER:ro 這樣的格式,後者對於容器來說,數據卷是隻讀的,這樣可以有效保護宿主機的文件系統;
context,指定Dockerfile 的文件路徑,也可以是到鏈接到 git 倉庫的 url;
args,指定構建參數,這些參數只能在構建過程中訪問;
target,定義構建指定的階段Dockerfile,比如針對不同階段使用不同的dockerfile,開發階段使用支持編譯調試的dockerfile,而生產環境,則使用輕量級的dockerfile;command,覆蓋默認命令;
container_name,指定自定義容器名稱,而不是生成的默認名稱。
depends_on:解決了容器的依賴、啓動先後的問題
container_name:全控制容器的命名,可以使用這個標籤指定
build:服務除了可以基於指定的鏡像,還可以基於一份 Dockerfile,在使用 up 啓動之時執行構建任務,這個構建標籤就是 build,它可以指定 Dockerfile 所在文件夾的路徑。Compose 將會利用它自動構建這個鏡像,然後使用這個鏡像啓動服務容器
entrypoint:用於指定接入點
entrypoint: /code/entrypoint.sh
expose:用於指定暴露的端口,但是隻是作爲一種參考,實際上docker-compose.yml的端口映射還得ports這樣的標籤。
version: "3"
services:
zzyly:
image: zzytest
container_name: zzyly
ports:
- 80:8080
entrypoint: ["python","main.py"]
docker-compose搭建PHP環境
首先創建 docker-compose.yml 文件
檢測yml工具
version: '3'
services:
nginx:
image: nginx:latest
# 端口映射
ports:
- "80:80"
# 依賴關係 先跑php
depends_on:
- "php"
# 數據卷
volumes:
# 映射主機./conf.d目錄到容器/etc/nginx/conf.d目錄
- "/Users/gongzhiyang/data/www:/var/www/html:rw"
- "/Users/gongzhiyang/data/etc/nginx:/etc/nginx:rw"
networks:
- app_net
# 容器名稱
container_name: "compose-nginx"
php:
image: php-fpm:2019.8
ports:
- "9000:9000"
volumes:
- "/Users/gongzhiyang/data/www:/var/www/html:rw" # web站點目錄
- "/Users/gongzhiyang/data/etc/php/etc/:/usr/local/etc/:rw"
networks:
- app_net
container_name: "compose-php"
mysql:
image: mysql:5.7
ports:
- "3306:3306"
# 環境變量
environment:
# mysql密碼
- MYSQL_ROOT_PASSWORD=123456
networks:
app_net:
# 固定子網ip,網段必須在子網絡10.10.*.*
ipv4_address: 10.10.10.1
container_name: "compose-mysql"
networks:
# 配置docker network
app_net:
driver: bridge
ipam:
config:
# 子網絡
- subnet: 10.10.0.0/16