摘要:使用導(dǎo)出端口,使用掛載數(shù)據(jù)卷。清理應(yīng)用使用一鍵清理應(yīng)用總結(jié)已經(jīng)實(shí)現(xiàn)了容器擴(kuò)容自動(dòng)擋更直觀的控制容器啟動(dòng)順序及依賴。從部署到編排,單字面理解,看起來(lái)能夠維護(hù)的容器量都增長(zhǎng)了。推薦應(yīng)用包括多個(gè)服務(wù),推薦部署方式就是。
前言容器化,云原生越演越烈,新概念非常之多。信息爆炸的同時(shí),帶來(lái)層層迷霧。我嘗試從擴(kuò)容出發(fā)理解其脈路,經(jīng)過(guò)實(shí)踐探索,整理形成一個(gè)入門(mén)教程,包括下面四篇文章。
容器化實(shí)踐之路-從docker到istio之一 - 使用Docker將應(yīng)用容器化
容器化實(shí)踐之路-從docker到istio之二 - 使用compose部署應(yīng)用
容器化實(shí)踐之路-從docker到istio之三 - kubernetes編排應(yīng)用
容器化實(shí)踐之路-從docker到istio之四 - istio管理應(yīng)用
這是第二篇,使用compose部署應(yīng)用,同樣演示都在docker2istio目錄。
composeCompose是一個(gè)用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具,采用python編寫(xiě)。
部署應(yīng)用及測(cè)試 編寫(xiě)應(yīng)用部署文件compose部署應(yīng)用,采用編寫(xiě)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
這里描述了下面幾件事情:
依次啟動(dòng)redis 、 flaskapp 、 nginx 三個(gè)服務(wù)。服務(wù)順序由depends_on 決定。
使用build命令,自動(dòng)編譯 flaskapp:0.0.2。
使用links命令,描述服務(wù)間依賴。
使用ports導(dǎo)出端口,使用volumes掛載數(shù)據(jù)卷。
這一過(guò)程,把第一篇中啟動(dòng)容器的過(guò)程,語(yǔ)義化,流程更清晰。
啟動(dòng)應(yīng)用啟動(dòng)應(yīng)用,使用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
啟動(dòng)日志中,展示了創(chuàng)建網(wǎng)絡(luò),編譯鏡像,啟動(dòng)容器這幾個(gè)過(guò)程
訪問(wèn)應(yīng)用使用 docker-compose ps 檢查服務(wù)狀況:
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
當(dāng)然,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
對(duì)比可見(jiàn) docker-compose ps ,更偏應(yīng)用層。
然后訪問(wèn)服務(wù):
? ~ curl http://127.0.0.1 Hello World by 172.19.0.3 from 172.19.0.1 ! 該頁(yè)面已被訪問(wèn) 1 次。應(yīng)用擴(kuò)容
使用 docker-compose up --scale flaskapp=2 對(duì) flaskapp進(jìn)行擴(kuò)容。
查看擴(kuò)容的結(jié)果:
? 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
刷新訪問(wèn)應(yīng)用
? docker2istio curl http://127.0.0.1 Hello World by 172.20.0.4 from 172.20.0.1 ! 該頁(yè)面已被訪問(wèn) 101 次。 ? docker2istio curl http://127.0.0.1 Hello World by 172.20.0.3 from 172.20.0.1 ! 該頁(yè)面已被訪問(wèn) 102 次。
同時(shí)觀察服務(wù)日志輸出:
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:
對(duì)比純docker的方式,擴(kuò)容變簡(jiǎn)單了。
需要注意的是:擴(kuò)容過(guò)程中要重啟nginx服務(wù),否則雖然容器擴(kuò)充成多個(gè),但是服務(wù)流量并不會(huì)分配到新容器。不過(guò)容器啟動(dòng)和創(chuàng)建非常迅速,可以先docker-compose down再行擴(kuò)容啟動(dòng)。
清理應(yīng)用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 一鍵清理應(yīng)用
Removing docker2istio_nginx_1 ... done
Removing docker2istio_flaskapp_2 ... done
Removing docker2istio_flaskapp_1 ... done
Removing docker2istio_redis_1 ... done
Removing network docker2istio_default
總結(jié)
compose 已經(jīng)實(shí)現(xiàn)了容器擴(kuò)容自動(dòng)擋:
更直觀的控制容器啟動(dòng)順序及依賴。
使用便捷,擴(kuò)容方便。
不過(guò)compose的自動(dòng)擋,充其量只是一個(gè)摩托版,作為小型/測(cè)試應(yīng)用的部署方案還是不錯(cuò)。如果是大型/正式應(yīng)用,還有以下缺點(diǎn):
擴(kuò)容不能夠無(wú)縫,需要重啟服務(wù)。
單純的compose不支持多機(jī)互聯(lián)。
要實(shí)現(xiàn)多機(jī)部署擴(kuò)容,就需要使用到 kubernetes的容器編排方案了。從部署到編排,單字面理解,看起來(lái)能夠維護(hù)的容器量都增長(zhǎng)了。相比 docker 家的swarm+machine方案, kubernetes 已經(jīng)是容器編排領(lǐng)域的事實(shí)標(biāo)準(zhǔn),更值得學(xué)習(xí)了解。
推薦
harbor harbor應(yīng)用包括多個(gè)服務(wù),推薦部署方式就是compose。
gogs-drone-docker 。演示了如何快速使用docker compose 搭建一個(gè)ci系統(tǒng)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/6995.html
摘要:敖小劍萬(wàn)字解讀服務(wù)網(wǎng)格新生代添加很多新的功能以及改建,下面來(lái)談一談,讓人激動(dòng)的大改進(jìn)對(duì)于自定義資源和初始化器的支持,要求或更新,如果集群中啟用了特性,建議安裝初始化器,它為所有想要的管理的微服務(wù)部署注入了自動(dòng)的。 關(guān)于Service Mesh,數(shù)人云之前給大家分享了敖小劍老師的《Qcon2017實(shí)錄|Service Mesh:下一代微服務(wù)》那么它對(duì)于容器相比傳統(tǒng)模式都有哪方面的優(yōu)勢(shì)呢?...
摘要:當(dāng)?shù)貢r(shí)間月日,在結(jié)束的一個(gè)半月后,名開(kāi)發(fā)者再度聚首舊金山。截止到,公司資本支出為億美元,相當(dāng)于去年同期的億美元的兩倍。即使是自認(rèn)為對(duì) Google 非常熟悉的人們,也可能沒(méi)有聽(tīng)過(guò) Cloud Next 大會(huì)的名字。這是 Google I/O 以外,這家公司又一個(gè)吸粉無(wú)數(shù)的開(kāi)發(fā)者盛會(huì)。當(dāng)?shù)貢r(shí)間 7 月 24 日,在 I/O 結(jié)束的一個(gè)半月后,25000 名 Google Cloud 開(kāi)發(fā)者再度...
摘要:,托管于騰訊云容器平臺(tái)容器編排工具。適配我們目前的服務(wù)部署在騰訊云托管,節(jié)點(diǎn)使用核的網(wǎng)絡(luò)增強(qiáng)型機(jī)器,所有的后端服務(wù)都以部署,集群外部署高可用支持集群內(nèi)服務(wù)發(fā)現(xiàn),數(shù)據(jù)庫(kù)以為主,消息隊(duì)列采用。 距離2017年的見(jiàn)聞技術(shù)架構(gòu)調(diào)整接近2年,隨著業(yè)務(wù)線的發(fā)展,見(jiàn)聞技術(shù)部的項(xiàng)目數(shù)量、項(xiàng)目架構(gòu)類型、基礎(chǔ)設(shè)施規(guī)模、服務(wù)變更頻率都在不斷地增長(zhǎng),帶給SRE的挑戰(zhàn)是如何能更快地助力于開(kāi)發(fā)人員更快更穩(wěn)定地部署...
摘要:年月的華為大會(huì)上,兩人開(kāi)始了對(duì)的討論。聯(lián)合創(chuàng)始人及梁勝在月上海中,聯(lián)合華為布道華為云和以下簡(jiǎn)稱的合作由來(lái)已久。這一觀點(diǎn)與梁勝的看法不謀而合。甫一見(jiàn)面,方璞便向梁勝拋出了一個(gè)重磅問(wèn)題:在K8S之后,你覺(jué)得未來(lái)最有前途的容器技術(shù)是什么呢?方璞是華為云容器服務(wù)域的產(chǎn)品總監(jiān),主要負(fù)責(zé)華為云容器的構(gòu)建和部署。我覺(jué)得是Istio。方璞說(shuō)。2016年9月的華為CONNECT大會(huì)上,兩人開(kāi)始了對(duì)Istio的...
摘要:服務(wù)網(wǎng)關(guān)服務(wù)網(wǎng)關(guān)涵蓋的功能包括路由,鑒權(quán),限流,熔斷,降級(jí)等對(duì)入站請(qǐng)求的統(tǒng)一攔截處理。具體可以進(jìn)一步劃分為外部網(wǎng)關(guān)面向互聯(lián)網(wǎng)和內(nèi)部網(wǎng)關(guān)面向服務(wù)內(nèi)部管理。應(yīng)用服務(wù)應(yīng)用服務(wù)是企業(yè)業(yè)務(wù)核心。到此實(shí)際上已經(jīng)完成服務(wù)遷移工作。 導(dǎo)讀 Spring Cloud基于Spring Boot開(kāi)發(fā),提供一套完整的微服務(wù)解決方案,具體包括服務(wù)注冊(cè)與發(fā)現(xiàn),配置中心,全鏈路監(jiān)控,API...
閱讀 2401·2021-10-11 10:59
閱讀 2658·2021-10-11 10:58
閱讀 3367·2021-09-08 09:35
閱讀 3946·2021-09-02 15:21
閱讀 1540·2019-08-30 15:53
閱讀 2683·2019-08-29 14:16
閱讀 2133·2019-08-26 14:00
閱讀 3018·2019-08-26 13:52