docker 入門6 - 部署 【翻譯】

開始,第 6 部分:部署應用

先決條件

  • 安裝 Docker。node

  • 獲取第 3 部分先決條件中所述的 Docker Compose。web

  • 獲取 Docker Machine,如第 4 部分先決條件中所述。redis

  • 閱讀第 1 部分中的方向。docker

  • 瞭解如何在第 2 部分中建立容器。windows

  • 確保經過將friendlyhello鏡像推送到註冊表來發布您建立的friendlyhello鏡像。咱們在這裏那個使用共享鏡像。瀏覽器

  • 確保鏡像用做於已部署的容器。運行此命令,在信息中鍵入usernamerepo, 和 tag:docker run -p 80:80 username/repo:tag,而後訪問http://localhost/服務器

  • 獲取第 5 部分的 docker-compose.yml 的最終版本。 網絡

介紹

您一直在爲整個教程編輯相同的Compose文件。咱們有好消息,該Compose文件在生產環境中的工做方式與在您的計算機上同樣好。在本節中,咱們將介紹運行 Dockerized 應用程序的一些選項。ssh

Docker Enterprise

Docker Enterprise 企業版的客戶運行了穩定、商業支持的 Docker Engine版本,做爲附加組件,他們獲得了咱們一流的管理軟件 ,Docker 數據中心。您可使用通用控制面板(Universal Control Plane)的界面管理應用程序的各個方面,使用 Docker 可信registry運行專用鏡像Registry,與 LDAP 提供程序集成,使用 Docker 內容信任對生產環境鏡像進行簽名,以及許多其餘特徵。tcp

將您本身的服務器引入 Docker Enterprise並設置 Docker 數據中心實際上須要兩個步驟:

  1. 從 Docker 中心獲取服務器操做系統的 Docker 企業版。
  2. 按照說明在您本身的主機上安裝 Docker 企業版。

注意:正在運行 Windows 容器?查看咱們的 Windows 服務器設置指南

完成全部設置並運行 Docker 企業版後,能夠直接在 UI 中部署Compose文件。

以後,您能夠看到它正在運行,而且能夠更改您選擇的應用程序的任何方面,甚至編輯Compose文件自己。

Docker Engine - Community

安裝 Docker Engine --- Community

在您選擇的平臺上查找 Docker Engine---Community的安裝說明。

建立您的swarm

運行 docker swarm init 在節點上建立一個swarm。

部署應用

運行 docker stack deploy -c docker-compose.yml getstartedlab ,將應用部署在雲託管swarm上。

 
docker stack deploy -c docker-compose.yml getstartedlab

Creating network getstartedlab_webnet
Creating service getstartedlab_web
Creating service getstartedlab_visualizer
Creating service getstartedlab_redis

 

你的應用如今在雲提供商上運行。

運行一些命令來驗證部署

您可使用swarm命令行(正如您所作的那樣)來瀏覽和管理swarm。下面是一些如今應該看起來熟悉的示例:

  • 使用 docker node ls 列出羣中的節點。

     
    [getstartedlab] ~ $ docker node ls
    ID                            HOSTNAME                                      STATUS              AVAILABILITY        MANAGER STATUS
    n2bsny0r2b8fey6013kwnom3m *   ip-172-31-20-217.us-west-1.compute.internal   Ready               Active              Leader

     

  • 使用 docker service ls 列出服務。

     
    [getstartedlab] ~/sandbox/getstart $ docker service ls
    ID                  NAME                       MODE                REPLICAS            IMAGE                             PORTS
    ioipby1vcxzm        getstartedlab_redis        replicated          0/1                 redis:latest                      *:6379->6379/tcp
    u5cxv7ppv5o0        getstartedlab_visualizer   replicated          0/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
    vy7n2piyqrtr        getstartedlab_web          replicated          5/5                 sam/getstarted:part6    *:80->80/tcp

     

  • 使用 docker service ps <service> 查看服務的任務。

     
    [getstartedlab] ~/sandbox/getstart $ docker service ps vy7n2piyqrtr
    ID                  NAME                  IMAGE                            NODE                                          DESIRED STATE       CURRENT STATE            ERROR               PORTS
    qrcd4a9lvjel        getstartedlab_web.1   sam/getstarted:part6   ip-172-31-20-217.us-west-1.compute.internal   Running             Running 20 seconds ago                       
    sknya8t4m51u        getstartedlab_web.2   sam/getstarted:part6   ip-172-31-20-217.us-west-1.compute.internal   Running             Running 17 seconds ago                       
    ia730lfnrslg        getstartedlab_web.3   sam/getstarted:part6   ip-172-31-20-217.us-west-1.compute.internal   Running             Running 21 seconds ago                       
    1edaa97h9u4k        getstartedlab_web.4   sam/getstarted:part6   ip-172-31-20-217.us-west-1.compute.internal   Running             Running 21 seconds ago                       
    uh64ez6ahuew        getstartedlab_web.5   sam/getstarted:part6   ip-172-31-20-217.us-west-1.compute.internal   Running             Running 22 seconds ago        

     

在雲提供商計算機上打開到服務的端口

此時,你的應用將做爲swarm部署在雲提供商服務器上,您剛剛運行的 docker 命令就證實了這一點。可是,您仍然須要打開雲服務器上的端口,以便:

  • 若是使用多個節點,則容許 redis 服務和 Web 服務之間的通訊

  • 容許任何輔助節點上的 Web 服務入站流量,以便從 Web 瀏覽器訪問 Hello World 和Visualizer。

  • 容許在運行manager的服務器上的入站 SSH 流量(這可能已在雲提供商上設置)

如下是您須要爲每一個服務公開的端口:

Service Type Protocol Port
web HTTP TCP 80
visualizer HTTP TCP 8080
redis TCP TCP 6379

執行此操做的方法因雲提供商而異。

咱們以亞馬遜網絡服務 (AWS) 爲例。

用於保留數據的 redis 服務如何?

要使 redis 服務正常工做,您須要在運行 docker stack deploy以前,將 ssh 到運行manager的雲服務器中,並在 /home/docker/ 中建立data/目錄。另外一個選項是將 docker-stack.yml 中的數據路徑更改成manager服務器上的預先存在的路徑。此示例不包括此步驟,所以在示例輸出中未啓動 redis 服務。

迭代和清理

從這裏,你能夠作你學到的一切在本教程的前一部分。

  • 經過更改 docker-compose.yml 文件,使用 docker stack deploy命令動態從新部署應用來擴展應用。

  • 經過編輯代碼更改應用行爲,而後從新生成並推送新鏡像。(爲此,請按照以前爲構建應用和發佈鏡像所執行的相同步驟進行操做)。

  • 您可使用 docker stack rm 拆解stack。例如:

     
    docker stack rm getstartedlab

     

與在本地 Docker machine VM 上運行swarm的狀況不一樣,不管是否關閉本地主機,您的swarm及其上部署的任何應用都會在雲服務器上繼續運行。

祝賀!

您對整個 Docker 平臺進行了全堆棧,開發到部署的瀏覽。

Docker 平臺的內容遠不止此處介紹的內容,但您對容器、鏡像、服務、swarm、stack、縮放、負載平衡、volume和placement constraints等基礎知識有了很好的瞭解。

想深刻一點嗎?如下是一些建議的資源:

  • 示例:咱們的示例包括多個在容器中運行的經常使用軟件示例,以及一些教授最佳實踐的良好實驗室。

  • 用戶指南:用戶指南有幾個示例,這些示例對網絡和存儲的解釋比此處介紹的要深刻。

  • 管理員指南:介紹如何管理 Docker 實現的生產環境。

  • 培訓:提供面對面指導和虛擬課堂環境的官方 Docker 課程。

  • 博客:介紹 Docker 最近發生的狀況。

相關文章
相關標籤/搜索