Docker 編排工具Compose

Compose是Docker的服務編排工具,主要用來構建基于Docker的復雜應用,Compose 通過一個配置文件來管理多個Docker容器,非常適合組合使用多個容器進行開發(fā)的場景。

1.安裝Compose:

這里簡單介紹下兩種安裝docker-compose的方式

方法一:
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose 
chmod +x/usr/bin/docker-compose
#查看版本信息
docker-compose --version

方法二:

#安裝python-pip
yum -y install epel-release
yum -y install python-pip

#安裝docker-compose
pip install docker-compose

#執(zhí)行查詢版本的命令
docker-compose version

2.創(chuàng)建配置文件

  • 創(chuàng)建目錄
#創(chuàng)建測試目錄
mkdir composetest
cd composetest
  • 創(chuàng)建app.py 文件
#app.py

from flask import Flask
from redis import Redis
import os
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
    redis.incr('test')
    return 'Hello World! I have been seen %s times.' % redis.get('test')

if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True)
  • 創(chuàng)建requirements.txt文件
flask
redis
  • 創(chuàng)建Dockerfile文件
#Dockerfile
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
  • 創(chuàng)建docker-compose.yml文件
web:
    build: .
    command: python app.py
    ports:
        - "5000:5000"
    volumes:
        - .:/code
    links:
        - redis
redis:
    image: redis
文件樹

3.編排部署

docker-compose up
終端顯示截圖
瀏覽器顯示截圖

踩坑排雷

#遇到app.py文件無法訪問
python: can't open file 'app.py': [Errno 13] Permission denied

#解決方案:臨時關閉selinux
setenforce 0

擴展知識

  • Yaml文件參考

在上面的yaml文件中,我們可以看到compose文件的基本結構。首先是定義一個服務名,下面是yaml服務中的一些選項條目:

image :鏡像的ID

build :直接從pwd的Dockerfile來build,而非通過image選項來pull

links :連接到那些容器。每個占一行,格式為SERVICE[:ALIAS],例如 – db[:database]

external_links :連接到該compose.yaml文件之外的容器中,比如是提供共享或者通用服務的容器服務。格式同links

command :替換默認的command命令

ports : 導出端口。格式可以是:

ports:-"3000"-"8000:8000"-"127.0.0.1:8001:8001"
expose :導出端口,但不映射到宿主機的端口上。它僅對links的容器開放。格式直接指定端口號即可。

volumes :加載路徑作為卷,可以指定只讀模式:

volumes:-/var/lib/mysql
 - cache/:/tmp/cache
 -~/configs:/etc/configs/:ro
volumes_from :加載其他容器或者服務的所有卷

environment:- RACK_ENV=development
  - SESSION_SECRET
env_file :從一個文件中導入環(huán)境變量,文件的格式為RACK_ENV=development

extends :擴展另一個服務,可以覆蓋其中的一些選項。一個sample如下:

common.yml
webapp:
  build:./webapp
  environment:- DEBUG=false- SEND_EMAILS=false
development.yml
web:extends:
    file: common.yml
    service: webapp
  ports:-"8000:8000"
  links:- db
  environment:- DEBUG=true
db:
  image: postgres
net :容器的網(wǎng)絡模式,可以為”bridge”, “none”, “container:[name or id]”, “host”中的一個。

dns :可以設置一個或多個自定義的DNS地址。

dns_search :可以設置一個或多個DNS的掃描域。

其他的 working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares ,和 docker run 命令是一樣的,這些命令都是單行的命令。例如:

cpu_shares:73
working_dir:/code
entrypoint: /code/entrypoint.sh
user: postgresql
hostname: foo
domainname: foo.com
mem_limit:1000000000
privileged:true
restart: always
stdin_open:true
tty:true
  • docker-compose常用命令
在第二節(jié)中的 docker-compose up ,這兩個容器都是在前臺運行的。我們可以指定-d命令以daemon的方式啟動容器。除此之外,docker-compose還支持下面參數(shù):

--verbose :輸出詳細信息

-f 制定一個非docker-compose.yml命名的yaml文件

-p 設置一個項目名稱(默認是directory名)

docker-compose的動作包括:

build :構建服務

kill -s SIGINT :給服務發(fā)送特定的信號。

logs :輸出日志

port :輸出綁定的端口

ps :輸出運行的容器

pull :pull服務的image

rm :刪除停止的容器

run : 運行某個服務,例如docker-compose run web python manage.py shell

start :運行某個服務中存在的容器。

stop :停止某個服務中存在的容器。

up :create + run + attach容器到服務。

scale :設置服務運行的容器數(shù)量。例如:docker-compose scale web=2 worker=3
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容