我正在使用 Windows 并安装了 boot2docker。我已经从 docker hub 下载了图像并运行了基本命令。但是我如何将现有的应用程序放在我的本地机器上(为了简单起见,我们只说它有一个文件index.php
)。我如何将其放入 docker 映像并运行它?
4 回答
假设您有以下现有 python2 应用程序“hello.py”,其内容如下:
print "hello"
您必须执行以下操作来 dockerize 这个应用程序:
创建一个您想要存储 Dockerfile 的文件夹。
创建一个名为“Dockerfile”的文件
Dockerfile 由几个部分组成,您必须按如下所述定义:
像 VM 一样,映像具有操作系统。在这个例子中,我使用的是 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
终端中的输出喊叫“你好”。
这是第一次开始。当您将 Docker 用于 Web 应用程序时,您必须配置端口等。
您的 index.php 并不是真正的应用程序。该应用程序是您的 Apache 或 nginx 甚至是 PHP 自己的服务器。
因为 Docker 使用 Windows 核心中不可用的功能,所以您在实际的虚拟机中运行它。这样做的唯一目的是为您的真实服务器环境训练或准备图像。
对于 Docker,您需要了解两个主要概念:图像和容器。
图像是由层组成的模板。每一层只包含上一层的差异和一些离线系统信息。每一层实际上都是一个图像。您应该始终使用Dockerfile中的 FROM 指令从现有基础制作图像(编辑时的参考文档。Jan Vladimir Mostert 的链接现在是 404)。
容器是已运行或当前正在运行的映像实例。创建容器(也就是运行镜像)时,您可以将内部目录从容器映射到外部。如果两个位置都有文件,则外部目录会覆盖图像内的文件,但这些文件不会丢失。要恢复它们,您可以将容器提交到映像(最好在停止它之后),然后从新映像启动一个新容器,而不映射该目录。
您需要首先使用 dockerFile 构建一个 docker 映像,您可能会在其上设置 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)
首先,您需要选择一个平台来运行您的应用程序(例如 Ubuntu)。然后安装运行应用程序所需的所有系统工具/库。这可以通过 Dockerfile 来实现。然后,将 Dockerfile 和应用程序推送到 git 或 Bitbucket。稍后,您可以从 github 或 Bitbucket 在 docker hub 中自动构建。本教程的后面部分有更多关于此的内容。如果您了解基本知识,只需快进到 50:00。