如何将现有应用程序docker化...基础知识

8

我使用的是Windows,并安装了Boot2docker。我已经从Docker Hub下载了镜像并运行了基本命令。但是,如果我想将存储在本地计算机上的现有应用程序(假定它只有一个文件index.php)放入Docker镜像中并运行它,我该怎么办呢?

4个回答

13
假设您有如下现有的python2应用程序"hello.py",其内容如下:
print "hello"

要将此应用程序docker化,您需要执行以下操作:

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

创建名为“Dockerfile”的文件。

Dockerfile由几个部分组成,您需要按照以下描述定义它们:

与虚拟机一样,镜像也有操作系统。在此示例中,我使用ubuntu 16.04。因此,Dockerfile 的第一部分如下:

FROM ubuntu:16.04

想象一下,你有一个全新的Ubuntu虚拟机,现在你需要安装一些东西才能让你的应用程序工作,对吧?这是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应用程序开发时,需要配置端口等内容。


9

您的 index.php 实际上不是一个应用程序。应用程序是您的 Apache 或 Nginx,甚至是 PHP 自己的服务器。

由于 Docker 使用了 Windows 核心中不可用的功能,因此您正在实际虚拟机内运行它。唯一的目的是为您的实际服务器环境培训或准备镜像。

Docker 的两个主要概念是:镜像和容器。

镜像 是由层组成的模板。每个层都只包含前一层和某些离线系统信息之间的差异。每个层其实就是一个镜像。您应该使用 Dockerfile 中的 FROM 指令从现有基础构建您的镜像(参考文档)。

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


2
我对这个答案有些犹豫。当然,file index.php本身并不是一个应用程序,但是可以从index.php启动的整个东西确实可以是一个应用程序。我的意思是,基于浏览器的CRM与它们的桌面版本一样都是完整的应用程序。 - Félix Adriyel Gagnon-Grenier

2
您需要先使用DockerFile构建一个Docker镜像,可能会在其中设置Apache,并告诉DockerFile将您的index.php文件复制到您的Apache并公开端口。
请参见http://docs.docker.com/reference/builder/ 请参见我的另一个问题,其中包含一个Docker文件示例:切换Docker镜像内非root用户(这是为了将.war文件复制到tomcat中,与将.php文件复制到apache类似)

0

首先,您需要选择一个平台来运行您的应用程序(例如Ubuntu)。然后安装运行应用程序所需的所有系统工具/库。这可以通过Dockerfile实现。然后,将Dockerfile和应用程序推送到git或Bitbucket。稍后,您可以从github或Bitbucket自动构建docker hub。本教程的后半部分在此处有更多相关内容。如果您已经了解基础知识,可以直接跳到50:00。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接