码迷,mamicode.com
首页 > 其他好文 > 详细

docker三剑客之docker-compose(记官方案例)

时间:2018-12-30 22:22:50      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:world   pip   except   cal   端口映射   ESS   oca   学习   方案   

简介

Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高。

Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。?

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。

其它大部分指令都跟 docker run 中的类似。

实验环境:已安装docker的主机
本文使用的是Centos7.4
docker版本:Docker version 18.09.0, build 4d60db4
ip地址:192.168.70.128


步骤一:设置
定义应用程序依赖项

1.为项目创建一个目录

[root@localhost composetest]# pwd
/opt/composetest

2.创建一个app.py的python脚本

[root@localhost composetest]# vim app.py      #内容如下
import time

import redis
from flask import Flask

app = 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)

3.另创建一个requirements.txt文件

vim requirements.txt
flask
redis

++++++++++++不才,没有研究python,所以暂时不能为各位解释这个python脚本,日后学习中定回头重新完善++++++++++

步骤二:创建一个Dockerfile

生成Docker镜像的Dockerfile,该镜像包含Python应用程序所需的所有依赖项,包括Python本身。

[root@localhost composetest]# vim dockerfile     #内容如下
FROM python:3.4-alpine     #指定镜像为python:3.4-alpine
ADD . /code                          #添加当前目录到镜像下的/code,不存在会自动创建
WORKDIR /code                 #指定工作目录为/code
RUN pip install -r requirements.txt    #python下载命令,安装的服务为我们上文定义的 requirements.txt 文件内容
CMD ["python", "app.py"]    #定义容器启动时的命令

步骤三:编写docker-compose文件

[root@localhost composetest]# vim docker-compose.yml 

version: ‘3‘                   #版本为3
services:                      #定义服务
    web:                            #服务名为web
        build: .                      #dockerfile文件路径为当前目录
        ports:                        #暴露端口
         - "5000:5000"        #本地主机5000端口映射给容器使用
        volumes:                 #挂载
         - .:/code                  #定义挂载目录为当前目录给容器/code使用
    redis:                         #服务名为redis
        image: "redis:alpine"    #使用镜像为redis:alpine

步骤四:构建编写的应用

[root@localhost composetest]# docker-compose up     #执行构建命令

技术分享图片
技术分享图片

步骤五、网页访问
技术分享图片
出现的效果图如上所示,当你刷新页面的时候次数会变化
技术分享图片
而你的操作终端也会有信息提示
技术分享图片

步骤六:修改py文件,改变网页信息

因为我们挂载了本地目录给容器进行使用,所以可以通过更改本地文件的方式更新容器内的信息。

1、另起终端,xhell复制回话,修改app.py文件

技术分享图片

2、刷新网页界面

技术分享图片

3、查看终端界面提示

技术分享图片
+++好吧,first少个r,不要太在意。。

小结:本文主要根据官方的给的小范例初步理解docker-compose文件的编写,了解其作用。
执行docker-compose up的时候可以加-d参数,这样就不需要另起终端,而且强制的ctrl+c会终止容器运行,有些时候这是我们不希望看到的。
技术分享图片
加了-d参数效果如下技术分享图片
有人要问了,我想看到容器反馈给我的信息怎么办,这个需要用到docker logs命令了
技术分享图片
这样我们就能看到容器给我们反馈的信息了
好了,本文主要介绍这么多,下次博客会为大家提供更多的docker-compose的使用,共同学习,努力向前!

docker三剑客之docker-compose(记官方案例)

标签:world   pip   except   cal   端口映射   ESS   oca   学习   方案   

原文地址:http://blog.51cto.com/13760226/2337237

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!