在安裝compose以前,要確保已經安裝了docker1.3或以上版本
在Linux64位系統上安裝compose:html
curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 1212
注:固然能夠選擇安裝command completion
(見二)python
uname -s
和uname -m
中的兩個引號是鍵盤上ESC下面的那個按鍵
此時,compose已經安裝成功,使用命令docker-compose --version
能夠查看mysql
若是是在OS X系統上,則須要執行以下步驟(未親測):linux
確保bash completion已經安裝,若是當前使用非最小安裝的Linux,bash completion已經OK了,若是是在MAC上,可使用brew install bash-completion
來安裝
將completion腳本放在/etc/bash_completion.d/(在MAC上是/usr/local/etc/bash_completion.d/)nginx
curl -L https://raw.githubusercontent.com/docker/compose/1.1.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose11
在下次登陸時,Completion功能已經可使用
可用的補全取決於在命令行的輸入,會補全:
* 可用的Docker-compose命令
* 對於某一特別命令可用的選項
* 在一個給定的上下文條件(好比:具備運行或中止狀態的實例的服務或者基於鏡像的服務 VS 基於Dockerfile的服務)下,給出有可行的服務名稱,對於docker-compose scale
,補全服務名稱時會自動有」=」附加上去
* 對於可選項的參數,好比:docker-compose kill -s
會完成一些信號,好比SIGUP和SIGUSR1git
擁有了這項功能之後,Compose更快更少輸入了呢!Happy working!github
在本例中將會實現啓動nginx服務及一個數據卷容器,並將該數據卷容器做爲nginx的靜態文件
1.建立compose文件夾 sudo mkdir composetest
cd composetest
2.建立docker-compose.yml文件 touch docker-compose.yml
vim docker-compose.yml
在docker-compose.yml中輸入如下內容:web
dvc: p_w_picpath: debian:wheezy volumes: - /www:/usr/share/nginx/html:ronginx: p_w_picpath: nginx:latest volumes_from: - dvc ports: - "8081:80"12345678910111234567891011
3.啓動 docker-compose up -d
注:使用命令docker-compose ps
查看運行情況redis
大多數Compose命令都是運行於一個或多個服務的,若是服務沒有指定,該命令將會應用到全部服務,若是要得到全部可用信息,使用命令:docker-compose [COMMAND] --help
,下面是命令(COMMAND)的說明:sql
build
建立或者再建服務
服務被建立後會標記爲project_service(好比composetest_db),若是改變了一個服務的Dockerfile或者構建目錄的內容,可使用docker-compose build
來重建它
help
顯示命令的幫助和使用信息
kill
經過發送SIGKILL
的信號強制中止運行的容器,這個信號能夠選擇性的經過,好比: docker-compose kill -s SIGKINT
logs
顯示服務的日誌輸出
port
爲端口綁定輸出公共信息
ps
顯示容器
pull
拉取服務鏡像
rm
刪除中止的容器
run
在服務上運行一個一次性命令,好比: docker-compose run web Python manage.py shell
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 up --no-recreate
,若是有須要的話,這會啓動任何中止的容器
–verbose
顯示更多輸出
–version
顯示版本號並退出
-f,–file FILE
指定一個可選的Compose yaml文件(默認:docker-compose.yml)
-p,–project-name NAME
指定可選的項目名稱(默認:當前目錄名稱)
每個定義在docker-compose.yml中的服務必須明確指定一個p_w_picpath或者build選項,這與docker run
命令行中輸入的是對應相同的,對於docker run
,在Dockerfile文件中指定的選項(好比CMD、EXPOSE、VOLUME、ENV)是默認的,所以沒必要在docker-compose.yml中再指定一次
p_w_picpath
標明p_w_picpath的ID,這個p_w_picpath ID能夠是本地也能夠是遠程的,若是本地不存在,Compose會嘗試去pull下來
p_w_picpath: ubuntu p_w_picpath: orchardup/postgresql p_w_picpath: a4bc65fd 123123
build
該參數指定Dockerfile文件的路徑,該目錄也是發送到守護進程的構建環境(這句有點),Compose將會以一個已存在的名稱進行構建並標記,並隨後使用這個p_w_picpath
build: /path/to/build/dir 11
command
重寫默認的命令
command: bundle exec thin -p 3000 11
links
鏈接到其餘服務中的容器,能夠指定服務名稱和這個連接的別名,或者只指定服務名稱
links: - db - db:database - redis 12341234
此時,在容器內部,會在/etc/hosts
文件中用別名建立一個條目,就像這樣:
172.17.2.186 db 172.17.2.186 database 172.17.2.186 redis 123123
環境變量也會被建立,關於環境變量的參數,會在後面講到
external_links
鏈接到在這個docker-compose.yml文件或者Compose外部啓動的容器,特別是對於提供共享和公共服務的容器。在指定容器名稱和別名時,external_links
遵循着和links
相同的語義用法
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql 12341234
ports
暴露端口,指定二者的端口(主機:容器),或者只是容器的端口(主機會被隨機分配一個端口)
注:當以 主機:容器 的形式來映射端口時,若是使容器的端口小於60,那可能會出現錯誤,由於YAML會將 xx:yy這樣格式的數據解析爲六十進制的數據,基於這個緣由,時刻記得要將端口映射明確指定爲字符串
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001" 1234512345
expose
暴露端口而沒必要向主機發布它們,而只是會向連接的服務(linked service)提供,只有內部端口能夠被指定
expose: - "3000" - "8000" 123123
volumes
掛載路徑最爲卷,能夠選擇性的指定一個主機上的路徑(主機:容器),或是一種可以使用的模式(主機:容器:ro)
volumes_from: - service_name - container_name 123123
environment
加入環境變量,可使用數組或者字典,只有一個key的環境變量能夠在運行Compose的機器上找到對應的值,這有助於加密的或者特殊主機的值
environment: RACK_ENV: development SESSION_SECRET: environments: - RACK_ENV=development - SESSION_SECRET 123456123456
env_file
從一個文件中加入環境變量,該文件能夠是一個單獨的值或者一張列表,在environment
中指定的環境變量將會重寫這些值
env_file: - .env RACK_ENV: development 1234512345
net
網絡模式,能夠在docker客戶端的--net
參數中指定這些值
net: "bridge" net: "none" net: "container:[name or id]" net: "host" 12341234
dns
自定義DNS服務,能夠是一個單獨的值或者一張列表
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9 12341234
cap_add,cap_drop
加入或者去掉容器能力,查看man 7 capabilities
能夠有一張完整的列表
cap_add: - ALL cap_drop: - NET_ADMIN - SYS_ADMIN 123456123456
dns_search
自定義DNS搜索範圍,能夠是單獨的值或者一張列表
dns_search: example.com dns_search: - dc1.example.com - dc2.example.com 12341234
working_dir,entrypoint,user,hostname,domainname,mem_limit,privileged,restart,stdin_open,tty,cpu_shares
上述的每個都只是一個單獨的值,和docker run
中對應的參數是同樣的
cpu_shares: 73working_dir: /codeentrypoint: /code/entrypoint.shuser: postgresqlhostname: foodomainname: foo.commem_limit: 1000000000privileged: truerestart: alwaysstdin_open: truetty: true 1234567891011121314151612345678910111213141516
環境變量已經再也不是用來鏈接服務的推薦方法了,相反,應該使用連接名稱(默認狀況下是連接服務的名稱)做爲主機名稱來鏈接,這能夠查看docker-compose.yml
的更多細節
Compose使用Docker links來暴露服務的容器給其餘的。每個連接的容器都使用了一組環境變量,這每一組環境變量都是以容器名稱的大寫字母開頭的
要查看服務可用的環境變量,運行docker-compose run SERVICE env
name_PORT
完整URL,如:DB_PORT=tcp//172.17.0.5:5432
name_PORT_num_protocol
完整URL,如:DB_PORT_5432_TCP=tcp://172.17.0.5:5432
name_PORT_num_protocol_ADDR
容器的IP地址,如:DB_PORT_5432_TCP_ADDR=172.17.0.5
name_PORT_num_protocol_PORT
暴露的端口號,如:DB_PORT_5432_TCP_PORT=5432
name_PORT_num_protocol_PROTO
協議(tcp或者udp),如:DB_PORT_5432_TCP_PROTO=tcp
name_NAME
徹底合格的容器名稱,如:DB_1_NAME=/myapp_web_1/myapp_db_1
原文連接:http://blog.csdn.net/zhiaini06/article/details/45287663