运维之我的docker-单机多容器的编排-compose

docker-compose是定义和运行多容器Docker应用程序的工具。我们可以把特定的几个容器组合起来构建成一个应用向下图一样。看上去有点像我们以前用过的saltstack的使用方式一样,同样compose使用yaml语法,通过这种方式我们可以把就像单机版本(docker版)saltstack.compose也可以yml文件为管理单位进行项目管理。

现在大家是不是很感兴趣啊。

  • composer安装
yum-config-manager
--add-repo  https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo
 
yum -y install
docker-engine
 
centos7下面直接用pip install docker-compose

第一步创建一个自己的Dockerfile

$ mkdir composetest
$ cd composetest
 
$ cat 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)
[[email protected]
composetest]# cat requirements.txt
flask
redis

创建一个dockerfile

依赖于 python3.4添加本地文件到容器,工作目录当前目录下的code,安装flask和redis‘插件,启动flask的一个小app

[[email protected]
composetest]# cat Dockerfile
FROM
python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r
requirements.txt
CMD
["python", "app.py"]

第二部写一个docker-compose.yml配置文件,注意名字不要写错。

本services总需要两个镜像分别是当前Dockerfile编译出的镜像和远程redis镜像,

web当前目录下构建出的镜像web自动映射端口月5000,挂载当前目录到镜像内的code目录

redis:直接拉取远程镜像并启动

注意:因为docker非默认网络可以自动解析容器名到对应容器,所以直接使用“redis”就可以访问到启动的redis容器。

version: ‘2‘
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image:
"registry.cn-hangzhou.aliyuncs.com/forker/redis:latest"

第三部启动compose

整个启动过程包括镜像构建,拉取,启动。

[[email protected]
composetest]# docker-compose up
Creating network
"composetest_default" with the default driver
Building web
Step 1/5 : FROM
python:3.4-alpine
 ---> 765c483d587c
。。。。。
redis_1  | 1:M 26 Jan 14:25:40.111 * The server is now
ready to accept connections on port 6379
web_1    |  *
Running on http://0.0.0.0:5000/ (Press
CTRL+C to quit)
web_1    |  *
Restarting with stat
web_1    |  *
Debugger is active!
web_1    |  *
Debugger pin code: 301-431-697

现在可以测试访问一下,因为上面flask的脚本每次访问都会写入redis一次

[[email protected] ~]#
curl http://0.0.0.0:5000/
Hello World! I have
been seen 1 times.
[[email protected] ~]#
curl http://0.0.0.0:5000/
Hello World! I have
been seen 2 times.
[[email protected] ~]#
curl http://0.0.0.0:5000/
Hello World! I have
been seen 3 times.
[[email protected] ~]#
curl http://0.0.0.0:5000/
Hello World! I have
been seen 4 times.

现在修改下代码在app.py里面修改返回“return ‘Hello from Docker! I have been seen {}
times.\n‘.format(count)”

[[email protected]
composetest]# vim app.py
[[email protected]
composetest]# curl http://0.0.0.0:5000/
Hello from Docker! I
have been seen 5 times.
[[email protected]
composetest]# curl http://0.0.0.0:5000/
Hello from Docker! I
have been seen 6 times.
[[email protected]
composetest]# curl http://0.0.0.0:5000/
Hello from Docker! I
have been seen 7 times.

后台启动

[[email protected]
composetest]# docker-compose up -d
Recreating
composetest_web_1
Starting
composetest_redis_1
[[email protected]
composetest]# docker-compose ps
       Name                      Command               State           Ports         
-------------------------------------------------------------------------------------
composetest_redis_1   /bin/sh -c /usr/local/redi ...   Up     
6379/tcp              
composetest_web_1     python app.py                    Up      0.0.0.0:5000->5000/tcp

查看指定容器的环境变量

[[email protected]
composetest]# docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=230491939a67
TERM=xterm
LANG=C.UTF-8
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
PYTHON_VERSION=3.4.6
PYTHON_PIP_VERSION=9.0.1
HOME=/root

停止服务

[[email protected]
composetest]# docker-compose stop
Stopping
composetest_web_1 ... done
Stopping
composetest_redis_1 ... done

删除容器,逻辑卷和网络

[[email protected]
composetest]# docker-compose down --volumes
Removing
composetest_web_run_1 ... done
Removing
composetest_web_1 ... done
Removing
composetest_redis_1 ... done
Removing network
composetest_defau

lt

时间: 2024-08-09 06:20:27

运维之我的docker-单机多容器的编排-compose的相关文章

运维之我的docker(文章教程汇总)

介绍 Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC(Linux Container) 的高级容器引擎,源代码托管在 Github上, 基于go语言并遵从Apache2.0协议开源. 因为docker使用的是在容器技术上运行环境,而虚拟化是在虚拟化层级上运行虚拟系统然后在虚拟系统上再运行环境.单从层级上docker比虚拟化少一个"虚拟系统"层级的资源消耗,性能和启动速度上要高于虚拟化. 当然docker这两年风靡国内外并不仅因为性能上的优势,也因为dock

运维人员的解放----Docker快速部署

Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container).(我个人还是喜欢称虚拟机) Docker应用容器相对于 VM 有以下几个优点: 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久 资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源 因为VM 的 Hypervi

《系统运维全面解析》新华网副总裁作序,360、触控等多位总监经理推荐

<系 统 运 维 全 面 解 析>前言 执笔: 韩晓光 (QQ群:117174700) 本书初衷 有朋友问我系统运维是做什么的,是不是类似网管天天修电脑?对此问题,我一言难尽,其实运维工作涉及的东西很多.此时我便有一种冲动,去写一本关于系统运维的书,介绍一些事实真相. 翻 读<史记>让人感到历史的厚重,人类的历史就是不断认识自己,认识社会,认识这个世界的过程,人类在自导自演中创造了社会文明.但是,试想山间花果的荣 枯,若你看不见闻不到,则对你来说它们似乎不存在.当然,也正是历史学家

Docker化运维方式

应用迁移需求 应用运维需要考虑的一个重要问题就是迁移, 在不同机器.机房.环境间迁移.迁移的原因有很多, 比如硬件过保(硬件故障), 机房迁移, 应用扩缩容等. 应用迁移的核心需求是: 简单. 迁移操作必须足够简单, 没有学习成本, 点击一下即可. 快速. 迁移过程能在极短的时间内完成. 无损. 迁移之后应用与原应用一模一样, 不丢失任何配置和数据.迁移之后应用功能和业务逻辑与原部署应用一模一样,无任何业务风险. 许多公司还在使用古老的 rhel 5/6 和 linux 2.6.x 内核, 难以

Docker…… 端到端的敏捷价值流平台;从开发,测试再到运维

Docker--终于誏我们真正能实现,将软件的开发变成"软件的组装"."软件组装工厂,将真正的诞生". 软件的组装的概念与相关的方法论,存在已有数十年.这些方法论,帮助我们解决了,如何设计与开发好软件接口的问题. 但,只是在开发阶段,确定好软件的接口,是 "无法"做到 "软件组装"的. "因为,开发人员很难,甚至是无法去构造一个使开发,测试与运维均能一致的环境.所以,开发人员是完全没办法在开发阶段,便能保证软件组装后

Docker运维必备:监控宝Docker监控试用手记

本文由肖远昊深度实践docker监控的报告   非常荣幸得到监控宝的邀请,试用了他们最近推出的新产品--Docker监控. 9月7日,中国APM厂商云智慧CloudWise正式发布上线Docker监控,该产品从部署到使用,整个过程都非常的简单.不仅能够实时监控宿主机和Docker容器的性能信息(包括CPU.Mem.磁盘.Net In/Out),还可以自定义相应的告警策略.以下将从部署.监控信息.告警这几个方面聊聊试用体会.大家可以[注册]监控宝,免费使用Docker监控. 部署流程 阅读了Doc

运维自动化之ansible playbook结合docker安装smokeping

本次介绍ansible的paly book结合docker进行虚拟机里安装2.6.8版本smokeping(apache版本是2.4.7). docker版本 09:26:53 # docker version Client version: 0.11.1 Client API version: 1.11 Go version (client): go1.2.1 Git commit (client): fb99f99/0.11.1 Server version: 0.11.1 Server A

docker常用运维命令

docker常用运维命令总结:在centos中一般通过systemd启动与管理docker: 1. 启动docker:sudo systemctl start docker 2. 关闭docker:sudo systemctl stop docker 3. docker开机自启:sudo systemctl enable docker 4. 查看docker日志: journalctl -u docker.service or less /var/log/messages | grep Dock

运维之我的docker-使用ELK处理docker日志

因为docker产生的容器不是一个永久存储的文件,所以无法保证你的文件永久保存.建议大家把容器产生的日志通过fluentd,flume,logstash等工具传送到一个日志仓库,这样保证方便保证数据的安全和管理.由于docker官方的推荐,我们本次讲解是fluentd日志收集组件. 具体使用如下: 安装ES 1. 初始化环境 [[email protected] src]# vim /etc/sysctl.conf vm.max_map_count = 290000 [[email protec