上一篇,您已经完成了Docker Desktop安装,并启用了Kubernetes,接下来就可容器化部署应用程序了。一般,开发工做流包括以下几点:node
一、首先建立Docker镜像,为应用程序的每一个组件建立和测试单个容器。git
二、将容器和所支持的基础设施组装成一个完整的应用程序,能够用Docker stack file或者Kubernetes的YAML来实现。github
三、测试、共享和部署完整的容器化应用程序。docker
在本篇幅中,咱们将集中于此工做流的步骤1:基于现有的容器来建立镜像。请记住,Docker镜像捕获了容器化进程将在其中运行的私有文件系统;咱们须要建立一个镜像,其中正好包含咱们的应用程序须要运行的内容。shell
容器化开发环境比传统开发环境更容易设置,一旦您学习了如何构建镜像,咱们将在下面讨论。这是由于容器化的开发环境会将应用程序所需的全部依赖项隔离在Docker镜像中;除了Docker以外,不须要在开发计算机上安装任何东西(即开发环境的部署仅依赖于Docker镜像)。这样,您就能够轻松地为不一样的堆栈开发应用程序,而无需更改开发机器上的任何环境。npm
配置json
一、从GitHub克隆用于演示的示例项目。app
git clone -b v1 https://github.com/docker-training/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
这是一个简单的公告板应用程序,用node.js编写。在这个例子中,让咱们假设是您编写了这个应用程序,如今正试图将其容器化部署起来,目录结构如图1.1所示。ide
图1.1学习
查看名字为Dockerfile的文件,Dockerfile文件描述了如何为容器组装私有的文件系统,而且还包含了一些描述如何基于此镜像运行容器的元数据。公告板应用程序Dockerfile如图1.2所示。
图1.2
容器化部署应用程序的第一步是编写Dockerfile。您能够把这些Dockerfile命令看成是一个建立镜象的步骤。这个步骤以下:
一、使用版本号6.11.5的镜像做为本次构建的基础镜像。6.11.5基础镜像是由node.js官方提供的镜像
二、指定镜像文件系统的工做目录为/usr/src/app,即每次登陆基于该镜像建立的容器,目录会自动切换到/usr/src/app
三、将package.json文件复制到镜像的当前位置,即/usr/src/app/package.json
四、在镜像文件系统中运行npm install命令(它将读取package.json以肯定应用程序的节点依赖关系,并安装它们)
五、将应用程序的其他源代码从主机复制到镜像中。
您能够看到,这些步骤与您在主机上设置和安装应用程序时可能采起的步骤大体相同,但使用Dockerfile容许咱们在一个可移植、独立的Docker镜像(node.js官方镜像)再次构建。
上面的步骤为镜像构建了文件系统,可是Dockerfile中还有一行,CMD命令行。CMD ["要运行的程序","参数1","参数2"] 是告诉容器启动时要运行的命令或脚本,Dockerfile中命令告知此镜像要支持的容器化进程是npm start。
注意:Dockerfile只能有一条CMD命令,若是有多条,则执行最后一条。
一个Dockerfile始终是从FROM命令开始,上述是一个简单的Dockerfile文件,还有更多的Dockerfile指令,请参阅Dockerfile reference(https://docs.docker.com/engine/reference/builder/)。
构建镜像并测试
如今咱们有了源代码和Dockerfile,是时候构建咱们的第一个镜像了,并确保从该镜像启动的容器能按预期工做。
注意:本示例使用的是Linux容器。使用Docker Desktop的用户,右键单击系统托盘中的Docker徽标,确保您的环境正在运行Linux容器,若不是,请点击“Switch to Linux containers...",如图1.3所示,我当前演示环境使用的已经是Linux容器。
图1.3
一、进入Powershell,并确保您当前目录是node-bulletin-board/bulletin-board-app,如图1.4所示,执行命令
# docker image build -t bulletinboard:1.0 .
图1.4
在构建最后会输出以下字样,表示构建镜像成功。
Successfully built 49f9b9fb7daf
Successfully tagged bulletinboard:1.0
上述命令表是建立一个名为bulletinboard的镜像(image),tag为1.0,如图1.5所示。
图1.5
二、基于bulletinboard镜像运行一个名为bb的容器并之后台方式运行,将容器内部端口8080,映射到宿主机的8000端口上。
# docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0
咱们可使用以下命令来查看run指命后能够跟哪些参数
# docker container run --help
咱们登陆到容器,查看到当前目录就是Dockerfile中设置的工做目录,如图1.6所示。
图1.6
三、经过http://localhost:8000来访问您的应用,您将看到以下界面,如图1.7所示,则表示应用容器化部署成功,接下来就是进行测试、构建、发布、分享等过程。
图1.7
四、删除一个容器,即表示该容器的生命周期结束。
# docker container rm --force bb
总结
完成上述操做后,咱们已经可以对应用程序执行一个简单的容器化,并确认咱们的应用程序在其容器中成功运行。下一步将是编写Kubernetes 的yaml文件,描述如何在Kubernetes上运行和管理容器。
另外,咱们应该要增强练习使用Dockerfile构建镜像。