compose項目簡介html
compose項目來源於以前的Fig項目,使用python代碼編寫。compose項目主要用於編排部署基於docker的應用。自己與docker/swarm配合度很高。python
Docker Compose 是 Docker 編排服務的一部分,能夠讓用戶在其餘平臺快速安裝docker,Swarm 可讓 Docker 容器在集羣中高效運轉,而 Compose 可讓用戶在集羣中部署分佈式應用。簡單的說,docker compose 屬於一個」應用層」的服務,用戶能夠定義那個容器組運行那個容器,它支持動態改變應用,並在須要時擴展。mysql
相對於kubernetes來講功能比較簡單,至關於kubernetes的一個子集。 web
dockerfile可讓用戶管理一個單獨的應用容器,而redis
Compose則容許用戶在一個模板(yaml格式)中定義一組相關聯的應用容器(稱爲project,即項目了,例如一個調度器,兩個web服務容器再加上後端的數據庫服務容器等。sql
1安裝docker-compose(先安裝pip)docker
pip相似RedHat裏面的yum.安裝Python包很是方便shell
2在安裝compose數據庫
3安裝成功後,能夠查看docker-compose的版本和命令的用法ubuntu
首先介紹幾個術語。
服務(service):一個應用容器,實際上能夠運行多個相同鏡像的實例。
項目(project):由一組關聯的應用容器組成的一個完整業務單元。
可見,一個項目能夠由多個服務(容器)關聯而成,Compose 面向項目進行管理。
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 -d會在後臺啓動容器並使它們運行
–verbose
顯示更多輸出
–version
顯示版本號並退出
-f,–file FILE
指定一個可選的Compose yaml文件(默認:docker-compose.yml)
-p,–project-name NAME
指定可選的項目名稱(默認:當前目錄名稱)
docker-compose.yum命令說明
每個定義在docker-compose.yml中的服務必須明確指定一個p_w_picpath或者build選項(若是鏡像存在使用p_w_picpath, 若是驚喜不存在使用build後面跟Dockerfilede 路徑),這與docker run命令行中輸入的是對應相同的,對於docker run,在Dockerfile文件中指定的選項(好比CMD、EXPOSE、VOLUME、ENV)是默認的,所以沒必要在docker-compose.yml中再指定一次。
p_w_picpath (後面加鏡像名,或鏡像ID)
標明p_w_picpath的ID,這個p_w_picpath ID能夠是本地也能夠是遠程的,若是本地不存在,Compose會嘗試去pull下來
p_w_picpath: ubuntu
p_w_picpath: orchardup/postgresql
p_w_picpath: a4bc65fd
build
該參數指定Dockerfile文件的路徑,該目錄也是發送到守護進程的構建環境(這句有「.」),Compose將會以一個已存在的名稱進行構建並標記,並隨後使用這個p_w_picpath
build: /path/to/build/dir
command
重寫默認的命令,覆蓋容器啓動後默認執行的命令
command: 要執行的命令
links (關聯同一個項目中的容器使用links)
鏈接到其餘服務中的容器,能夠指定服務名稱和這個連接的別名,或者只指定服務名稱
links:
- db
-db:database
- redis
此時,在容器內部,會在/etc/hosts文件中用別名建立一個條目,就像這樣:
172.17.2.186 db
172.17.2.186 database
172.17.2.186 redis
環境變量也會被建立,關於環境變量的參數,會在後面講到
external_links (管理項目組以外的其餘容器使用external_links)
鏈接到在這個docker-compose.yml文件或者Compose外部啓動的容器,特別是對於提供共享和公共服務的容器。在指定容器名稱和別名時,external_links遵循着和links相同的語義用法
external_links:
- redis_1
-project_db_1:mysql
-project_db_1:postgresql
ports
暴露端口,指定二者的端口(主機:容器),或者只是容器的端口(主機會被隨機分配一個端口)
注:當以 主機:容器 的形式來映射端口時,若是使容器的端口小於60,那可能會出現錯誤,由於YAML會將xx:yy這樣格式的數據解析爲六十進制的數據,基於這個緣由,時刻記得要將端口映射明確指定爲字符串
ports:
-"3000"
-"8000:8000"
-"49100:22"
-"127.0.0.1:8001:8001"
expose
暴露端口而沒必要向主機發布它們,而只是會向連接的服務(linked service)提供,只有內部端口能夠被指定
expose:
-"3000"
-"8000"
volumes
掛載路徑最爲卷,能夠選擇性的指定一個主機上的路徑(主機:容器),或是一種可以使用的模式(主機:容器:ro)
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from:
從另外一個服務或容器掛載它的全部卷。
volumes_from:
- service_name
-container_name
environment
加入環境變量,可使用數組或者字典,只有一個key的環境變量能夠在運行Compose的機器上找到對應的值,這有助於加密的或者特殊主機的值
environment:
RACK_ENV:development
SESSION_SECRET:
environments:
-RACK_ENV=development
-SESSION_SECRET
env_file
從一個文件中加入環境變量
若是經過 docker-compose -f FILE 指定了模板文件,則 env_file 中路徑會基於模板文件路徑。若是有變量名稱與 environment 指令衝突,則之後者爲準。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
環境變量文件中每一行必須符合格式,支持 # 開頭的註釋行。
# common.env: Set Rails/Rack environment
RACK_ENV=development
net
網絡模式,能夠在docker客戶端的--net參數中指定這些值
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
dns
自定義DNS服務,能夠是一個單獨的值或者一張列表
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search
自定義DNS搜索範圍,能夠是單獨的值或者一張列表
dns_search: example.com
dns_search:
-dc1.example.com
-dc2.example.com
使用Compose只須要簡單的三個步驟:
首先,使用Dockerfile或docker commit來定義你的應用環境
第二步,用一個docker-compose.yml來定義你的應用,他們能夠在下個互相隔離的容器中組成你的應用。
第三步,執行docker-composeup -d來啓動你的應用,它會根據docker-compose.yml的設置來pull/run相關的容器。
測試案例
首先,咱們建立一個經典的web項目:一個haproxy,掛載三個web容器
1建立docker-haproxy目錄,做爲項目工做目錄,並在其中分別建立兩個子目錄: haproxy 和web。
在/root/docker-haproxy/目錄下建立docker-compose.yml文件
在/root/docker-haproxy/haproxy目錄下建立haproxy的主配置文件haproxy.cfg
在/root/docker-haproxy/web目錄下存放web站點網頁文件
Haproxy目錄,生成一個haproxy.cfg文件
編寫docker-compose.yml 文件,這個是 Compose 使用的主模板文件。內容十分簡單,指定 3 個 web 容器,以及 1 個 haproxy 容器。(70端口是查看haproxy的狀態信息)
web子目錄,生成index.html文件
2 運行compose項目
在docker-haproxy目錄下執行docker-compose up -d 來啓動你的應用
3 查看容器啓動狀況
或
4瀏覽器中訪問本機IP http://192.168.0.137