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

 更新时间:2018年06月08日 10:19:24   作者:一书生VOID的博客  
这篇文章主要介绍了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在一起。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决docker磁盘空间不足问题

    解决docker磁盘空间不足问题

    这篇文章主要介绍了解决docker磁盘空间不足问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker容器服务编排利器详解

    Docker容器服务编排利器详解

    这篇文章主要介绍了Docker容器服务编排利器,主要包括使用使用Docker Compose必要性及定义及一些Docker Compose应用参考资料,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • linux上安装Docker(非常简单的安装方法)

    linux上安装Docker(非常简单的安装方法)

    今天小编就为大家分享一篇关于linux上安装Docker(非常简单的安装方法),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Docker使用java项目工程的部署

    Docker使用java项目工程的部署

    随着容器化技术的广泛应用,Docker成为了一种非常流行的容器化解决方案,本文主要介绍了Docker使用java项目工程的部署,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 六种Docker目录挂载类型及注意事项总结

    六种Docker目录挂载类型及注意事项总结

    这篇文章主要介绍了六种Docker目录挂载方式,包括数据卷挂载、绑定挂载、临时文件系统挂载、命名卷挂载、匿名卷挂载和卷驱动挂载,并详细说明了每种挂载方式的定义、举例和注意事项,需要的朋友可以参考下
    2025-03-03
  • 云原生Docker容器自定义DNS解析

    云原生Docker容器自定义DNS解析

    Docker没有为每个容器专门定制镜像,那么怎么自定义配置容器的DNS配置呢?这篇文章主要给大家介绍了关于云原生Docker容器自定义DNS的相关资料,需要的朋友可以参考下
    2023-02-02
  • Docker中Compose与Kubernetes的区别详解

    Docker中Compose与Kubernetes的区别详解

    这篇文章主要给大家介绍了关于Docker中Compose与Kubernetes区别的相关资料,Docker Compose和Kubernetes(简称k8s)都是容器编排工具,需要的朋友可以参考下
    2023-08-08
  • Docker容器开jupyter不能访问到的解决方法

    Docker容器开jupyter不能访问到的解决方法

    这篇文章主要介绍了Docker容器开jupyter不能访问到的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • docker部署vue项目的实现步骤

    docker部署vue项目的实现步骤

    当我们在本地开发了一个vue项目之后,肯定是想部署到服务器上供其他人访问,本文主要介绍了docker部署vue项目的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 谈谈我对docker的理解

    谈谈我对docker的理解

    作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。这篇文章给大家介绍了docker的优势及docker的三个基本概念,感兴趣的朋友一起看看吧
    2016-10-10

最新评论