Docker-compose 使用全解

一、Compose安裝

在安裝compose之前,要確保已經安裝了docker1.3或以上版本 
在Linux64位系統上安裝compose:

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(見二)

  • uname -suname -m中的兩個引號是鍵盤上ESC下面的那個按鍵 
    此時,compose已經安裝成功,使用命令docker-compose --version可以查看

如果是在OS X系統上,則需要執行如下步驟(未親測):


二、Compose命令補全

安裝命令補全

確保bash completion已經安裝,如果當前使用非最小安裝的Linux,bash completion已經OK了,如果是在MAC上,可以使用brew install bash-completion來安裝 
將completion腳本放在/etc/bash_completion.d/(在MAC上是/usr/local/etc/bash_completion.d/)

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和SIGUSR1

擁有了這項功能以後,Compose更快更少輸入了呢!Happy working!


三、Compose使用實例

在本例中將會實現啓動nginx服務及一個數據卷容器,並將該數據卷容器作爲nginx的靜態文件 
1.創建compose文件夾 
sudo mkdir composetest 
cd composetest 
2.創建docker-compose.yml文件 
touch docker-compose.yml 
vim docker-compose.yml 
在docker-compose.yml中輸入以下內容:

dvc:  
  image: debian:wheezy
  volumes:  
   - /www:/usr/share/nginx/html:ronginx:
  image: nginx:latest
  volumes_from:
   - dvc  ports:
   - "8081:80"12345678910111234567891011

3.啓動 
docker-compose up -d 
注:使用命令docker-compose ps查看運行狀況


四、CLI 說明(docker-compose 命令)

大多數Compose命令都是運行於一個或多個服務的,如果服務沒有指定,該命令將會應用到所有服務,如果要獲得所有可用信息,使用命令:docker-compose [COMMAND] --help,下面是命令(COMMAND)的說明:

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命令說明

每一個定義在docker-compose.yml中的服務必須明確指定一個image或者build選項,這與docker run命令行中輸入的是對應相同的,對於docker run,在Dockerfile文件中指定的選項(比如CMD、EXPOSE、VOLUME、ENV)是默認的,因此不必在docker-compose.yml中再指定一次

image 
標明image的ID,這個image ID可以是本地也可以是遠程的,如果本地不存在,Compose會嘗試去pull下來

image: ubuntu  image: orchardup/postgresql  image: a4bc65fd  123123

build 
該參數指定Dockerfile文件的路徑,該目錄也是發送到守護進程的構建環境(這句有點),Compose將會以一個已存在的名稱進行構建並標記,並隨後使用這個image

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

六、Compose環境變量說明

環境變量已經不再是用來連接服務的推薦方法了,相反,應該使用鏈接名稱(默認情況下是鏈接服務的名稱)作爲主機名稱來連接,這可以查看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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章