docker-compose.yml的使用
docker-compose.yml包含version、services、networks3大部分
services的書寫規則
1.iamge
services: web: # 服務名稱,用戶自定義 image: busybox # 鏡像名稱/鏡像ID,如果本地不存在compose會拉取鏡像
# 以下格式都可
images: redis
images: mysql:latest
images: example-registry.com:4000/postgresql
2.build-------基於Dockerfile,指定Dockerfile所在路徑,Compose會利用它自動構建鏡像,然後啟動服務容器
# 絕對路徑 build: /path/build # 相對路徑 build:./build # 設定上下文跟目錄,以此目錄指定Dockerfile build: context: ../ dockerfile: path/Dockerfile # 給Dockerfile構建的鏡像命名 build: ./dir images: nginx:latest # 構建過程中指定環境變量,構建成功後取消 build: context: . args: buildno: 1 password: secretor build: context: . args: - buildno=1 - password=secret ##與ENV不同,ARG允許空值
3.command-------覆蓋容器啟動後默認執行的命令
command: bundle exec thin -p 3000 or 寫成dockerfile的格式 command: [bundle, exec, thin, -p, 3000]
4.container_name-----容器名稱
container_name: app
5.depends_on-------容器依賴
# 基於redis和db服務啟動web服務 version: ‘2‘ services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
6.dns --------
dns: 8.8.8.8 or dns: - 8.8.8.8 - 9.9.9.9 dns_search: example.com dns_search: - xxxx - xxxx
7. tmpfs--------掛在臨時目錄到容器內部,與run參數效果一致
tmpfs: /run tmpfs: - /run - /tmp
8.entrypoint--------覆蓋Dockerfile中ENTRYPOINTmingling
entrypoint: /code/entrypoint.sh
#
entrypoint:
- php
- -d
9.env_file--------指定配置文件,設置compose的變量(可通過docker-compose -f FILE指定配置文件)
env_file: .env # 若與environment指令沖突,以後者為準
# 可設置多個
env_file:
- ./xx.env
- xx.env
# 此變量不對build構建過程生效
10.environment--------設置鏡像變量,啟動後的容器會包含這些變量設置
environment: RACK_ENV: development SHOW: ‘true‘ SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRE
11.external_links-------------讓compose項目裏面的容器鏈接到項目配置外部的容器(外部容器中必須至少有一個容器鏈接到項目內服務的同一個網絡裏)
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql
12.exra_hosts-----------添加主機名標簽(向/etc/hosts文件中添加紀錄)
extra_hosts: - "mysql:ip" - "nginx:ip" # 啟動容器後查看內部hosts ip mysql ip nginx
13.links-----------鏈接到其它服務器中的容器
links: - db - db:mysql - redis
# 使用的別名會自動在容器的/etc/hosts裏創建
ip db
ip mysql
ip redis
14.logging--------配置日誌服務
logging: driver: syslog options: syslog-address: "tcp://ip"
# 默認的dirver是json-file,可通過docker-compose logs顯示日誌
15.ports---------映射端口(HOST:CONTAINER)
ports: - "3000" - "8000:80" - "2222:22" - "127.0.0.1:8080:8080"
16.volumes-------掛載一個目錄或者已經存在的數據卷容器(HOST:CONTAINER/HOST:CONTAINER:ro,後者設定數據卷只讀,可保護宿主機器的文件系統)
volumes: // 只是指定一個路徑,Docker 會自動在創建一個數據卷(這個路徑是容器內部的)。 - /var/lib/mysql // 使用絕對路徑掛載數據卷 - /opt/data:/var/lib/mysql // 以 Compose 配置文件為中心的相對路徑作為數據卷掛載到容器。 - ./cache:/tmp/cache // 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。 - ~/configs:/etc/configs/:ro // 已經存在的命名的數據卷。 - datavolume:/var/lib/mysql
# 從其他容器或者服務掛在數據卷
volumes_from:
- service_name
- service_name: ro
- container: container_name
- container: container_name:rw
17.network_mode-------網絡模式:
network_mode: "bridge" network_mode: "host" network_mode: "none" network_mode: "service:[service name]" network_mode: "container:[container name/id]"
18.networks----------加入指定網絡
services: some-service: networks: - some-network - other-network
docker compose常用命令
docker-compose up -d # 在後臺啟動服務
docker-compose ps # 查看啟動的服務
docker-compose stop #停止服務
#查看幫助 docker-compose -h # -f 指定使用的 Compose 模板文件,默認為 docker-compose.yml,可以多次指定。 docker-compose -f docker-compose.yml up -d #啟動所有容器,-d 將會在後臺啟動並運行所有的容器 docker-compose up -d #停用移除所有容器以及網絡相關 docker-compose down #查看服務容器的輸出 docker-compose logs #列出項目中目前的所有容器 docker-compose ps #構建(重新構建)項目中的服務容器。服務容器一旦構建後,將會帶上一個標記名,例如對於 web 項目中的一個 db 容器,可能是 web_db。可以隨時在項目目錄下運行 docker-compose build 來重新構建服務 docker-compose build #拉取服務依賴的鏡像 docker-compose pull #重啟項目中的服務 docker-compose restart #刪除所有(停止狀態的)服務容器。推薦先執行 docker-compose stop 命令來停止容器。 docker-compose rm #在指定服務上執行一個命令。 docker-compose run ubuntu ping docker.com #設置指定服務運行的容器個數。通過 service=num 的參數來設置數量 docker-compose scale web=3 db=2 #啟動已經存在的服務容器。 docker-compose start #停止已經處於運行狀態的容器,但不刪除它。通過 docker-compose start 可以再次啟動這些容器。 docker-compose stop
docker-compose.yml的使用