资讯专栏INFORMATION COLUMN

从docker到istio之二 - 使用compose部署应用

yy13818512006 / 862人阅读

摘要:使用导出端口,使用挂载数据卷。清理应用使用一键清理应用总结已经实现了容器扩容自动挡更直观的控制容器启动顺序及依赖。从部署到编排,单字面理解,看起来能够维护的容器量都增长了。推荐应用包括多个服务,推荐部署方式就是。

前言

容器化,云原生越演越烈,新概念非常之多。信息爆炸的同时,带来层层迷雾。我尝试从扩容出发理解其脉路,经过实践探索,整理形成一个入门教程,包括下面四篇文章。

容器化实践之路-从docker到istio之一 - 使用Docker将应用容器化

容器化实践之路-从docker到istio之二 - 使用compose部署应用

容器化实践之路-从docker到istio之三 - kubernetes编排应用

容器化实践之路-从docker到istio之四 - istio管理应用

这是第二篇,使用compose部署应用,同样演示都在docker2istio目录。

compose

Compose是一个用于定义和运行多容器Docker应用程序的工具,采用python编写。

部署应用及测试 编写应用部署文件

compose部署应用,采用编写docker-compose.yml

version: "3"
services:

  redis:
    image: redis:4-alpine3.8
    restart: always
  
  flaskapp:
    depends_on:
      - redis
    build: ./app
    image: flaskapp:0.0.2
    links:
      - redis

  nginx:
    image: nginx:1.15.8-alpine
    depends_on:
      - flaskapp
    volumes:
      - ./nginx:/etc/nginx/conf.d
    restart: always
    ports:
      - "80:80"
    environment:
      - NGINX_PORT=80
    links:
      - flaskapp

这里描述了下面几件事情:

    依次启动redisflaskappnginx 三个服务。服务顺序由depends_on 决定。

    使用build命令,自动编译 flaskapp:0.0.2

    使用links命令,描述服务间依赖。

    使用ports导出端口,使用volumes挂载数据卷。

这一过程,把第一篇中启动容器的过程,语义化,流程更清晰。

启动应用

启动应用,使用docker-compose up 命令:

Creating network "docker2istio_default" with the default driver
Building flaskapp
Step 1/5 : FROM python:3.6-alpine
 ---> 1d981af1e3b4
Step 2/5 : WORKDIR /code
 ---> Using cache
 ---> 7f2b07b16752
Step 3/5 : RUN pip install redis flask
 ---> Using cache
 ---> 79e39b6c2e93
Step 4/5 : ADD . /code
 ---> 4266029c0709
Step 5/5 : CMD ["python", "flaskapp.py"]
 ---> Running in 56e799a2fb61
Removing intermediate container 56e799a2fb61
 ---> 1a61773c4c07

Successfully built 1a61773c4c07
Successfully tagged flaskapp:0.0.2
WARNING: Image for service flaskapp was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating docker2istio_redis_1 ... done
Creating docker2istio_flaskapp_1 ... done
Creating docker2istio_nginx_1    ... done
Attaching to docker2istio_redis_1, docker2istio_flaskapp_1, docker2istio_nginx_1
flaskapp_1  |  * Serving Flask app "flaskapp" (lazy loading)
flaskapp_1  |  * Environment: production
flaskapp_1  |    WARNING: Do not use the development server in a production environment.
flaskapp_1  |    Use a production WSGI server instead.
flaskapp_1  |  * Debug mode: on
redis_1     | 1:C 09 Apr 12:06:15.892 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1     | 1:C 09 Apr 12:06:15.893 # Redis version=4.0.12, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1     | 1:C 09 Apr 12:06:15.893 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
flaskapp_1  |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
flaskapp_1  |  * Restarting with stat
flaskapp_1  |  * Debugger is active!
redis_1     | 1:M 09 Apr 12:06:15.894 * Running mode=standalone, port=6379.
redis_1     | 1:M 09 Apr 12:06:15.894 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1     | 1:M 09 Apr 12:06:15.894 # Server initialized
flaskapp_1  |  * Debugger PIN: 323-612-506
redis_1     | 1:M 09 Apr 12:06:15.894 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command "echo never > /sys/kernel/mm/transparent_hugepage/enabled" as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1     | 1:M 09 Apr 12:06:15.894 * Ready to accept connections

启动日志中,展示了创建网络,编译镜像,启动容器这几个过程

访问应用

使用 docker-compose ps 检查服务状况:

         Name                        Command               State         Ports
-------------------------------------------------------------------------------------
docker2istio_flaskapp_1   python flaskapp.py               Up
docker2istio_nginx_1      nginx -g daemon off;             Up      0.0.0.0:80->80/tcp
docker2istio_redis_1      docker-entrypoint.sh redis ...   Up      6379/tcp

当然,compose也是使用docker,也可以 docker ps

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                NAMES
c96fd468c415        nginx:1.15.8-alpine   "nginx -g "daemon of…"   3 minutes ago       Up 3 minutes        0.0.0.0:80->80/tcp   docker2istio_nginx_1
b61d1d0ca201        flaskapp:0.0.2        "python flaskapp.py"     3 minutes ago       Up 3 minutes                             docker2istio_flaskapp_1
73a2359655d2        redis:4-alpine3.8     "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        6379/tcp             docker2istio_redis_1

对比可见 docker-compose ps ,更偏应用层。

然后访问服务:

➜  ~ curl http://127.0.0.1
Hello World by 172.19.0.3 from 172.19.0.1 ! 该页面已被访问 1 次。
应用扩容

使用 docker-compose up --scale flaskapp=2flaskapp进行扩容。

查看扩容的结果:

➜  docker2istio docker-compose ps
         Name                        Command               State         Ports
-------------------------------------------------------------------------------------
docker2istio_flaskapp_1   python flaskapp.py               Up
docker2istio_flaskapp_2   python flaskapp.py               Up
docker2istio_nginx_1      nginx -g daemon off;             Up      0.0.0.0:80->80/tcp
docker2istio_redis_1      docker-entrypoint.sh redis ...   Up      6379/tcp

刷新访问应用

➜  docker2istio curl http://127.0.0.1
Hello World by 172.20.0.4 from 172.20.0.1 ! 该页面已被访问 101 次。
➜  docker2istio curl http://127.0.0.1
Hello World by 172.20.0.3 from 172.20.0.1 ! 该页面已被访问 102 次。

同时观察服务日志输出:

nginx_1     | 172.22.0.1 - - [10/Apr/2019:01:38:02 +0000] "GET / HTTP/1.0" 200 76 "-" "ApacheBench/2.3" "-"
flaskapp_1  | [2019-04-10 01:38:02,140] DEBUG in flaskapp: Hello out 172.22.0.3 172.22.0.1 65:
flaskapp_1  | 172.22.0.5 - - [10/Apr/2019 01:38:02] "GET / HTTP/1.0" 200 -
flaskapp_1  | [2019-04-10 01:38:02,141] DEBUG in flaskapp: Hello out 172.22.0.3 172.22.0.1 63:
flaskapp_2  | [2019-04-10 01:38:02,145] DEBUG in flaskapp: hello in
flaskapp_1  | 172.22.0.5 - - [10/Apr/2019 01:38:02] "GET / HTTP/1.0" 200 -
nginx_1     | 172.22.0.1 - - [10/Apr/2019:01:38:02 +0000] "GET / HTTP/1.0" 200 76 "-" "ApacheBench/2.3" "-"
flaskapp_1  | [2019-04-10 01:38:02,150] DEBUG in flaskapp: hello in
flaskapp_2  | [2019-04-10 01:38:02,151] DEBUG in flaskapp: hello in
nginx_1     | 172.22.0.1 - - [10/Apr/2019:01:38:02 +0000] "GET / HTTP/1.0" 200 76 "-" "ApacheBench/2.3" "-"
flaskapp_2  | [2019-04-10 01:38:02,153] DEBUG in flaskapp: Hello out 172.22.0.4 172.22.0.1 67:
flaskapp_2  | 172.22.0.5 - - [10/Apr/2019 01:38:02] "GET / HTTP/1.0" 200 -
nginx_1     | 172.22.0.1 - - [10/Apr/2019:01:38:02 +0000] "GET / HTTP/1.0" 200 76 "-" "ApacheBench/2.3" "-"
flaskapp_2  | [2019-04-10 01:38:02,156] DEBUG in flaskapp: Hello out 172.22.0.4 172.22.0.1 69:
flaskapp_1  | [2019-04-10 01:38:02,156] DEBUG in flaskapp: hello in
flaskapp_2  | 172.22.0.5 - - [10/Apr/2019 01:38:02] "GET / HTTP/1.0" 200 -
flaskapp_1  | [2019-04-10 01:38:02,159] DEBUG in flaskapp: hello in
flaskapp_2  | [2019-04-10 01:38:02,161] DEBUG in flaskapp: hello in
nginx_1     | 172.22.0.1 - - [10/Apr/2019:01:38:02 +0000] "GET / HTTP/1.0" 200 76 "-" "ApacheBench/2.3" "-"
flaskapp_1  | [2019-04-10 01:38:02,160] DEBUG in flaskapp: Hello out 172.22.0.3 172.22.0.1 70:

对比纯docker的方式,扩容变简单了。

需要注意的是:扩容过程中要重启nginx服务,否则虽然容器扩充成多个,但是服务流量并不会分配到新容器。不过容器启动和创建非常迅速,可以先docker-compose down再行扩容启动。

docker-compose scale Note: This command is deprecated. Use the up command with the --scale flag instead. Beware that using up with --scale flag has some subtle differences with the scale command as it incorporates the behaviour of up command.

清理应用

使用 docker-compose down 一键清理应用

Removing docker2istio_nginx_1    ... done
Removing docker2istio_flaskapp_2 ... done
Removing docker2istio_flaskapp_1 ... done
Removing docker2istio_redis_1    ... done
Removing network docker2istio_default
总结

compose 已经实现了容器扩容自动挡:

    更直观的控制容器启动顺序及依赖。

    使用便捷,扩容方便。

不过compose的自动挡,充其量只是一个摩托版,作为小型/测试应用的部署方案还是不错。如果是大型/正式应用,还有以下缺点:

    扩容不能够无缝,需要重启服务。

    单纯的compose不支持多机互联。

要实现多机部署扩容,就需要使用到 kubernetes的容器编排方案了。从部署到编排,单字面理解,看起来能够维护的容器量都增长了。相比 docker 家的swarm+machine方案, kubernetes 已经是容器编排领域的事实标准,更值得学习了解。

推荐

    harbor harbor应用包括多个服务,推荐部署方式就是compose。

    gogs-drone-docker 。演示了如何快速使用docker compose 搭建一个ci系统。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/6995.html

相关文章

  • 数人云|服务网格新生代Istio进化,与传统模式相较5大特性更助容器扩展

    摘要:敖小剑万字解读服务网格新生代添加很多新的功能以及改建,下面来谈一谈,让人激动的大改进对于自定义资源和初始化器的支持,要求或更新,如果集群中启用了特性,建议安装初始化器,它为所有想要的管理的微服务部署注入了自动的。 关于Service Mesh,数人云之前给大家分享了敖小剑老师的《Qcon2017实录|Service Mesh:下一代微服务》那么它对于容器相比传统模式都有哪方面的优势呢?...

    fnngj 评论0 收藏0
  • 云服务搭台,AI唱戏,这是一场不逊于I/O的Google科技大会

    摘要:当地时间月日,在结束的一个半月后,名开发者再度聚首旧金山。截止到,公司资本支出为亿美元,相当于去年同期的亿美元的两倍。即使是自认为对 Google 非常熟悉的人们,也可能没有听过 Cloud Next 大会的名字。这是 Google I/O 以外,这家公司又一个吸粉无数的开发者盛会。当地时间 7 月 24 日,在 I/O 结束的一个半月后,25000 名 Google Cloud 开发者再度...

    stonezhu 评论0 收藏0
  • 华尔街见闻基于istio的服务网格实践

    摘要:,托管于腾讯云容器平台容器编排工具。适配我们目前的服务部署在腾讯云托管,节点使用核的网络增强型机器,所有的后端服务都以部署,集群外部署高可用支持集群内服务发现,数据库以为主,消息队列采用。 距离2017年的见闻技术架构调整接近2年,随着业务线的发展,见闻技术部的项目数量、项目架构类型、基础设施规模、服务变更频率都在不断地增长,带给SRE的挑战是如何能更快地助力于开发人员更快更稳定地部署...

    stonezhu 评论0 收藏0
  • 布道Istio,Rancher联合华为“搞事儿”

    摘要:年月的华为大会上,两人开始了对的讨论。联合创始人及梁胜在月上海中,联合华为布道华为云和以下简称的合作由来已久。这一观点与梁胜的看法不谋而合。甫一见面,方璞便向梁胜抛出了一个重磅问题:在K8S之后,你觉得未来最有前途的容器技术是什么呢?方璞是华为云容器服务域的产品总监,主要负责华为云容器的构建和部署。我觉得是Istio。方璞说。2016年9月的华为CONNECT大会上,两人开始了对Istio的...

    付永刚 评论0 收藏0
  • 服务迁移之路 | Spring Cloud向Service Mesh转变

    摘要:服务网关服务网关涵盖的功能包括路由,鉴权,限流,熔断,降级等对入站请求的统一拦截处理。具体可以进一步划分为外部网关面向互联网和内部网关面向服务内部管理。应用服务应用服务是企业业务核心。到此实际上已经完成服务迁移工作。 导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API...

    rickchen 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<