zoukankan      html  css  js  c++  java
  • Docker-Compose初体验

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    Step1:什么是 Docker-Compose?

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。


    Step2:Compose 使用的三个步骤
    1、使用 Dockerfile 定义应用程序的环境。
    2、使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    3、执行 docker-compose build/up 命令来启动并运行整个应用程序。


    Step3:项目的目录结构如下所示

     1 Dockerfile:
     2 FROM python:3.7-alpine
     3 WORKDIR /code
     4 COPY requirements.txt requirements.txt
     5 RUN pip install -r requirements.txt
     6 COPY . .
     7 CMD python app.py
     8  
     9 tip:之前文章有详细注释,这里不再赘述。
    10 docker-compose.yml 内容为:
    11   version: ‘212   services:
    13   flask:
    14     build: . #表示flask服务用dockerfile 来构建
    15     ports:
    16       - "5000:5000" #开放的端口
    17   redis:
    18     image: “redis:alpine” #表示redis 服务直接使用现成的镜像
    19   mysqldb:
    20     image: mysql:5.7
    21     environment:
    22       - MYSQL_ROOT_PASSWORD=123456
    23       - MYSQL_DATABASE: mysql
    24     ports:
    25       - "3306:3306"
    26       
    27 requirements.txt 内容为:
    28   flask
    29   redis
    30   pymysql
    31   tip :表示要安装python第三方包
    32  
    33 app.py 内容为:
    34 import random
    35 import redis
    36 import time
    37 import pymysql
    38 from flask import Flask
    39  
    40 app = Flask(name)
    41 cache = redis.Redis(host=’redis’, port=6379) #host直接是yml文件里定义的
    42  
    43 def get_conn(): #调用了mysql容器
    44   conn = pymysql.connect(“mysqldb”,”root”,”123456”,”mysql”)#host直接是yml文件里定义的
    45   cursor = conn.cursor()
    46   sql=”select count(*) from user”
    47   resultList = []
    48   cursor.execute(sql)
    49   result = cursor.fetchall()
    50   columns = cursor.description
    51   for val in result:
    52       tempDict = {}
    53       for cloNum in range(len(columns)):
    54           tempDict[str(columns[cloNum][0])] = val[cloNum]
    55       resultList.append(tempDict)
    56   print(“——————————-打印查询结果———————————“)
    57   print(resultList)
    58   return resultList[0]
    59  
    60 def get_hit_count(): #调用了redis容器
    61   retries = 5
    62   while True:
    63     try:
    64         return cache.incr(‘hits’)
    65     except redis.exceptions.ConnectionError as exc:
    66         if retries == 0:
    67             raise exc
    68         retries -= 1
    69         time.sleep(0.5)
    70  
    71 def get_random():#自定义的方法
    72   return random.randrange(1,1000)*1000000
    73  
    74 @app.route(‘/‘)
    75 def main():
    76   count = get_random()
    77   return ‘Hello Flask! the random number is: {} 
    ’.format(count)+” the redis incr num:{}”.format(get_hit_count())+” the count of user:”+str(get_conn())
    78  
    79 if name == “main“:
    80   app.run(host=”0.0.0.0”, debug=True)

    Step4:执行docker-compose build 构建镜像(注意一下命令执行的目录)

     

    Step5:执行 docker-compose up -d 启动容器,后台运行(注意一下命令执行的目录)

     

    启动后可以在dashboard 查看一下docker-compose 下有两个容器正在运行:

     

    Step6:查看flask 页面

     

    总结:整个过程演示完成,需要大家亲自动手实操才会找到感觉,大家赶快动起手来吧。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     

     添加关注,一起共同成长吧。

  • 相关阅读:
    最短路模板
    Vue中的列表item依次进入动画
    Vue2.6.11中禁止点击事件冒泡
    <img/>标签实现加载错误图的方法(包含Vue框架中的使用)
    H5实现弹窗从下边弹出、关闭效果
    CSS img 宽度固定,高度自适应
    CSS实现Android LinearLayout的效果
    css中实现Android relativeLayout的效果
    Android Log写入本地文件
    Cannot fit requested classes in a single dex file (# methods: 148419 > 65536
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13109687.html
Copyright © 2011-2022 走看看