Compose是一個定義和管理多容器的工具,使用Python語言編寫。使用Compose配置文件描述多個容器應用的架構,比如使用
什麼鏡像、數據卷、網絡、映射端口等;然後一條命令管理所有服務,比如啓動、停止、重啓等
安裝
安裝 Compose 之前,要先安裝 Docker,在此不再贅述。
PIP 安裝
這種方式最爲推薦。
執行命令。
$ sudo pip install -U docker-compose
安裝成功後,可以查看 docker-compose 命令的用法。
$ docker-compose -h
Fast, isolated development environments using Docker.
Usage:
docker-compose [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
--verbose Show more output
--version Print version and exit
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
Commands:
build Build or rebuild services
help Get help on a command
kill Kill containers
logs View output from containers
port Print the public port for a port binding
ps List containers
pull Pulls service images
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
restart Restart services
up Create and start containers
之後,可以添加 bash 補全命令。
$ curl -L https://raw.githubusercontent.com/docker/compose/1.2.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
二進制包
發佈的二進制包可以在 https://github.com/docker/compose/releases 找到。
下載後直接放到執行路徑即可。
例如,在常見的 Linux 平臺上。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod a+x /usr/local/bin/docker-compose
Compose 命令說明
大部分命令都可以運行在一個或多個服務上。如果沒有特別的說明,命令則應用在項目所有的服務上。
執行 docker-compose [COMMAND] --help 查看具體某個命令的使用說明。
基本的使用格式是
docker-compose [options] [COMMAND] [ARGS...]
選項
--verbose 輸出更多調試信息。
--version 打印版本並退出。
-f, --file FILE 使用特定的 compose 模板文件,默認爲 docker-compose.yml。
-p, --project-name NAME 指定項目名稱,默認使用目錄名稱。
命令
build
構建或重新構建服務。
服務一旦構建後,將會帶上一個標記名,例如 web_db。
可以隨時在項目目錄下運行 docker-compose build 來重新構建服務。
help
獲得一個命令的幫助。
kill
通過發送 SIGKILL 信號來強制停止服務容器。支持通過參數來指定發送的信號,例如
$ docker-compose kill -s SIGINT
logs
查看服務的輸出。
port
打印綁定的公共端口。
ps
列出所有容器。
pull
拉取服務鏡像。
rm
刪除停止的服務容器。
run
在一個服務上執行一個命令。
例如:
$ docker-compose run ubuntu ping docker.com
將會啓動一個 ubuntu 服務,執行 ping docker.com 命令。
默認情況下,所有關聯的服務將會自動被啓動,除非這些服務已經在運行中。
該命令類似啓動容器後運行指定的命令,相關卷、鏈接等等都將會按照期望創建。
兩個不同點:
給定命令將會覆蓋原有的自動運行命令;
不會自動創建端口,以避免衝突。
如果不希望自動啓動關聯的容器,可以使用 --no-deps 選項,例如
$ docker-compose run --no-deps web python manage.py shell
將不會啓動 web 容器所關聯的其它容器。
scale
設置同一個服務運行的容器個數。
通過 service=num 的參數來設置數量。例如:
$ docker-compose scale web=2 worker=3
start
啓動一個已經存在的服務容器。
stop
停止一個已經運行的容器,但不刪除它。通過 docker-compose start 可以再次啓動這些容器。
up
構建,(重新)創建,啓動,鏈接一個服務相關的容器。
鏈接的服務都將會啓動,除非他們已經運行。
默認情況, docker-compose up 將會整合所有容器的輸出,並且退出時,所有容器將會停止。
如果使用 docker-compose up -d ,將會在後臺啓動並運行所有的容器。
默認情況,如果該服務的容器已經存在, docker-compose up 將會停止並嘗試重新創建他們(保持使用 volumes-from 掛載的卷),以保證 docker-compose.yml 的修改生效。如果你不想容器被停止並重新創建,可以使用 docker-compose up --no-recreate。如果需要的話,這樣將會啓動已經停止的容器。
環境變量
環境變量可以用來配置 Compose 的行爲。
以DOCKER_開頭的變量和用來配置 Docker 命令行客戶端的使用一樣。如果使用 boot2docker , $(boot2docker shellinit) 將會設置它們爲正確的值。
COMPOSE_PROJECT_NAME
設置通過 Compose 啓動的每一個容器前添加的項目名稱,默認是當前工作目錄的名字。
COMPOSE_FILE
設置要使用的 docker-compose.yml 的路徑。默認路徑是當前工作目錄。
DOCKER_HOST
設置 Docker daemon 的地址。默認使用 unix:///var/run/docker.sock,與 Docker 客戶端採用的默認值一致。
DOCKER_TLS_VERIFY
如果設置不爲空,則與 Docker daemon 交互通過 TLS 進行。
DOCKER_CERT_PATH
配置 TLS 通信所需要的驗證(ca.pem、cert.pem 和 key.pem)文件的路徑,默認是 ~/.docker 。
體驗
LNMP
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
links:
- php:php-cgi
volumes:
- ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build: ./php
links:
- mysql:mysql-db
volumes:
- ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
image: mysql:5.6
ports:
- 3306:3306
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
# command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123