【问题标题】:How do I dockerize an existing application...the basics如何对接现有应用程序...基础知识
【发布时间】:2014-08-25 18:37:16
【问题描述】:

我正在使用 Windows 并安装了 boot2docker。我已经从 docker hub 下载了图像并运行了基本命令。但 如何将现有应用程序放在本地计算机上(为了简单起见,我们只说它有一个文件index.php)。如何将其放入 docker 映像并运行它?

【问题讨论】:

    标签: docker boot2docker


    【解决方案1】:

    假设您有以下现有 python2 应用程序“hello.py”,其内容如下:

    print "hello"
    

    你必须做以下事情来码头化这个应用程序:

    创建一个您想要存储 Dockerfile 的文件夹。

    创建一个名为“Dockerfile”的文件

    Dockerfile 由几个部分组成,您必须按如下所述定义:

    像虚拟机一样,映像也有操作系统。在这个例子中,我使用的是 ubuntu 16.04。因此,Dockerfile 的第一部分是:

    FROM ubuntu:16.04
    

    假设您有一个全新的 Ubuntu - VM,现在您必须安装一些东西才能让您的应用程序正常工作,对吗?这是由 Dockerfile 的下一部分完成的:

    RUN     apt-get update && \ 
            apt-get upgrade -y && \
            apt-get install -y python
    

    对于 Docker,您现在必须在映像中创建一个工作目录。您稍后要执行以启动应用程序的命令将在此目录中搜索文件(如我们的示例中的 python 文件)。因此,Dockerfile 的下一部分创建了一个目录并将其定义为工作目录:

    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app
    

    下一步,您将存储 Dockerfile 的文件夹的内容复制到映像中。在我们的示例中,将 hello.py 文件复制到我们在上一步中创建的目录中。

    COPY . /usr/src/app
    

    最后,下面一行在你的镜像中执行命令“python hello.py”:

    CMD [ "python", "hello.py" ]
    

    完整的 Dockerfile 如下所示:

    FROM ubuntu:16.04
    
    RUN     apt-get update && \
            apt-get upgrade -y && \
            apt-get install -y python 
    
    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app
    
    COPY . /usr/src/app
    
    CMD [ "python", "hello.py" ]
    

    在终端输入保存文件并构建镜像:

    $ docker build -t hello .
    

    这需要一些时间。然后,检查我们在上一行调用它的图像“hello”是否构建成功:

    $ docker images
    

    运行镜像:

    docker run hello
    

    在终端中输出“hello”。

    这是第一次开始。当你使用 Docker 做 web 应用时,你必须配置端口等。

    【讨论】:

      【解决方案2】:

      您的 index.php 并不是真正的应用程序。该应用程序是您的 Apache 或 nginx 甚至是 PHP 自己的服务器。

      因为 Docker 使用 Windows 核心中不可用的功能,所以您在实际的虚拟机中运行它。这样做的唯一目的是为您的真实服务器环境训练或准备图像。

      您需要了解 Docker 的两个主要概念:图像和容器。

      图像是由层组成的模板。每一层只包含上一层的差异和一些离线系统信息。每一层实际上都是一个图像。您应该始终使用 Dockerfile 中的 FROM 指令(Reference docs at time of edit。Jan Vladimir Mostert 的链接现在是 404)从现有基础制作映像。

      容器是图像的一个实例,已经运行或正在运行。创建容器(也就是运行镜像)时,您可以将内部目录从容器映射到外部。如果两个位置都有文件,则外部目录会覆盖图像内的文件,但这些文件不会丢失。要恢复它们,您可以提交一个容器到一个映像(最好在停止它之后),然后从新映像启动一个新容器,而不映射该目录。

      【讨论】:

      • 我……对这个答案犹豫不决。当然,文件 index.php 本身并不是一个应用程序,但是从一个index.php 启动的整个东西确实可以是一个应用程序。我的意思是,基于浏览器的 CRM 是成熟的应用程序,与其桌面应用程序一样多。
      【解决方案3】:

      您需要先构建一个 docker 镜像,使用 dockerFile,您可能会在其上设置 apache,告诉 dockerFile 将您的 index.php 文件复制到您的 apache 中并公开一个端口。

      http://docs.docker.com/reference/builder/

      有关 docker 文件的示例,请参阅我的其他问题: Switching users inside Docker image to a non-root user(这是为了将 .war 文件复制到 tomcat 中,类似于将 .php 文件复制到 apache 中)

      【讨论】:

        【解决方案4】:

        首先,您需要选择一个平台来运行您的应用程序(例如,Ubuntu)。然后安装运行应用程序所需的所有系统工具/库。这可以通过 Dockerfile 来实现。然后,将 Dockerfile 和应用程序推送到 git 或 Bitbucket。稍后,您可以从 github 或 Bitbucket 在 docker hub 中自动构建。本教程的后面部分here 对此进行了更多说明。如果您了解基本知识,只需快进到 50:00。

        【讨论】:

          猜你喜欢
          • 2015-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-07
          • 2020-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多