Docker Get Started V

來源:互聯網
上載者:User

標籤:開啟   src   detail   rate   ==   web   mac   pos   yml   

5. Stacks介紹

在第4部分,你已經學會如何配置一個蜂群,蜂群是一個運行著docker的叢集,然後你將app部署到這個蜂群上,容器運行在多個機器上。

在第5部分,我們馬上介紹分布式應用程式層級的最上層的概念stack。一個stack是一組共用依賴的內部相關的服務,這些服務能夠被一起編排和伸縮。單獨的一個stack能夠定義和協調整個應用的功能,一些複雜的應用可能需要定義多個stack。

不要慌,從第3部分開始,我們就已經接觸到了stack,前面我們建立compose檔案,然後運行docker stack deploy,這些都是和stack相關的內容。但是前面我們接觸的都是運行在單台機器上的包含單個服務的stack,這個在生產環境中不常見。接下來,運用之前學到的知識,我們來建立多個相關的服務,然後運行在多台機器上。

增加一個Service 重新部署

修改docker-compose.yml檔案很容易添加一個服務。首先我們增加一個免費的可視化服務,這個服務可以讓我們看我們的蜂群是如何調度我們的容器的。

  1. 開啟docker-compose.yml檔案,修改為如下內容:
version: "3"services:  web:    # replace username/repo:tag with your name and image details    image: dockerjie/get-started:part2    deploy:      replicas: 5      resources:        limits:          cpus: "0.1"          memory: 50M      restart_policy:        condition: on-failure    ports:      - "4000:80"    networks:      - webnet  visualizer:    image: dockersamples/visualizer:stable    ports:      - "8080:8080"    volumes:      - "/var/run/docker.sock:/var/run/docker.sock"    deploy:      placement:        constraints: [node.role == manager]    networks:      - webnet  networks:  webnet:

注意上面有兩個新的配置項,volumes,運行可視化服務訪問宿主機的Docker的socket檔案,placement則確保服務被部署在蜂群管理器swarm manager上面,而不是worker上,因為可視化服務是顯示蜂群概覽資訊的,僅僅管理器才有許可權擷取到這些資訊。

  1. 確保你的shell串連到myvm1機器上。docker-machine start $(docker-machine ls -q)啟動所有機器
    1. 運行docker-machine ls確保你串連到myvm1上。如果出現ip地址對應的cert不對應,則重新運行命令產生cert,docker-machine regenerate-certs $(docker-machine ls -q)

2. 如有必要運行 eval \$(docker-machine env myvm1)

  1. 在蜂窩管理器上重新運行 docker stack deploy
docker stack deploy -c docker-compose-yml getstartedlab

部署完成後查看服務:

訪問可視化服務:

可以看到兩個服務:visualizer和web均已經啟動,且web服務的副本數量為5,分布為:

  • myvm1*1
  • myvm2*2
  • myvm3*2

也可以使用docker命令查看:

docker stack ps getstartedlab

持久化資料

到現在為止,我們的web服務中依賴的redis服務還沒有配置。

  1. 修改docker-compose檔案,增加redis服務
version: "3"services:  web:    # replace username/repo:tag with your name and image details    image: dockerjie/get-started:part2    deploy:      replicas: 5      resources:        limits:          cpus: "0.1"          memory: 50M      restart_policy:        condition: on-failure    ports:      - "4000:80"    networks:      - webnet  visualizer:    image: dockersamples/visualizer:stable    ports:      - "8080:8080"    volumes:      - "/var/run/docker.sock:/var/run/docker.sock"    deploy:      placement:        constraints: [node.role == manager]    networks:      - webnet    redis:    image: redis    ports:      - "6379:6379"    volumes:      - "/home/docker/data:/data"    deploy:      placement:        constraints: [node.role == manager]    command: redis-server --appendonly yes    networks:      - webnetnetworks:  webnet:

redis有官方的鏡像,因此具有一個short name redis。6379是redis容器預先配置的連接埠,需要對外暴露的,我們也暴露這個連接埠給宿主機。有兩個額外的配置只得注意:

  • redis一直運行在manager上,因此它一直運行在相同的檔案系統上,因為是同一個宿主機。
  • redis訪問宿主機上的檔案夾作為/data目錄,redis將資料存放區到這裡。

redis需要持久化資料到容器裡的/data目錄,而容器啟動, 停止後,裡面的資料都沒有了。因此為了持久化資料,需要將容器的某些目錄映射到宿主機上,這樣資料才會被真正的持久化。

  1. 在manager宿主機上建立data目錄
docker-machine ssh myvm1 "mkdir ./data"
  1. 部署
docker stack deploy -c docker-compose.yml getstartedlab

查看瀏覽器驗證:

查看持久化生效:

Docker Get Started V

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.