Compose 是一個工具,用來定義與執行多個 container 組成的 Docker Applications。你可以使用 Compose 檔案來組態設定你的應用服務。然後使用單一命令,透過你的組態設定來建立與啟動你的服務。
適用所有 Linux
$> sudo -i
#> curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#> chmod +x /usr/local/bin/docker-compose
#> docker-compose --version
## 啟動容器服務 docker-compose up docker-compose up -d #背景模式 ## 終止/結束容器服務 docker-compose down ## 開啟容器服務 docker-compose start ## 停止容器服務 docker-compose stop ## 檢視容器服務狀透 docker-compose ps ## 進入指定服務的console docker-compose exec <service-name> bash
image
指定容器的映像檔
image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd
build
指定要 re-build 的容器檔案目錄,該目錄底下必須有 Dockerfile。
build: 7.2-fpm-opcache
command
執行特定指令
command: bundle exec thin -p 3000 or command: [bundle, exec, thin, -p, 3000]
links
用於連結另一容器服務,如需要使用到另一容器的mysql服務。可以給出服務名和別名;也可以僅給出服務名,這樣別名將和服務名相同。同 docker run --link。
links: - db - db:mysql - redis
ports
開啟主機端與容器的通訊埠對映
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
expose
提供 container 之間的埠訪問,不會暴露給主機使用。同 docker run --expose。
expose: - "3000" - "8000"
volumes
掛載主機端與容器的資料卷對映
volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro
volumes_from
掛載指定容器服務的資料卷
當需要存取其它容器內的資料卷時,不用再一一重新掛載,而是利用這參數將指定容器的 volumes 都包含進目前容器。
volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw
environment
環境變數的宣告
environment: - MYSQL_ROOT_PASSWORD=ThisIsMyPassword
depends_on
用於指定服務依賴,一般是mysql、redis等。
指定了依賴,將會優先於服務建立並啟動依賴。
links 也可以指定依賴。
external_links
連結搭配 docker-compose.yml 檔案或者 Compose 之外定義的服務,通常是提供共享或公共服務。格式與links相似:
注意,external_links連結的服務與當前服務必須是同一個網路環境。
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql
extra_hosts
新增主機名稱對應
將會在/etc/hosts建立記錄:
162.242.195.82 somehost
50.31.209.229 otherhost
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
networks
設定網路。類似 docker network 指令。可以和 servcies 區塊內的 network 搭配使用
version: '3' services: t1: image: tomcat:8.5.11-jre8 networks: - test-net t2: image: tomcat:8.5.11-jre8 networks: - test-net networks: test-net:
dns
自定義 DNS 伺服器。
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9