Docker三剑客之Compose-一

本文介绍了Docker的编排工具Compose,强调了其在多容器应用管理中的作用。通过三步(定义服务、创建镜像和运行应用)展示了如何使用Compose创建和管理服务。Compose特性包括环境隔离、数据卷保护和容器配置缓存,提供便捷的本地到云端的部署体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

title: Docker三剑客之Compose(一)——Compose简介及实例
date: 2015-12-04 11:31:55
tags: docker

categories: Docker 三剑客

随着开发者对Docker了解的深入,使用其进行分布式部署变得复杂。开发者需要在开发,测试以及生产环境中的可移植应用,这些应用需要在不同的平台提供商之间迁移,比如在不同的云平台或者私有数据中心部署,同时,应用应该是可组合的,一个应用可以分解为多个服务。 Docker公司在2014年12月发布了三款用于解决多容器分布式软件可移植部署的问题。

Docker Machine为本地,私有数据中心及公有云平台提供Docker引擎,实现从零到Docker的一键部署。

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。

Docker Swarm为Docker容器提供了原生的集群,它将多个Docker引擎的资源汇聚在一起,并提供Docker标准的API,使Docker可以轻松扩展到多台主机。


目录:
* Compose的特性
* 一个实际的例子

这篇文章介绍Docker三剑客的另一个工具:Docker Compose。Compose是用来编排和管理多容器应用的工具,使用它,你可以通过定义一个YAML文件来定义你的应用的所有服务,然后通过一条命令,你就可以创建并启动所有的服务。

使用Compose仅需要三步:
- 使用Dockerfile定义你的应用依赖的镜像;
- 使用docker-compose.yml定义你的应用(APP)具有的服务;
- 通过docker-compose up命令创建并运行应用;

以后,我们会使用一个例子来讲述上述过程。

在此之前,我们先来看一下Compose的特性:

Compose的特性

  1. 将单个主机隔离成多个环境;
    Compose使用项目名称(project name)将不同应用的环境隔离开,项目名称可以用来:
    • 在开发机上,将应用环境复制多份;
    • 防止使用了相同名称服务的应用之间互相干扰;

默认情况下,项目名称是项目文件夹根目录的名称,你可以使用-p标识或COMPOSE_PROJECT_NAME改变默认的名称。

  1. 保护卷中的数据;
    Compose保护服务使用的所有卷(vloumes),当运行docker-compose run命令时,如果Compose发现存在之前运行过的容器,它会把旧容器中的数据卷拷贝到新的容器中,这保证了你在卷中创建的任何数据都不丢失。

  2. 只重新创建改变过的容器;
    Compose会缓存用于创建容器的配置信息,当你重启服务时,如果服务没有被更改,Compose就会重用已经存在的容器,这无疑加快了修改应用的速度;

一个实际的例子

接下来通过一个实际的例子开一下Compose是如何工作的,并领略它的方面快捷;在这之前,请确保你安装了Docker和Compose。

  • 第一步,创建所需的材料:

    1. 创建项目的根目录:

      $ mkdir composeset
      $ cd composeset
    2. 在根目录下新建一个app.py文件并写入以下内容:

    from flask import Flask
    from redis import Redis
    
    app = Flask(__name__)
    redis = Redis(host='redis', port=6379)
    
    
    @app.route('/')
    def hello():
        redis.incr('hits')
        return 'Hello World! I have been seen %s times.' % redis.get('hits')
    
    
    if __name__ == "__main__":
        app.run(host="0.0.0.0", debug=True)
    1. 在根目录下新建一个名为requirements.txt的文件,写入下面的内容:
      flask
      redis
  • 第二步,创建镜像:
    在根目录下创建Dockerfile文件,内容如下:

FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py
  • 第三步,定义服务:
    在项目根目录下创建docker-compose.yml文件并写入以下内容:
web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

使用上面的文件,我们定义了两个服务,webredis,其中web服务使用项目根目录下的Dockerfile文件创建了镜像,将项目根目录映射到容器的/code文件夹下,并对外开放了5000端口。redis服务使用redis镜像创建了一个数据库服务。

  • 第四步,创建并运行应用:
    在项目根目录下运行docker-compose up命令,创建并启动服务。
$ docker-compose up
Pulling image redis...
Building web...
Starting composetest_redis_1...
Starting composetest_web_1...
redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3
web_1   |  * Running on http://0.0.0.0:5000/
web_1   |  * Restarting with stat

在浏览器中访问0.0.0.0:5000localhost:5000就可以看到创建的web服务。

如果想在后天运行应用,在docker-compose up时加上-d标识,即docker-compose up -d

docker-compose ps可以查看当前存在的服务;

docker-compose run命令可以在一个服务中运行额外的命令,例如查看web服务中的环境变量,可以docker-compose run web env

更多命令可以使用docker-compose --help查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值