博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker Compose 简介
阅读量:6114 次
发布时间:2019-06-21

本文共 3318 字,大约阅读时间需要 11 分钟。

hot3.png

Compose 的使用方式非常简单,基本上就是下面的三板斧:

  • 定义 Dockerfile
  • 定义 docker-compose.yml
  • 运行 docker-compose up

其实 compose 提供的命令可以管理应用的整个生命周期:

  • Start, stop, rebuild services
  • 查看运行中 service 的状态
  • 输出运行中 service 的日志
  • 在 service 中执行一次性的命令

本文我们通过一个简单的 demo 来介绍 Docker Compose 的基本用法。说明:本文的演示环境为 ubuntu 16.04。本文的演示代码可以从  上下载。

安装 Docker Compose

安装 Docker Compose 前请先在本地。

Docker Compose 的安装十分简单,在 ubuntu 中直接把可执行文件下载到本地就可以了。

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

其中 1.22.0 是最新的版本。当然 Docker Compose 是个开源项目,你可以选择安装不同的版本,或者是自行编译。下图为笔者安装之后显示的版本信息:

注意,默认的安装并不包括命令补全功能,也就是说像 docker-compose restart 这样的命令,你输入 docker-compose re 后按 tab 键是无法自动补全的。想要这个功能还需要额外的安装,以 Bash 为例,执行下面的命令:

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.22.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

然后重新登录 Bash,就可以通过 tab 键自动补全命令了!

创建演示 demo

下面的示例来自 docker 官网,就是一个简单的 Flask 网页应用,后端使用 redis 存储数据,其 web server 的代码如下():

复制代码

import timeimport redisfrom flask import Flaskapp = 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 时做了一点处理:尝试访问 5 次再报错。把上面的代码保存到文件 app.py 中。

要运行上面的代码,需要在环境中安装 flask 和 redis 包。创建 requirements.txt 文件,编辑其内容为:

flaskredis

创建一个保存项目文件的目录,比如 composecounter,把 app.py 和 requirements.txt 文件都放进去。

创建 Dockerfile 文件

接下来我们需要把上面的应用打包到容器镜像中。在 composecounter 目录下创建 Dockerfile 文件:

FROM python:3.4-alpineADD . /codeWORKDIR /codeRUN pip install -r requirements.txtCMD ["python", "app.py"]

上面代码的含义为:

  • 使用 python:3.4-alpine 作为基础镜像
  • 把当前目录添加到镜像中的 /code 目录
  • 设置容器中的工作目录为 /code
  • 安装 requirements.txt 文件中指定的依赖包
  • 把容器启动时的默认命令设置为 python app.py
  • 给大家推荐一个架构群:698581634 进群即可免费获取资料。

创建 compose 配置文件

终于来到本文的重点了!我们需要创建 Docker Compose 的配置文件来定义我们的应用。

YAML 是一个可读性高,用来表达数据序列的格式。Docker Compose 使用 YAML 格式的文件作为配置文件。
在 composecounter 目录中创建 docker-compose.yml 文件,其内容如下:

复制代码

version: '3'services:  web:    build: .    ports:     - "5000:5000"  redis:    image: "redis:alpine"

复制代码

第一行的 version: '3' 表示当前的配置文件使用的语法版本。

services 中的内容指明该应用一共定义了多少个服务(容器镜像)。在运行时,一个服务是指从该镜像启动的一个或多个容器。
在我们的示例中一共需要两个容器镜像。web 服务由我们自己通过 build . 命令构建,映射的端口是 flask web server 默认的 5000 端口。
redis 服务则直接使用官方的镜像。

构建并运行示例程序

在 composecounter 目录下执行命令:

$ docker-compose up

跳过那些繁琐的输出,我们直接访问本机的 5000 端口:

一个 web 应用程序运行起来了,并且输出了我们访问服务器端的次数,看起来还不错!

如果要让容器安静的运行在后台,加上 -d 选项就可以了:

$ docker-compose up -d

背后的事情

分析 docker-compose up 命令的输出可以看清事情的真相,但是日志过于繁琐,我们只说重点:

  1. 创建名称为 composecounter_default 的网络
  2. 使用 Dockerfile 构建 composecounter_web 镜像
  3. 创建容器 composecounter_redis_1 和 composecounter_web_1 并加入相同的网络

如果你手动去执行这些操作还是挺很繁琐的,现在一个命令就搞定了,还可以把相关的代码和配置统统的用版本管理工具管理起来。

总结

虽然示例程序能够运行起来了,但我们只是来到了一个新的起点。Docker Compose 被设计来管理应用的整个生命周期,我们也可以用它来极大的提高工作效率。笔者将在接下来的文章中介绍更多 Docker Compose 相关的内容。

原文链接:https://www.cnblogs.com/sparkdev/p/9753793.html

参考:

转载于:https://my.oschina.net/u/3967312/blog/2250256

你可能感兴趣的文章
《CMOS集成电路后端设计与实战》——1.2 国内集成电路发展现状
查看>>
《拥抱机器人时代——Servo杂志中文精华合集》——第3章 智能连接:欢迎来到物联网的世界...
查看>>
微软 IIS 服务器的市场占有率接近 Apache
查看>>
mongodb授权登录,经过自己修改后的授权登录方式
查看>>
Windows 原生运行 Linux 的技术细节
查看>>
《Abaqus GUI程序开发指南(Python语言)》——2.12 文件的操作
查看>>
Yocto Project 1.4 "Dylan" 发布
查看>>
《游戏视频主播手册》——1.5 游戏视频直播的发展趋势
查看>>
《Adobe Premiere Pro CC经典教程》——第14 课 颜色校正和分级 14.1 开始
查看>>
《从Excel到R 数据分析进阶指南》一2.4 查看空值
查看>>
命令行星期二——第七部分
查看>>
《正则表达式经典实例(第2版)》——2.16 测试一个匹配,但不添加到整体匹配中...
查看>>
《移动App测试的22条军规》——第5章,第5.1节横竖屏幕测试
查看>>
《Servlet、JSP和Spring MVC初学指南》——1.8 GenericServlet
查看>>
《libGDX移动游戏开发从入门到精通》一1.3 开始第一个libGDX游戏
查看>>
《Python数据分析》一1.4 NumPy数组
查看>>
深入实践Spring Boot2.3.1 MongoDB依赖配置
查看>>
海量存储系列之三
查看>>
《网站设计 开发 维护 推广 从入门到精通》——2.5 经典习题与解答
查看>>
Samba 系列(二):在 Linux 命令行下管理 Samba4 AD 架构
查看>>