【问题标题】:Dockerizing a Web ApplicationDocker 化 Web 应用程序
【发布时间】:2017-12-06 05:07:29
【问题描述】:

我是这个容器化的新手,我想知道 Docker 如何替代虚拟机?

我得到了一个案例研究,其中有 2 个虚拟机,每个都充当虚拟服务器,一个是开发服务器,另一个是测试服务器,我被要求研究 Docker 如何帮助有效地管理工作流程.

在这种情况下,两个虚拟机是服务器,Docker 替换虚拟机的想法让我感到困惑。

谁能帮我理解这个概念。

提前致谢!!

【问题讨论】:

    标签: docker dockerfile devops docker-machine


    【解决方案1】:

    我不确定如何将服务器完全替换为 docker 容器,因此我假设您要将在 2 个服务器中运行的 2 个应用程序替换为 1 个服务器,该服务器运行每个测试和开发应用程序的 2 个容器。

    在我回答之前,我将做一些假设。

    • 首先我要假设,您的应用程序是一个简单的 Web 服务,已部署在服务器中的 tomcat/IBM websphere 上。
    • 其次,我假设测试服务器和开发服务器的数据库位于不同的服务器上。

    Docker 基础知识

    1. Dockerfile - 使用命令 docker build,可以创建镜像
    2. Docker 镜像 - 这是从 dockerfile 创建的
    3. Docker 容器 - 当您对映像执行 docker 运行时,会创建一个容器。正在运行的图像实例就是您的容器
    4. Docker Registry - 可以下载基础镜像的地方 就这样吧,

    5. 在 unix 服务器上设置 docker。

    6. 现在您需要创建 2 个容器来托管相同的应用程序。为此,您首先需要编写一个 dockerfile,创建一个镜像,然后使用该镜像启动容器。

    示例 dockerfile 如下所示

    FROM webspher-liberty17:webProfile7
    
    ENV SERVER_NAME=myapptestserver
    
    RUN ["/bin/bash", "-c", "/opt/ibm/wlp/bin/server create $SERVER_NAME"]
    
    EXPOSE 9080 9443
    
    
    COPY server.xml jvm.options /opt/ibm/wlp/usr/servers/$SERVER_NAME/
    COPY *.war /opt/ibm/wlp/usr/servers/$SERVER_NAME/dropins/
    
    CMD ["/opt/ibm/docker/docker-server", "run", "myapptestserver"]
    

    现在,当您对此 docker 文件进行 docker 构建时,它将创建一个基础层为 ibm liberty 的映像。 FROM 之后的每个命令都允许您添加额外的层,因此您可以根据自己的具体情况进行自定义。

    当您为您的两个应用完成上述操作后,实际上您的应用的两个变体在同一台服务器上运行,但服务于两个不同的环境。

    最好的部分,将它添加到竹子/詹金斯中的 CI/CD 管道中,您可以快速启动和关闭环境。

    【讨论】:

    • 如果这是您寻求的方向,我们将很乐意为您提供帮助并回答您的问题。
    • 这对我来说很清楚。谢谢。这是否意味着我不再需要有专用于测试环境的虚拟服务器?
    • 这是肯定的,因为底层服务器已经相应地增加了磁盘空间和 RAM。请注意,基础 Docker 图像可能非常大,并且在其之上的层也会添加到其中。另外,请记住,上面的答案是假设只有一个应用程序在两台服务器上运行。为每个应用程序专用一个 docker 容器是一个很好的做法。
    【解决方案2】:
    • 每个 docker 容器本身都充当虚拟机,这意味着每个 拥有自己操作系统的容器将进程与主机隔离开来。

      因此,如果您启动 2 个容器意味着您将运行 2 个 ubuntu(对于 例如)服务器。在每个容器中,您可以运行您的软件并公开 对外服务。

      如果最终 docker 死了,您可以从映像重新启动,而无需 安装操作系统,与虚拟机不同的应用程序。

      您可以将 docker 镜像传输到其他服务器,就像 导入/导出您的应用程序,唯一的要求是其他 服务器正在运行 docker 服务。

    • 如果有 2 个依赖服务作为容器运行,我们可以 链接这些容器以进行内部通信。就像 wordpress 一样 容器和 mysql 与其他两者都应该连接的地方一样,它 这种情况下 docker link 将有助于互连。

      您可以像管理 docker 容器的 CPU、内存、磁盘一样 任何管理程序中的虚拟机。

      详细信息: https://docs.docker.com/engine/docker-overview/#docker-engine

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多