<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      ?

        真正的落地部署都是希望程序跑在集群下,而不是單機版下測測玩玩,所以這篇就來聊一下怎么使用docker
      swarm進行部署,因為是swarm是docker自帶的,

      所以部署起來還是非常簡單的。

      ?

      一:前置條件

        準備三臺centos機器:?
      192.168.23.154   manager 192.168.23.155   work1 192.168.23.156 work2
      ?

      二:構建集群

      1. ?manger節(jié)點上使用 docker swarm init 即可創(chuàng)建只有一個master節(jié)點的集群。
      [root@manager ~]# docker swarm init Swarm initialized: current node
      (h303fwvspazsv74h6jcj0urz3) is now a manager. To add a worker to this swarm,
      run the following command: docker swarm join --token
      SWMTKN-1-0wakl67xyg5ia13yhvd7rvs7anvh6yn2t9tqcu8wxhpel26gjc-9bror7wo9dh2e7nswwtpjyd0u
      192.168.23.154:2377 To add a manager to this swarm, run 'docker swarm
      join-token manager' and follow the instructions.
      ?

      2. 將上面紅色字體copy到work1和work2 這兩個node節(jié)點即可,這樣就可以構建3個節(jié)點的swarm集群。

      ?

      《1》 work1
      [root@work1 ~]# docker swarm join --token SWMTKN-1
      -0wakl67xyg5ia13yhvd7rvs7anvh6yn2t9tqcu8wxhpel26gjc-9bror7wo9dh2e7nswwtpjyd0u
      192.168.23.154:2377 This node joined a swarm as a worker.
      ?

      《2》 work2
      [root@work2 ~]# docker swarm join --token SWMTKN-1
      -0wakl67xyg5ia13yhvd7rvs7anvh6yn2t9tqcu8wxhpel26gjc-9bror7wo9dh2e7nswwtpjyd0u
      192.168.23.154:2377 This node joined a swarm as a worker.
      ?

      ? ? ? ?最后到manager節(jié)點查看一下三臺機器的分布情況。
      [root@manager ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER
      STATUS ENGINE VERSION h303fwvspazsv74h6jcj0urz3* manager Ready Active Leader
      18.09.6 zaud8bjpttqno3swqjilfzbo3 work1 Ready Active 18.09.6
      ihxnypgl1wamfv583xonl483f work2 Ready Active18.09.6
      ?

      ?

      ?三:程序部署

      ? ? ? ?
      程序還是采用上節(jié)課說到的python+redis,現(xiàn)在有了三個節(jié)點,我希望web程序可以有5個鏡像,redis因為是db服務,所以盡量安排在某一個節(jié)點寄存,這是因為

      如果redis做成了多個,db文件沒不好同步處理了,當然你可以采用類似的clusterfs來實現(xiàn)多機器間的db同步,這里就不麻煩了,接下來我來畫一張部署圖。



      這里要注意的一點就是,集群中的manager節(jié)點不僅可以作為調(diào)度節(jié)點,同時也可以兼職work節(jié)點的功能,直白一點就是可以在manager上跑容器。

      ?

      1. pythonweb 推送到遠程

      ? ? 前面博文中我只在本地做了一個build,其實在swarm部署中是建議全部做成鏡像,然后推送到自己的docker
      registry中,這樣各個work節(jié)點只需要從遠程拉取

      鏡像即可,不需要帶著一些源碼文件到處跑。
      [root@manager data]# docker build -t webapp . Sending build context to Docker
      daemon6.144kB Step 1/6 : FROM python:2.7-slim 2.7-slim: Pulling from
      library/python f5d23c7fed46: Pull complete cdc362a1b8d3: Pull complete
      d43d1ec67d25: Pull complete 0269ba15cf1b: Pull complete Digest:
      sha256:4149310fdae239c7b09aa5fa04263e86b89d11da9bfb1116b4f74782358bfea8
      [root@manager data]# docker tag webapp:latest huangxincheng520/webapp:latest
      [root@manager data]# docker push huangxincheng520/webapp:latest The push refers
      to repository [docker.io/huangxincheng520/webapp] 48e326095e39: Layer already
      exists 2be3ac14ba61: Pushed fb23e9b75b52: Layer already exists c04915bf1261:
      Layer already exists 32d47307f796: Layer already exists c86aa07d5fdb: Pushed
      d8a33133e477: Pushed latest: digest:
      sha256:2c79581255988e78efa97ec9b5c43d742ce8b9535b00660f8e7061f2a0d1d30d size:
      1788
      ?

      2. docker-compose
      version: "3" services: web: image: huangxincheng520/webapp deploy: replicas: 5
      restart_policy: condition: on-failure ports: -"80:80" networks: - webnet redis:
      image: redis ports: -"6379:6379" volumes: - "myvol:/data" deploy: placement:
      constraints: [node.hostname == work2] command: redis-server --appendonly yes
      networks: - webnet networks: webnet: volumes: myvol:
      ?

      ? ? 如果大家了解單機版docker-compose的寫法,那分布式版也就不難,主要在于deploy節(jié)點的使用。

      ?

      《1》 ?replicas: 5?? ? 從這個可以看到,當前我希望web部署成5份,到底怎么分配由swarm集群自己決定,我只需要知道結果就可以了。

      《2》?constraints: [node.hostname == work2] ? ?
      ?可以看到,我已經(jīng)要求swarm將redis部署在hostname=work2的節(jié)點上。

      ?

      3. ? docker stack deploy

      ? ? ? ? 都準備好了,接下來就可以跑一下。
      [root@manager data]# docker stack deploy -c ./docker-compose.yml web Creating
      network web_webnet Creating service web_web Creating service web_redis
      ?

      ? ? ? 然后通過 docker stack ps web 看一下stack 的各服務下的所有container的部署情況。
      [root@manager data]# docker stack ps web ID NAME IMAGE NODE DESIRED STATE
      CURRENT STATE ERROR PORTS qym36md95ni6 web_redis.1 redis:latest work2 Running
      Running33 seconds ago c0zmb5j9zx6q web_web.1 huangxincheng520/webapp:latest
      manager Running Running3 minutes ago lczqz66skupc web_web.2
      huangxincheng520/webapp:latest work2 Running Running3 minutes ago ota9lz0aws21
      web_web.3 huangxincheng520/webapp:latest work1 Running Running 3 minutes ago
      2snnttrgoq43 web_web.4 huangxincheng520/webapp:latest manager Running Running 3
      minutes ago 5735udmor57z web_web.5 huangxincheng520/webapp:latest work1 Running
      Running3 minutes ago
      ? ?

      ? ?
      通過命令可以看到,web確實是5個,manager上有兩個,work1上有兩個,work2上有一個,同時redis也是部署在work2上的,接下來我們隨便通過一個ip地址

      訪問一下web是否可以訪問的通。



      ?

        

      ? ? ? ?現(xiàn)在這個橫向擴容能力就非常強大了,只要機器足夠,你都可以擴展到100個web,對吧,好了,本系列就說到這里,希望對你學習docker有幫助。

      ?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          国产中文字幕一区二区 | 亚洲人东京热123 | 免费观看黄色的网站 | 粗肉开荤h白袜体育生 | 日逼免费看 | 国产午夜精品一区二区三区 | 天天综合激情网 | 宝贝好爽夹的太紧了 | 色婷婷亚洲精品 | 坐公交车被弄高潮几次 |