Docker 容器编排利器Compose(起步篇)

一个大型的Docker组成的微服务应用中,容器的数量是非常庞大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦。Compose的出现正是为了解决这个问题。

Compose简介

Compose的前身是Fig,Fig被Docker收购之后正式更名为Compose,Compose向下兼容Fig。Compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器。在配置文件中,所有容器通过services来定义,并使用docker-compose命令启动或停止容器以及所有依赖容器。

安装Compose

Compose的安装方式有多种,这里推荐使用curl命令安装,在安装之前,要确保你的机器上已经安装了Docker,可以运行sudo docker version命令来确认是否已安装了Docker。截至目前,Compose的最新发布版为1.11.2,下面演示在一台已经安装好Docker的Linux主机上安装Compose。

安装很简单,只需要执行下面的命令即可:

代码如下:

sudo curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

等待安装完毕后,执行下面的命令,为docker-compose添加可执行权限:

chmod +x /usr/local/bin/docker-compose

输入docker-compose --version命令可以查看安装结果。

除了这种安装方式之外,还可以通过Python的pip命令安装或将Compose安装成Docker容器,详情请参见https://docs.docker.com/compose/install/#install-as-a-container

如果要卸载Compose,可以执行sudo rm /usr/local/bin/docker-compose命令。

Compose入门

下面我们通过一个简单的例子演示Compose的使用步骤,使用Python构建一个Web应用,该应用使用Flask框架,并在Redis中维护一个命中计数(即使你不熟悉Python也没有关系,你甚至不需要安装Python和Redis,我们会从容器中获取这些依赖环境)。

创建工程

首先需要一个文件夹作为项目文件夹:

mkdir composetest
cd composetest

在项目文件夹下创建一个app.py的文件,并将下面的代码拷贝并粘贴到该文件中:

from flask import Flask
from redis import Redis

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

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

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

在项目文件夹下创建一个requirements.txt的文件,并将下面的代码拷贝并粘贴到该文件中:

flask
redis

到此,我们已经完成了新建项目,编码,添加依赖等工作。

创建Dockerfile

下面我们创建一个Dockerfile文件用于构建Docker镜像,该镜像包含了运行该Web应用的所有依赖,包括Python运行环境。

在项目文件夹下创建一个Dockerfile文件,并将下面的内容拷贝并粘贴到该文件中:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

大概解释一下这个配置文件:

  1. 使用python-3.4-alpine作为基础镜像
  2. 将当前目录添加到镜像中/code目录下
  3. 将/code设置为工作目录
  4. 安装Python依赖
  5. 设置默认执行命令

在Compose文件中定义services

在项目文件夹下创建一个docker-compose.yml文件,并将下面的内容拷贝并粘贴到该文件中:

version: '2'
services:
 web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
 redis:
  image: "redis:alpine"

该配置文件中包含两个services,即web和redis。web会使用当前目录中的Dockerfile文件构建镜像,并将容器的5000端口暴露给主机,然后将项目文件夹挂载到容器中的/code目录下;redis使用官方发布的镜像构建。

构建并运行

执行下面的命令构建并运行容器:

sudo docker-compose up

容器构建完成并启动后,可以在浏览器中输入http://localhost:5000查看结果。页面会打印“Hello World! I have been seen 1 times.”,刷新页面后,计数会累加变成2。

更新应用

由于项目文件夹挂载到了容器中,所以我们可以直接修改项目文件夹的应用,修改的结果立即反应到容器中,而不用重新启动容器。将app.py文件中的hello方法中的返回值修改成如下:

return 'Hello from Docker! I have been seen {} times.\n'.format(count)

保存后刷新浏览器,发现打印结果已经更新。

Compose的其他命令

上面提到的Componse使用命令构建并启动容器,是以前台的方式启动的,如果希望以后台启动,可以添加参数-d,比如下面这样:

sudo docker-compose up -d

docker-compose ps命令可以查看正在运行的容器:

liuwei@liuwei-Ubuntu:~$ sudo docker-compose ps
Name           Command        State      Ports
-------------------------------------------------------------------------------------
composetest_redis_1  docker-entrypoint.sh redis ...  Up   6379/tcp
composetest_web_1   python app.py          Up   0.0.0.0:5000->5000/tcp

如果使用sudo docker-compose up -d命令以后台方式启动,可以用docker-compose stop命令停止。docker-compose down --volumes命令可以停止容器并将其删除, --volumns表示同时删除redis数据文件目录。

有关Compose的更多命令,可以通过sudo docker-compose --help查看。

以上就是Compose的一个基本使用过程,可以发现,Compose将docker run命令整合到了一个docker-compose.yml配置文件中,对于大型Docker集群的管理是很方便的,例可以将多个service组合成更复杂的service组,为每个service指定不同的Dockerfile,然后把它们link在一起。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker系列之使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: 1.Dockerfile 定义应用的运行环境 2.docker-compose.yml 定义组成应用的各服务 3.docker-compose up 启动整个应用 2. 安装Compose 直接从github下载即可,前提要先安装Docker,版本要1.9.1以上 Note that Compose 1.8.0 requires

  • Docker 容器编排利器Compose(起步篇)

    一个大型的Docker组成的微服务应用中,容器的数量是非常庞大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦.Compose的出现正是为了解决这个问题. Compose简介 Compose的前身是Fig,Fig被Docker收购之后正式更名为Compose,Compose向下兼容Fig.Compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器.在配置文件中,所有容器通过servic

  • Docker容器编排实现过程解析

    在实际的开发环境或者生产环境,容器往往都不是独立运行的,经常需要多个容器一起运行,此时,如果继续使用run命令启动容器,就会非常不便,在这种情况下,docker-compose是一个不错的选择,使用dockercompose可以实现容器编排,本文就来看看docker-compose的使用.本文以jpress这样一个开源网站的部署为例,向读者介绍docker-compose的使用.jpress是Java版的wordPress,不过我们不必关注jpress的实现,在这里我们只需要将之当作一个普通的应

  • Docker容器服务编排利器详解

    目录 一.使用Docker Compose必要性及定义 二.Docker Compose应用参考资料 三.Docker Compose应用最佳实践步骤 3.1 概念 3.2 步骤 四.Docker Compose安装 五.Docker Compose应用案例 5.1 网站文件准备 5.2 Dockerfile文件准备 5.3 Compose文件准备 5.4 使用docker-compose up启动容器 5.5 访问 一.使用Docker Compose必要性及定义 用容器运行一个服务,需要使用

  • Docker数据卷和容器编排的使用

    前言 Docker 数据卷和容器编排,记录下来! 数据卷 数据卷可以绕过拷贝系统,在多个容器之间.容器和宿主机之间共享目录或文件,数据卷绕过了拷贝系统,可以达到本地磁盘I/O性能. 运行容器时,指定一个数据卷 $ docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 e445ab08b2be 此时,我们创建了一个数据卷并且挂载到容器的/usr/share/nginx/html/目录下. 使用 docker inspect

  • IDEA中使用Docker Compose容器编排的实现

    (一)确保idea 中连接到docker (二)打包镜像 我这里测试的是前后分离项目 如果是微服务中呢,由于前文中在pom.xml 中绑定了idea docker 打包插件 在其 父工程中使用 打包命令 即可将其子模块 打成一个个镜像 (三)Compos编排文件编写 docker compose 使用镜像编排 version: '3' #compose 文件版本(1.2.x+ 用3即可) services: #指定服务名 建议还是与项目名一致 虽然其并没有什么实际性联系 lei-server:

  • Docker批量容器编排的实现

    简介 Dockerfile build run 是手动操作单个容器,假如使用微服务架构,需要启动 100 + 个容器,他们之间的依赖关系如何维护? Docker Compose 用来轻松高效地管理容器,定义运行多个容器. 三个步骤: Dockerfile Services & docker-compose.yml docker-compose up 初体验 1.Dockerfile FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py

  • docker资源限制和compose部署详解

    目录 一.私有仓库建立 二.Cgroup 资源配置方法 三.CPU使用率控制 使用 stress 工具测试 CPU 和内存 四. CPU 周期限制 五. CPU Core 控制 六. CPU 配额控制参数的混合使用 七. 内存限额 八.Block IO 的限制 九. bps 和 iops 的限制 十. 构建镜像(docker build)时指定资源限制 十一. compose部署 十二. consul部署 总结 一.私有仓库建立 docker pull registry 在docker 引擎终端

  • 详解Docker 容器互联方法

    Docker容器都是独立的,互相隔离的环境.然而,它们通常只有互相通信时才能发挥作用. 虽然有许多方法可以连接容器们,可是我将并不会试着去将其全部讨论在内.但是在这一系列的方法中,我们将看看那些常用的做法. 虽然看起来是很浅显,但是这对于与Docker成天打交道的朋友来说,理解这些技术及底层的设计理念就显得非常地重要了. 理解这些主题将会: 帮助开发和运维人员探索广泛的容器部署的选择. 让开发和运维人员更自信的着手于微服务microservice架构设计. 让开发和运维人员可以较好的编排更复杂的

  • Docker容器磁盘占满的一些情况汇总

    前言 本文是我自己最近遇到的两种情况,后续有新发现再补充. 参考文档:https://docs.docker.com/engine/reference/commandline/dockerd/ 应用日志过多 默认情况下,每个 Docker 容器都有 10G 的存储空间,当超出该大小时,容器就会出现问题. 可以参考官方文档 dm.basesize 参数的说明来修改默认的容器大小: 指定创建基本设备时要使用的大小,这会限制图像和容器的大小.默认值为10G.请注意,精简设备本质上是"稀疏的"

  • Docker容器无法被stop or kill问题的解决方法

    Docker version 1.13.1 问题过程 某环境一个mysql容器无法被stop or kill or rm sudo docker ps | grep mysql 查看该容器 7844250860f8 mysql:5.7.22 "/.r/r docker-entr..." 41 minutes ago Up 8 minutes r-dlrel-mysql-1-66df8f33 使用docker stop / docker kill / docker rm -f 等命令处理

随机推荐