续前文,https://blog.csdn.net/swordtraveller/article/details/113717239
如果我们设计好了一套发布node.js接口服务的容器流程,那么如何将其定义为镜像呢?
- 创建一个目录,目录里放所需材料,和Dockerfile文件
data.json
server.js
Dockerfile
- Dockerfile里写:
# Version 0.1.202102051153
FROM node:ea27
MAINTAINER xxx@qq.com
COPY data.json /home/script/data.json
COPY server.js /home/script/server.js
EXPOSE 8080
WORKDIR /home/script
CMD node server.js
由于server.js中读取./data.json的这个.可能指的是node命令运行所在的目录,所以如果在/下node /home/script/server.js,那么server.js会去读取/data.json,是不对的。
应该先切目录(WORKDIR)到/home/script,再在此目录下node server.js,./data.json就是/home/script/data.json了。
COPY后面的/home/script的/data.json不要省略,不然就变成复制data.json为文件script了。
然后目录下执行
docker build -t ImageName:ImageTag .
结尾的.不可少
docker run -itd --name ContainerName -p IP:8080 Image...
这样就运行起来了。
近似对比:
docker run -itd --name node-test -p IP:8080 node:ea27 → FROM node:ea27 ... EXPOSE 8080
docker cp data.json node-test:/home/script/data.json → COPY data.json /home/script/data.json
docker cp server.js node-test:/home/script/server.js → COPY server.js /home/script/server.js
WORKDIR /home/script → docker exec -it node-test /bin/bash cd /home.script
CMD node server.js → node server.js
运行基础容器
复制资源
操作资源
指定基础镜像
复制资源
操作资源