DDR爱好者之家 Design By 杰米

上一篇,您已经完成了Docker Desktop安装,并启用了Kubernetes,接下来就可容器化部署应用程序了。通常,开发工作流包括如下几点:

1、首先创建Docker镜像,为应用程序的每个组件创建和测试单个容器。

2、将容器和所支持的基础设施组装成一个完整的应用程序,可以用Docker stack file或者Kubernetes的YAML来实现。

3、测试、共享和部署完整的容器化应用程序。

在本篇幅中,我们将集中于此工作流的步骤1:基于现有的容器来创建镜像。请记住,Docker镜像捕获了容器化进程将在其中运行的私有文件系统;我们需要创建一个镜像,其中正好包含我们的应用程序需要运行的内容。

容器化开发环境比传统开发环境更容易设置,一旦您学习了如何构建镜像,我们将在下面讨论。这是因为容器化的开发环境会将应用程序所需的所有依赖项隔离在Docker镜像中;除了Docker之外,不需要在开发计算机上安装任何东西(即开发环境的部署仅依赖于Docker镜像)。这样,您就可以轻松地为不同的堆栈开发应用程序,而无需更改开发机器上的任何环境。

配置

1、从GitHub克隆用于演示的示例项目。

git clone -b v1 https://github.com/docker-training/node-bulletin-board
cd node-bulletin-board/bulletin-board-app

这是一个简单的公告板应用程序,用node.js编写。在这个例子中,让我们假设是您编写了这个应用程序,现在正试图将其容器化部署起来,目录结构如图1.1所示。

Docker如何部署您的第一个应用程序

图1.1

查看名字为Dockerfile的文件,Dockerfile文件描述了如何为容器组装私有的文件系统,并且还包含了一些描述如何基于此镜像运行容器的元数据。公告板应用程序Dockerfile如图1.2所示。

Docker如何部署您的第一个应用程序

图1.2

容器化部署应用程序的第一步是编写Dockerfile。您可以把这些Dockerfile命令当作是一个创建镜象的步骤。这个步骤如下:

1、使用版本号6.11.5的镜像作为本次构建的基础镜像。6.11.5基础镜像是由node.js官方提供的镜像

2、指定镜像文件系统的工作目录为/usr/src/app,即每次登录基于该镜像创建的容器,目录会自动切换到/usr/src/app

3、将package.json文件复制到镜像的当前位置,即/usr/src/app/package.json

4、在镜像文件系统中运行npm install命令(它将读取package.json以确定应用程序的节点依赖关系,并安装它们)

5、将应用程序的其余源代码从主机复制到镜像中。

您可以看到,这些步骤与您在主机上设置和安装应用程序时可能采取的步骤大致相同,但使用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容器。

Docker如何部署您的第一个应用程序

图1.3

1、进入Powershell,并确保您当前目录是node-bulletin-board/bulletin-board-app,如图1.4所示,执行命令

# docker image build -t bulletinboard:1.0 .

Docker如何部署您的第一个应用程序

图1.4

在构建最后会输出如下字样,表示构建镜像成功。

Successfully built 49f9b9fb7daf

Successfully tagged bulletinboard:1.0

上述命令表是创建一个名为bulletinboard的镜像(image),tag为1.0,如图1.5所示。

Docker如何部署您的第一个应用程序

图1.5

2、基于bulletinboard镜像运行一个名为bb的容器并以后台方式运行,将容器内部端口8080,映射到宿主机的8000端口上。

# docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0

我们可以使用如下命令来查看run指命后可以跟哪些参数

# docker container run --help

我们登录到容器,查看到当前目录就是Dockerfile中设置的工作目录,如图1.6所示。

Docker如何部署您的第一个应用程序

图1.6

3、通过http://localhost:8000来访问您的应用,您将看到如下界面,如图1.7所示,则表示应用容器化部署成功,接下来就是进行测试、构建、发布、分享等过程。

Docker如何部署您的第一个应用程序

图1.7

4、删除一个容器,即表示该容器的生命周期结束。

# docker container rm --force bb

总结

完成上述操作后,我们已经能够对应用程序执行一个简单的容器化,并确认我们的应用程序在其容器中成功运行。下一步将是编写Kubernetes 的yaml文件,描述如何在Kubernetes上运行和管理容器。

另外,我们应该要加强练习使用Dockerfile构建镜像。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?