您的位置:首页 > 运维架构 > Docker

docker学习05-docker三剑客之Compose

2019-02-14 10:51 543 查看

Dockerfile可以定义一个单独的应用容器,但是如果要定义多个容器时就要用到服务编排。服务编排有很多种技术方案,官方提供的是Compose
Dockerfile 可以让用户管理一个单独的应用容器,而Compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个web服务器再加上后端的数据库服务器等。

docker Compose介绍

Docker-Compose 是Docker的一种编排服务,是一个用于在Docker上定义并运行复杂应用的工具,可以让用户在集群中不熟分布式应用
通过Docker-Compose 用户可以很容易的用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有以来,完成构建。Docker-Compose解决了容器与容器之间如何编排的问题。

Docker Compose 工作原理


Compose中有两个重要的概念:

  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目(project) :由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

一个项目可以有多个服务(容器)关联而成,compose面向项目进行管理,通过子命令对项目中的一组容器进行便捷的生命周期管理。
Compose项目由python编写,实际上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持DockerAPI,就可以在其上利用Compose来进行编排管理。

Docker Compose安装

Docker Compose是Docker的独立产品,因此需要安装Docker之后单独安装Docker Compose

官方安装方法
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
官方实例 创建项目路径
mkdir composetest
cd composetest

在目录下创建app.py文件

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)

@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

在这个例子中,redis使用了容器内的网络默认端口是6379。这段Python程序的内容就是。启动后连接redis并且输出hello()方法,当每次访问的时候累计访问次数并且将结果放回到页面。
在同目录下闯将

requirements.txt
文件

cat requirements.txt
flask
redis
创建dockerfile

写一个dockerfile来定义Docker镜像,此镜像包含了Python的依赖包和Python环境。

cat Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
  • 使用基础镜像Python3.4
  • 将当前目录映射到镜像的/code目录下
  • 设置工作目录为/code
  • 安装Pyhton依赖包
  • 启动 app.py程序
创建docker-compose.yml文件
cat docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
启动

docker-compose up

启动成功后在浏览器访问:http://ip:5000 会返回
Hello World! I have been seen 1 times.
再次刷新,看变化

Docker Compose 常用命令

docker-compose up -d
在后台启动服务
docker-compose stop
停止服务
docker-compose -f
指定使用的compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d

#启动所有容器,-d 将会在后台启动并运行所有的容器

docker-compose up -d

#查看服务容器的输出

docker-compose logs

#列出项目中目前的所有容器

docker-compose ps

#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务

docker-compose build

#拉取服务依赖的镜像

docker-compose pull

#重启项目中的服务

docker-compose restart

#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

docker-compose rm

#在指定服务上执行一个命令。

docker-compose run ubuntu ping docker.com

#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量

docker-compose scale web=3 db=2

#启动已经存在的服务容器。

docker-compose start

#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

docker-compose stop

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: