这是Docker快速入门系列的第二篇。在将我们的应用程序容器化之前,请阅读第一部分以安装Docker环境。简介我们在开发主机(开发环境)上安装好Docker后,就可以开始开发容器化应用了。通常,我们遵循以下步骤:为应用程序的每个组件创建一个Docker镜像,然后通过镜像运行和测试容器。为Kubernetes写一个dockerstackfile或_YMAL_ 将容器和支持基础结构组装成完整应用程序的文件。测试、共享和部署整个容器化应用程序。在本快速教程中,我们将重点关注第一步:创建容器所基于的图像。准备Dockerfile我们将使用一个docker培训项目示例docker-training/node-bulletin-board,按照以下步骤从Github克隆示例代码(首先需要在环境中安装Git)$gitclone-bv1https://github.com/docker-training/node-bulletin-board$cdnode-bulletin-board/bulletin-board-app/这是一个用node.js编写的简单公告板应用示例代码。现在,我们需要将应用程序容器化。在代码目录下,有一个Dockerfile,它描述了如何为容器封装一个私有文件系统,并包含一些描述容器如何运行的元数据。文件内容如下FROMnode:8.9.4-alpineWORKDIR/usr/src/appCOPYpackage.json.RUNnpminstallCOPY。.CMD["npm","start"]为应用程序编写Dockerfile是容器化应用程序的第一步。您可以将Dockerfile中的命令视为构建映像的分步说明。从现有的基础镜像开始,FROMnode:8.9.4-alpine。此基础图像是官方图像。开始构建时,如果本地没有该镜像,DockerHub会自动拉取该镜像。然后通过WORKDIR命令设置工作目录,之后的所有操作都将以工作目录为准。通过COPY命令,将当前目录下的package.json文件复制到容器当前目录(/usr/src/app/),即/usr/src/app/package.json。 RUN命令是执行相关命令。示例中在/usr/src/app/目录下执行npminstall命令,会根据package.json文件安装应用相关的依赖包。然后将其余代码从主机复制到镜像文件系统。最后一个CMD命令配置了镜像的元数据,描述了使用镜像运行容器时如何启动应用。在这里,npmstart将在容器启动时运行。以上只是一个简单的Dockerfile示例,更多说明请参考官方文档。构建和测试镜像现在我们有了源代码和Dockerfile,我们可以开始构建应用程序的镜像了。首先确保当前目录是_node-bulletin-board/bulletin-board-app/_,使用以下命令构建图像$dockerimagebuild-tbulletinboard:1.0。您将看到Docker根据Dockerfile中的说明进行构建。构建成功后,可以通过以下命令查看构建好的镜像$dockerimagelsbulletinboard1.0866d1f004027大约一分钟前82.3MB我们通过-t选项指定了镜像的名称和标签。命令末尾有一个。表示构建的上下文是当前目录,会在当前目录下查找Dockerfile。启动一个基于镜像的容器dockercontainerrun--namebb--publish8000:8080--detachbulletinboard:1.0该命令会基于镜像bu??lletinboard:1.0启动一个容器实例,我们使用如下命令选项--name:container命名为bb,如果不指定,Docker会自动命名容器。--publish:将容器中的8080端口映射到宿主机上的8000端口,即发往宿主机8000端口的流量会转发到容器的8080端口。--detach:Docker在后台运行容器。由于在构建镜像时通过CMD指定了容器启动命令npmstart,因此容器在启动时会自动通过该命令启动应用进程。访问应用由于容器启动后,服务端口映射到宿主机的8000端口,所以我们可以通过浏览器访问http://localhost:8000/来访问应用。验证应用正常运行后,即可删除宿主环境中的容器。$dockercontainerrm--forcebb总结本文以一个简单的node.js应用来说明如何通过Dockerfile将应用容器化,也就是Dependency,你只想将代码封装到容器镜像中,然后运行开发环境上的应用容器通过镜像。 这是容器化应用阶段。构建应用容器后,我们可以将镜像分发到其他运行环境(测试环境、生产环境)进行应用部署。当然,对于一个复杂的应用来说,它可能是由很多服务组件组成的,每个服务都会构建成对应的镜像,部署的时候会运行很多容器,从而形成整个应用,所以我们需要一个容器编排工具(Orchestrator)来自动管理和部署相应的容器服务。
