docker compose (項目)

Docker Compose 項目

compose項目簡介

    compose項目來源於之前的Fig項目,使用python代碼編寫compose項目主要用於編排部署基於docker的應用。本身與docker/swarm配合度很高。

Docker Compose 是 Docker 編排服務的一部分,可以讓用戶在其他平臺快速安裝dockerSwarm 可以讓 Docker 容器在集羣中高效運轉,而 Compose 可以讓用戶在集羣中部署分佈式應用。簡單的說,docker compose 屬於一個”應用層”的服務,用戶可以定義那個容器組運行那個容器,它支持動態改變應用,並在需要時擴展。

     相對於kubernetes來說功能比較簡單,相當於kubernetes的一個子集。 

dockerfile可以讓用戶管理一個單獨的應用容器,而

Compose則允許用戶在一個模板(yaml格式)中定義一組相關聯的應用容器(稱爲project,即項目了,例如一個調度器,兩個web服務容器再加上後端的數據庫服務容器等。

wKiom1km5uPQVq6AAAFsbmXGrQs853.png

1安裝docker-compose(先安裝pip)

 pip類似RedHat裏面的yum.安裝Python包非常方便

wKioL1km5vahZqreAACkTY0Ms4A878.png 

 

wKioL1km5wTDC3Y6AADGhVEyQEM149.png 

 

2在安裝compose

 

wKioL1km5xOg2vx5AACUmSRQ29g962.png 

 

3安裝成功後,可以查看docker-compose的版本和命令的用法

 

wKiom1km5yLjs7pdAAA7wK-5_Xo325.png 

 

 

先介紹幾個術語。

服務(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中的服務必須明確指定一個image或者build選項如果鏡像存在使用image,  如果驚喜不存在使用build後面跟Dockerfilede 路徑,這與docker run命令行中輸入的是對應相同的,對於docker run,在Dockerfile文件中指定的選項(比如CMD、EXPOSE、VOLUME、ENV)是默認的,因此不必在docker-compose.yml中再指定一次。

image 後面加鏡像名,或鏡像ID 

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

image: ubuntu   

image: orchardup/postgresql   

image: a4bc65fd   

 

build  

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

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。

 

wKiom1km6Ufh0D5pAAA8Ue6YAZ4847.png 

/root/docker-haproxy/目錄下創建docker-compose.yml文件

/root/docker-haproxy/haproxy目錄下創建haproxy的主配置文件haproxy.cfg

/root/docker-haproxy/web目錄下存放web站點網頁文件

Haproxy目錄,生成一個haproxy.cfg文件


wKioL1km6XPRSMaQAAAavrXMkdQ964.png


 wKiom1km53DCm9T7AABdF0eshU4345.png

wKioL1km58-xp8h1AAAnzas0QCM719.png 

 

編寫docker-compose.yml 文件,這個是 Compose 使用的主模板文件。內容十分簡單,指定 3 個 web 容器,以及 1 個 haproxy 容器。(70端口是查看haproxy的狀態信息)

 

wKiom1km5-riVjv1AAAYVNWDUTs406.png 

 

wKioL1km6BnTC33uAAB2ooL-hEs088.png 

 

web子目錄,生成index.html文件

 

wKioL1km6LfzaErzAAAYdWv-Yo8406.png 

2 運行compose項目

docker-haproxy目錄下執行docker-compose up -d 來啓動你的應用

wKioL1km6KKxyQjTAABdhd10hRI330.png 

3 查看容器啓動情況

wKiom1km6JOR_ZrtAACd5yJQXDg196.png 

 

 

wKioL1km6IXQHhh-AAB3e6xXLMI766.png 

4瀏覽器中訪問本機IP http://192.168.0.137

 

wKiom1km6G_yELlFAAAPHf9EnVA303.png 

 

 wKioL1km6FqhuwMvAAD0tL3oPbA667.png

 


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