Docker 入门 第六部分:部署app

先决条件

  • 安装 Docker 1.13 或更高版本
  • 按照第三部分中的描述安装Docker Compose
  • 按照第四部分中描述安装了Docker Machine
  • 阅读第一部分
  • 第二部分中学习如何创建容器
  • 确保你已经将创建的 friendlyhello 镜像发布到registry。我们会在这里用到这个镜像
  • 确保你的镜像已经作为容器被部署运行,运行这个命令,在你的信息中加入username, repo, 和 tag: docker run -p 80:80 username/repo:tag, 然后查看 http://localhost/
  • 第五部分获取docker-compose.yml最终版本.

介绍

现在我们已经为整个教程编辑了Compose文件。这里有好消息,Compose文件在生产环境中的产生的效果和在你计算机上产生的效果是一样的。在这里,我们会介绍一些运行容器化应用的选项。

选择一个选项

Docker CE(Cloud provider)

如果你在生产环境中使用Docker社区办用的很好,你可以使用Docker Cloud来帮助你管理在流行服务提供商(例如Amazon Web Services、DigitalOcean 或者 Microsoft Azure)上的app,

设置和部署:

  • 将你首选的提供商链接到Docker云,授权Docker Cloud自动为你配置和“Dockerize”VM的权限。
  • 使用Docker Cloud创建你的计算资源和swarm
  • 部署你的app

注意: 这里我们不会链接到Docker Cloud文档,完成每个步骤后,请确保重新返回这个页面。

链接Docker Cloud

你可以在标准模式或者Swaram模式中运行Docker Cloud。

如果你在标准模式中运行Docker Cloud,请遵照下面的步骤将你的服务提供商河Docker Cloud链接起来。

如果你运行在Swarm模式中(推荐使用Amazon Web Service 或者Microsoft Azure),请跳到下一节有关如何创建swarm。

创建 swarm

准备创建swarm:

注意:如果你使用Docker Cloud Agent来带动你自己的主机,则这种方式不支持集群模式。你可以在Docker Cloud 中注册自己已存在的swarm

在云提供商上部署你的应用

  1. 通过Docker Cloud链接你自己的swarm。有几种不同的连接方式:

    • 在Swarm模式的Docker Cloud web界面,选择页面顶部的Swarms,点击你想要连接的swarm,然后将给定的命令复制粘贴到命令行终端。

    • 在Docker for Mac 或者Docker for Windows上,你可以通过桌面应用菜单直接连接到你的swarm上

    • 无论哪种方式,都会打开一个上下文是你的本地机器的终端,但其docker命令会被路由到你的云服务提供商上的swarm上。你可以直接连接本地文件系统和远程swarm,从而使用docker 命令。
  2. 运行 docker stack deploy -c docker-compose.yml getstartedlab 在云托管的swarm上部署app

     docker stack deploy -c docker-compose.yml getstartedlab
    
     Creating network getstartedlab_webnet
    Creating service getstartedlab_web
    Creating service getstartedlab_visualizer
    Creating service getstartedlab_redis

    现在你的app就运行在云上了。

运行一些swarm命令来验证部署

你可以像使用swarm命令行一样浏览和管理swarm。这里会有一些看起来看熟悉的例子:

  • 使用 docker node ls列出节点。

    [getstartedlab] ~ $ docker node ls
    ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
    9442yi1zie2l34lj01frj3lsn ip-172-31-5-208.us-west-1.compute.internal Ready Active
    jr02vg153pfx6jr0j66624e8a ip-172-31-6-237.us-west-1.compute.internal Ready Active
    thpgwmoz3qefdvfzp7d9wzfvi ip-172-31-18-121.us-west-1.compute.internal Ready Active
    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
    x3jyx6uukog9 dockercloud-server-proxy global 1/1 dockercloud/server-proxy *:2376->2376/tcp
    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-5-208.us-west-1.compute.internal Running Running 20 seconds ago
    sknya8t4m51u getstartedlab_web.2 sam/getstarted:part6 ip-172-31-6-237.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-18-121.us-west-1.compute.internal Running Running 21 seconds ago
    uh64ez6ahuew getstartedlab_web.5 sam/getstarted:part6 ip-172-31-18-121.us-west-1.compute.internal Running Running 22 seconds ago
在云主机上开放服务

现在,你的app作为一个swarm部署在云服务器上,就像刚刚运行docker命令验证的那样。但你还需要开放端口来实现下面的内容:

  • 允许工作节点上的redis服务和web服务可以进行通信
  • 允许工作节点上的web服务可以入站访问,以便可以通过web浏览器可以访问Hello world 和 Visualizer。
  • 允许服务器上的SSH入站访问,以便运行manager(这可能已经在你的云服务商设置了)

下面是每个服务你需要开放的端口

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

表1

执行该操作的方法因与服务商的不同而不同。

这里我们使用Amazon Web Service(AWS)来举例。

如何使用redis来存储数据

要是redis正常工作,你需要ssh连接到运行了manager的云服务器,在运行docker stack deploy 之前先在 /home/docker/ 创建 data/ 目录。另外一个方法是将docker-stack.yml文件中的数据路径更改为manager服务器上预先存在的路径。这里的例子不包含该步骤,因此示例输出中的redis服务没有运行。

示例:AWS
  1. 登陆AWS控制台,进入EC2面板,并点击进入Running Instances 来查看节点。

  2. 在左侧菜单里找到Network & Security > Security Groups

    查看关联到你的swarm的security groups,,getstartedlab-Manager-<XXX>getstartedlab-Nodes-<XXX>getstartedlab-SwarmWide-<XXX>

  3. 选择swarm的“Node”安全组,安全组的名字类似:getstartedlab-NodeVpcSG-9HV9SMHDZT8C

  4. 为 web、visualizer 和 redis 服务添加入站规则,为上面表格(表1)的每一行内容都设置类型、协议和端口,点击保存这些规则。

    提示: 当你保存新规则时,HTTP 和TCP端口会在IPv4和IPv6地址上自动创建。

  5. 返回Running Instances列表,获取其中一个worker的公共DNS名称,并粘贴到浏览器地址栏。



    与教程的前几部分一样, HelloWorld app会显示在80端口,Visualizer显示在8080端口



迭代和清理

从这里开始,你可以做之前部分教程中学到的所有事情,

  • 通过修改docker-compose.yml文件来扩展app,使用docker stack deploy命令来及时更新部署。
  • 通过修改代码来更改app行为,然后重建,并推送新的镜像。(要这样做,需要按照前面学习的构建app和发布镜像相同的步骤来实现)。
  • 你可以使用docker stack rm来删除stack,例如:
docker stack getstartedlab

与在本地docker机器上运行swarm不同,无论你是否关闭本地主机,你的swarm 和 其上的app都可以继续运行在云服务器上。

Enterprise(Cloud provider)这里不做介绍

Enterprise(On-premise)这了不做介绍

Docker 入门 第六部分:部署app的更多相关文章

  1. Docker入门(六):Stacks

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  2. Docker入门(七):部署app

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  3. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  4. docker入门与部署微服务--学习笔记

    最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...

  5. Docker入门(三):容器(Containers)

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  6. Docker入门学习

    Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...

  7. 【转载】大白话Docker入门(二)

    原文:https://yq.aliyun.com/articles/63517?spm=a2c4e.11153940.blogcont63035.15.12011c3fddklk0 上篇的大白话Doc ...

  8. 这可能是最为详细的Docker入门吐血总结

    这可能是最为详细的Docker入门吐血总结  https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...

  9. Docker 入门 第五部分:Stacks

    目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ...

随机推荐

  1. Oracle 通过触发器实现ID自增

    Oracle不像Mysql,SQLServer能够直接设置ID自增,但是可以通过触发器实现ID自增. 1 创建测试表 create table t_goods(id number primary ke ...

  2. CS、IP和PC寄存器

    CS寄存器和IP寄存器: 首先强调一下,这两个寄存器非常非常重要,CS的全拼为“Code segment”,即代码段寄存器,对应于内存中的存放代码的内存区域,用来存放内存代码段区域的入口地址(段基址) ...

  3. hive存储、数据模型、内部表

    创建内部表 加一列元素 删除表

  4. 周刷题第二期总结(Longest Substring Without Repeating Characters and Median of Two Sorted Arrays)

    这周前面刷题倒是蛮开心,后面出了很多别的事情和问题就去忙其他的,结果又只完成了最低目标. Lonest Substring Without Repeating Characters: Given a ...

  5. Linux、Debian、Jenkins、GIT、Nginx、码云安装,自动化部署前后端分离项目

    1.安装Jenkins i:下载Jenkins安装包(war文件):https://jenkins.io/download/ ii:这里采用Tomcat的war包方式安装,讲下载好的安装包放到Tomc ...

  6. maven 聚合的含义是父类打包 ,清理等 则子类自动打包;也就是一键打包 方便服务

    maven 聚合的含义是父类打包 ,清理等 则子类自动打包:也就是一键打包 方便服务

  7. Intel处理器缺货将会持续到2019年第二季度!

    虽然Intel一再承诺加大投资.扩充产能,但一个不争的事实是,Intel处理器仍然都处于大面积紧张的缺货状态中,毕竟10nm迟迟无法规模量产,14nm上拥挤了太多产品线. 按照华硕CEO沈振来的最新说 ...

  8. BZOJ2822[AHOI2012]树屋阶梯——卡特兰数+高精度

    题目描述 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为N+1尺(N为 ...

  9. linux screen 命令 :离线运行程序

    screen工具是linux下虚拟终端的一个常用工具.在 发现这个工具之前,笔者经常在远程ssh中运行需要长时间处理数据的命令,比如远程编译安装软件,如果在编译的过程中网络断开,那这个编译进程就会停止 ...

  10. [CF1132F]Clear the String

    题意 给你一个串s,每次可以花费1的代价删去一个子串,要求子串的每一位为同一个字符. 求删去整个串的最小代价. 分析 这是一道非常简单的区间\(DP\)问题,我们定义\(f[i][j]\)表示删去子串 ...