构建Docker Compose服务堆栈
1.安装了docker-compose,现在我们要使用docker-compose来运行容器栈。这个地方会有两个容器,一个容器中使用Flask搭建的简单应用,另一个容器是Redis,Flash会向redis写入数据。因此设计到容器之间的通信。之前我们讲到了,容器之间通信可以使用--link,也可以使用docker networking的方式,那这节课,我们讲解使用docker-compose来更加方便的管理多容器栈。
2.创建composeapp目录
$ cd /home/xm6f/dev/
$ mkdir composeapp
$ cd composeapp
$ touch Dockerfile
Dockerfile中保存用于构建Docker镜像的指令;还要创建app.py文件,这个文件中编写Flask代码。
app.py文件内容:
#!/usr/bin/env python2
# -*- coding: utf- -*-
# 导入 Flask 和 Redis 模块
from flask import Flask
from redis import Redis
import os
# 创建 Flask app
app = Flask(__name__)
# 通过 host 连接到 Redis
redis = Redis(host="redis",port=)
# 指定访问路径
@app.route('/')
def hi():
redis.incr("ping")
return 'hi , you have ping {0} times'.format(redis.get('ping'))
if __name__ == '__main__':
app.run(host="0.0.0.0",debug=True)
创建requirements.txt文件,里面放置程序依赖名称:
flask
redis
创建Dockerfile文件,用于构建镜像:
# 指定基镜像为 python2.
FROM python
MAINTAINER ruthless @qq.com
ADD . /composeapp
WORKDIR /composeapp
RUN pip install -r requirements.txt
$ ls
app.py Dockerfile requirements.txt
使用docker build -t composeapp . 指令创建composeapp镜像。
$ docker build -t composeapp .
$ docker images
redis镜像我们就不自己制作了,直接使用Docker Hub上面默认的redis即可,获取redis镜像如下:
$ docker search redis
$ docker pull redis
3.编写docker-compose.yml文件
应用镜像都构建好了之后,就可以配置compose来创建服务了,compose通过一个约定格式的配置文件配置要启动的服务,每个服务可以选择配置适当的属性,这些属性和docker run命令需要的参数类似。所有的服务和属性都定义在YAML(一种标记语言)文件中,定义好了之后执行docker-compose up命令,compose服务将会根据docker-compose.yml文件启动服务。
创建docker-compose.yml文件
$ touch docker-compose.yml
docker-compose.yml文件中包括一个或者多个要运行的docker容器指令。
web: ##启动容器的名字
image: composeapp ##从哪个镜像启动
command: python app.py ##启动运行之后,执行哪些命令
ports:
- "5000:5000"
volumes:
- .:/composeapp ##当前目录挂载到composeapp目录
links:
- redis redis:
image: redis
在docker-compose.yml文件中,
image其实也可以指定为Dockerfile文件的路径,
通过command指定服务启动时要执行的命令,类似于Dockerfile中的CMD指令,
使用ports指定端口映射,
使用volumes指定卷,
使用links指定要连接到哪些服务。
这个地方是将redis和web服务进行性连接,类似于docker run命令里面的--link选项。
编辑好docker-compose.yml文件之后,使用docker-compose up命令在docker-compose.yml所在目录执行。compose即上传并开始解析定义在docker-compose.yml文件中的指令。
从运行打印的日志可以看到,compose创建了composeapp_redis_1、composeapp_web_1两个服务,这两个服务的名字是docker-compose.yml所在目录的名字加上docker-compose.yml文件中指定的名字再加上一个数字组成,其目的是保证服务的唯一性。
4.可以使用-d选项,以守护方式运行compose
$ docker-compose up -d
5.查看日志信息
$ docker-compose ps
$ docker-compose logs web
$ docker-compose logs redis
6.使用docker-compose port web 5000 查看web服务5000端口映射情况
$ docker-compose port web 5000
0.0.0.0:5000
注意:操作docker-compose命令要跟docker-compose.yml在同一目录,否则无法操作。
7.网页访问web计数器
刷新浏览器,times会依次递增
构建Docker Compose服务堆栈的更多相关文章
- Docker | 第七章:Docker Compose服务编排介绍及使用
前言 前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件.大多都是一个镜像启动.当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止的话,那估计实施人员也 ...
- docker compose 服务启动顺序控制
概要 docker-compose 可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序. docker-comp ...
- docker和docker compose安装使用、入门进阶案例
一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...
- Docker 0x13: Docker 构建集群/服务/Compose/分布式服务栈
目录 Docker 构建集群/服务/Compose/分布式服务栈 集群 初始化集群服务 安装docker-machine 管理节点和工作节点 docker集群构建完成 集群中部署应用 集群服务访问特性 ...
- Docker之Compose服务编排
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...
- (转)Docker之Compose服务编排
转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过 ...
- [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境
快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...
- docker从零开始(三)服务初体验docker compose
决条件 安装Docker 1.13或更高版本. 获取Docker Compose.在适用于Mac的Docker和适用于Windows的Docker上,它已预先安装,因此您可以随意使用.在Linux系统 ...
- 使用Docker Compose编排微服务
一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...
随机推荐
- Centos7下安装Docker[z]
[z]https://www.cnblogs.com/qgc1995/p/9553572.html https://yq.aliyun.com/articles/691610?spm=a2c4e.11 ...
- eclipse中集成python开发环境
转载:https://www.cnblogs.com/mywood/p/7272487.html Eclipse简介 Eclipse是java开发最常用的IDE,功能强大,可以在MAC和Windos上 ...
- c#关于Mysql MySqlBulkLoader 批量上传
有个list表有几万数据 用insert插入,速度跟蜗牛爬行, 几十个表,传起来可就需要时间了. 搜搜,发现有 MySqlBulkLoader 这个人家mysql 的dll 里边已经提供了这个方法 ...
- Aria2+WebUI,迅雷倒下之后的代替品
Aria2+WebUI,迅雷倒下之后的代替品 (2017-07-24 12:56:28) 转载▼ 分类: 软件 最近迅雷越来越作死了,砍第三方远程下载,强推迅雷9喂用户的屎,下载资源能砍就砍,以前 ...
- ORM常用字段介绍
Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ...
- 图片利用 new Image()预加载原理 和懒加载的实现原理
二:预加载和懒加载的区别 预加载与懒加载,我们经常经常用到,这些技术不仅仅限于图片加载,我们今天讨论的是图片加载: 图片预加载:顾名思义,图片预加载就是在网页全部加载之前,提前加载图片.当用户需要查看 ...
- mybatis电子商务平台b2b2c
技术解决方案 开发语言: java.j2ee 数据库:mysql JDK支持版本: JDK1.6.JDK1.7.JDK1.8版本 核心技术:分布式.云服务.微服务.服务编排等. 核心架构: 使用Spr ...
- 【APP测试(Android)】--升级更新
- 常用screen参数
摘自:https://www.cnblogs.com/webnote/p/5749675.html screen -S yourname -> 新建一个叫yourname的sessionscre ...
- 阅读笔记4 我是一只IT小小鸟
经过一周连续三四天八小时以上坐在电脑前敲代码的“折磨”,去看看其他经受这些折磨的人的感受.这次读书笔记变成了逗比风,因为前几周认认真真记下书里写的重点内容,然后把学习的内容认真的记录下来的笔记被老师助 ...