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容器。

图1.3
1、进入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
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所示。










