样例应用程序
对于本教程的剩余部分,我们将使用一个简单的待办项列表管理器运行在Node.js中。如果你不熟悉Node.js,不要担心,不需要实际的Javascript经验。
在这一点上,你的开发团队非常小,并且你们只是开发一款简单的app来证明你的MVP(最小可行产品)。你想展示它是如何工作的,能做什么,而不需要考虑它如何为一个大型团队,多个开发人员工作等等。
获取应用
在我们能运行应用程序之前,我们需要获取应用程序的源码在我们机器上。对于真正的项目,你通常是克隆代码仓库。但是,对于本教程,我们已创建了一个包含ZIP文件的应用程序。 1、下载App内容。你即可以拉取整个项目,或者下载压缩文件并解压出应用程序文件夹。 2、解压后,使用你最喜欢的编辑器打开项目。如果你需要一个编辑器,你可以使用Visual Studio code。你将看到package.json文件和两个字母了(src和spec)。
构建应用程序的容器镜像
为了构建应用,我们需要使用Dockerfile文件。Dockerfile是一个简单的基于文本脚本指令用于创建容器镜像。如果你之前创建过Dockefile,你可能会看到一些缺陷在下面的Dockefile中,但是,别担心,我们将过一遍。
- 创建名为Dockerfile的文件在所在文件夹中,像
package.json,用下面的内容
# syntax=docker/Dockerfile
FROM node:12-alpine
RUN apk add -no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
请检查Dockerfile是否含有.txt的文件后缀,一些编辑器会自动追加此文件扩展名,这会导致下一步出现错误。
2. 如果你还没这样做的话,打开中断,进入到有Dockefile文件的app目录下。现在构建容器镜像使用docker build命令。
$ docker build -t getting-started .
此命令使用Dockerfile构建一个新的容器镜像。你可能注意到有很多“层”被下载了。这是因为我们告诉构建器,我们希望从node:12-alpine镜像开始。但是,由于我们的机器上没有这个镜像,所以需要下载这个镜像。
在镜像被下载后,我们在应用程序中复制,并用yarn来安装应用程序的依赖项。CMD指令指定默认运行命令当从镜像中启动容器。
最后,-t标志标记我们的镜像,可以简单的视为人类可读的镜像名。由于我们将此镜像命名为getting-started,所以我们可以引用此镜像当我们运行容器的时候。
docker build最后的.命令告诉Docker需要在当前目录寻找Dockerfile文件。
运行一个app容器
现在我们有了一个镜像,让我们运行应用程序。为此,我们将使用docker run命令(还记得前面提到的?)。
- 启动容器使用
docker run命令,并指定我们刚刚创建过的镜像名。
$ docker run -dp 3000:3000 getting-started
记得-d和-p标志?我们运行一个新的容器用“分离”模式(后台运行),且创建一个映射从主机3000端口到容器的3000端口。如果没有端口映射,我们将不能访问应用。
2. 几秒钟后,打开浏览器,输入http://localhost:3000。你将看到我们的app。
3. 继续并添加一到两项,看看能否工作像你期望的那样工作。你可将项标记为完整并删除。前端成功的在后端存储项目,又快又简单,对吧?
此时,您应该有一个代办事项管理器,其中包含一些项目,全部有您创建。现在,让我们做些改变并学习如何管理容器。
如果你快速浏览下Docker仪表盘,您将看到两个容器正在运行(本教程和您刚刚新推出的app容器)。
回顾
在这一小部分中,我们学习了基本知识关于构建容器镜像并创建一个Dockerfile来完成此事。一旦我们构建了一个镜像,我们启动容器并能看到运行的应用程序。 接下来,我们将对应用app做些修改,并学习更新一个正在运行的应用程序用新的镜像。在此过程中,我们将学习一些其他有用的命令。