docker容器编排 (4)
容器编排
我们的项目可能会使用了多个容器,容器多了之后管理容器的工作就会变得麻烦。如果要对多个容器进行自动配置使得容器可以相互协作甚至实现复杂的调度,这就需要进行容器编排。Docker原生对容器编排的支持非常弱,但是可以通过社区提供的工具来实现容器编排。
Docker Compose
可以通过安装Docker Compose工具来实现基于YAML文件的容器编排,YAML文件会定义一系列的容器以及容器运行时的属性,Docker Compose会根据这些配置来管理容器。
安装Docker Compose。
curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose说明:如果没有curl工具,在CentOS下可以先通过包管理工具yum安装curl再执行上面的命令。
当然我们也可以使用Python的包管理工具pip来安装Docker Compose,命令如下所示。
pip3 install -U docker-compose
使用Docker Compose。
我们先创建一个名为
composeapp
的文件夹并在该文件夹下创建两个子文件夹product-service
和web-site
,如下所示。mkdir composeapp
cd composeapp
mkdir product-service
mkdir web-site我们先在
product-service
文件夹下编写提供数据的API接口程序。vim product-service/api.py
我们用Flask来实现一个非常简单的数据接口服务程序。
from pickle import dumps, loads from flask import Flask
from flask_restful import Resource, Api
from redis import Redis
from flask_cors import CORS app = Flask(__name__)
CORS(app, resources={r'/api/*': {'origins': '*'}})
api = Api(app)
redis = Redis(host='redis-master', port=6379) class Product(Resource): def get(self):
data = redis.get('products')
if not data:
products = ['Ice Cream', 'Chocolate', 'Coca Cola', 'Hamburger']
redis.set('products', dumps(products))
else:
products = loads(data)
return {'products': products} api.add_resource(Product, '/api/products') if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000, debug=True)由于上面的项目需要依赖
flask
、flask-restful
等三方库,所以我们再添加一个指明依赖库的文件并将其命名为requirements.txt
,其内容如下所示。vim product-service/requirements.txt
flask
flask-restful
flask-cors
redis稍后我们会将上面的接口服务放在一个容器中运行,为此我们先编写一个Dockerfile文件以便创建对应的镜像,其内容如下所示。
vim product-service/Dockerfile
FROM python:3
ADD . /root/product-service
WORKDIR /root/product-service
RUN pip install -r requirements.txt
CMD ["python", "api.py"]我们再去到
web-site
目录下创建一个页面,稍后我们会通一个容器来提供Nginx服务并运行该页面,而这个页面会访问我们刚才部署的数据接口服务获取数据并通过Vue.js将数据渲染到页面上。vim web-site/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>首页</title>
</head>
<body>
<div id="app">
<h2>产品列表</h2>
<ul>
<li v-for="product in products">{{ product }}</li>
</ul>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
products: []
},
created() {
fetch('http://1.2.3.4:8000/api/products')
.then(resp => resp.json())
.then(json => {this.products = json.products})
}
})
</script>
</body>
</html>接下来,我们要通过一个YAML文件来创建三个容器并指明容器之间的依赖关系。
vim docker-compose.yml
version: '3'
services: product-service:
build: ./product-service
ports:
- '8000:8000'
links:
- redis-master web-site:
image: nginx
ports:
- '80:80'
volumes:
- ./web-site:/usr/share/nginx/html redis-master:
image: redis
expose:
- '6379'有了这个YAML文件,我们就可以使用
docker-compose
命令来创建和管理这三个容器,其命令如下所示。docker-compose up
Creating network "composeapp_default" with the default driver
Building product-service
Step 1/5 : FROM python:3
---> e497dabd8450
Step 2/5 : ADD . /root/product-service
---> fbe62813d595
Removing intermediate container 6579e845565a
Step 3/5 : WORKDIR /root/product-service
---> 3a722675e3b1
Removing intermediate container 57fc490436ce
Step 4/5 : RUN pip install -r requirements.txt
---> Running in cadc2d0c1b9b
... ...
---> fc747fc11f4a
Removing intermediate container cadc2d0c1b9b
Step 5/5 : CMD python api.py
---> Running in ecbbd2a69906
---> 637e760f2e5b
Removing intermediate container ecbbd2a69906
Successfully built 637e760f2e5b
WARNING: Image for service product-service was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating composeapp_redis-master_1 ... done
Creating composeapp_web-site_1 ... done
Creating composeapp_product-service_1 ... done
Attaching to composeapp_redis-master_1, composeapp_web-site_1, composeapp_product-service_1
... ...
docker容器编排 (4)的更多相关文章
- Docker学习(十)Docker容器编排 Docker-compose
Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...
- Docker容器编排器概览
就像Apple推出iPhone让智能手机变成主流,Docker让容器变成了主流.自从项目发布以来,Docker着重于提升开发者的体验.基本理念是可以在整个行业中,在一个标准的框架上,构建.交付并且运行 ...
- .net core docker容器编排部署(linux)
环境准备 需要一个linux操作系统:我这里用的是ubuntu 18.04,安装步骤就不说了,网上很多教程,当然也可以私信我. 既然需要用到docker,那么就安装个docker,apt instal ...
- Docker 容器编排利器 Docker Compose
Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...
- docker容器编排原来这么丝滑~
前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker ...
- Docker容器编排工具——docker-compose
1.docker-compose介绍 2.使用的三个步骤 3.安装docker-compose yum install docker-compose 4.docker-compose.yml 文件 ( ...
- Docker - 容器编排工具 compose 之安装
准备 首先,在使用和安装 docker compose之前,我们应该确保我们已经安装了 docker engine. 安装 官网上面有好多种安装方式,由于我们现在是在使用Docker, 个人感觉应该以 ...
- 实战Docker容器调度
目录 一.前言 二.Docker Compose 2.1.简介 2.2.下载安装 2.3.小实验 2.4.小实验的细节 2.5.Compose file的编写规则 三.Docker Swarm 3.1 ...
- docker容器技术基础入门
目录 docker容器技术基础入门 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 docker ...
随机推荐
- 编写Java程序,通过接口摸拟麦当劳食物生产过程,接口设计
返回本章节 返回作业目录 需求说明: 通过接口摸拟麦当劳食物生产过程 实现思路: 通过接口摸拟麦当劳食物生产过程的实现思路: 创建接口食物(Food),该接口需要被所有的食物类所实现.在该接口中定义g ...
- 抛砖系列之-MySQL中的数据类型JSON
今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...
- Win10 开启 Hyper-V 及简单使用
简介 Windows 10 上内置了 Hyper-V.Hyper-V 提供硬件虚拟化,每个虚拟机都在虚拟硬件上运行. 系统要求 Windows 10 企业版.专业版或教育版.家庭版.移动版.移动企业版 ...
- Google面试评分卡
Google对工程面试之前,会让面试人员填一张评分卡,以加强面试官对你的理解,大致内容如下: 0 - 对于相关技术领域还不熟悉. 1 - 可以读懂这个领域的基础知识. 2 - 可以实现一些小的改动,清 ...
- [ flask ] 解耦models(解决models文件太臃肿的问题)
问题描述 用博客项目来描述,我们在models中定义了用户表(User).文章表(Post).通知表(Notification).等等.随着我们开发的深入,添加的功能越来越多,到后期models文件会 ...
- Go标准库之html/template
html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容.它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用html/templ ...
- Itellij Idea使用
图片如果损坏,点击链接查看 https://www.toutiao.com/i6491635946176381454/ 创建Maven项目 JDK环境 目前大多数IDE都没有集成JDK环境,IDEA也 ...
- Word2010制作饭店活动宣传单
原文链接: https://www.toutiao.com/i6492754127343321613/ 打开Word文档,选择"页面布局"选项卡."页面背景"功 ...
- iframe 去除边框 背景透明等设置 待修改
<iframe name="file_frame" src="UploadFile.jsp" frameborder=no border=0 marg ...
- vps上安装CobaltStrike服务端
今天我在我的vps上安装CobaltStrike服务端,真的是踩坑无数,所以写这篇博客记录一下,防止后人再踩坑 安装Oracle JDK8 官方不建议使用OpenJdk,建议使用Oracle JDK的 ...