流逝的是岁月,不变的是情怀.
坚持学习,是为了成就更好的自己.
公众号[中关村程序员]

# Docker Compose 学习

# 编排技术

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用

把全部东西堆到一个容器里面是典型的虚拟机的使用方式,不是 Docker 的正确打开方式

正确的做法是让一个容器做一件事: 数据库、Nginx、Python 应用、缓存等等都是独立的容器,分别启动它们,这些容器组成了一个集群,需要某种方法把它们关联起来。

这个关联有一个非常专用、形象的称呼「编排」,我最早了解这个词是通过「Ansbile Playbooks」,而 Docker Compose 大家可以猜到就是负责实现对 Docker 容器集群编排的。

# Compose 介绍

Dockerfile 可以让用户管理一个单独的应用容器,而 Compose 则允许用户在一个模板 (YAML 格式) 中定义一组相关联的应用容器

Compose 非常适合构建开发和测试环境,但如果你想在生产中使用你的容器,应该选择 Kubernetes 来编排容器

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。 因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

# Compose安装

curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m`-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# Compose使用

Compose 中有两个重要的概念:

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

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

1.这里使用flask 框架来搭建一个简单的web应用

demo/app.py:

from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='localhost', port=6379)
@app.route('/')
def hello():
	count = redis.incr('hits')
	return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
if __name__ == "__main__":
	app.run(host="0.0.0.0", debug=True)

2.编写dockerfile文件

在app.py 外面一层

FROM python:3.6-alpine
ADD  demo/ /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

3.编写docker-compose.yml 文件

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

4.运行下面命令开启服务

docker-compose up

up 命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。链接的服务都将会被自动启动,除非已经处于运行状态。

可以说,大部分时候都可以直接通过该命令来启动一个项目。

默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

当通过 Ctrl-C 停止命令时,所有容器将会停止。

如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

5.此时访问本地 5000 端口,每次刷新页面,计数就会加 1。

上次更新: 7/20/2020, 2:09:44 AM