Docker使用编写dockerfile启动node.js应用

2020-06-17 06:38:47易采站长站整理

编写 Dockerfile

express
自动创建的目录为例,目录结构如下:


├── /bin
│ └── www
├── /node_modules
├── /public
├── /routes
├── /views
├── package-lock.json
├── package.json
├── ecosystem.config.js
├── app.js
└── Dockerfile

在项目目录下新建

Dockerfile
文件


FROM node:10.15
MAINTAINER sunhengzhe@foxmail.com
COPY . /app/
WORKDIR /app
RUN npm install pm2 -g
EXPOSE 8003
CMD ["pm2-runtime", "ecosystem.config.js"]

FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此查看)
MAINTAINER 说明镜像的维护者
COPY 命令将宿主机的文件拷贝到镜像中,格式为 COPY [–chown=<user>:<group>] <源路径>… <目标路径>,这里将项目目录下的所有文件都拷贝到镜像中的 /app 目录下。如果目标路径不存在,docker 将自动创建。
WORKDIR 用来指定工作目录,即是 CMD 执行所在的目录。
RUN 命令用来执行 shell 命令,这里用来安装 pm2
EXPOSE 命令用来 声明 运行时容器提供服务端口,但要注意运行时并不会开启这个端口的服务。这个命令主要是帮助使用者理解这个镜像服务的守护端口,以方便配置映射;另外在使用随机端口映射时,会自动随机映射 EXPOSE 的端口
CMD 是默认的容器主进程的启动命令

构建镜像

在项目目录下执行


docker build -t express-app:v1 .

如果构建成功,查看镜像列表


docker images

应该会输出镜像

express-app:v1

运行容器


docker run -d -p 8003:3000 --name="express-app" express-app:v1

docker run
docker create
docker start
两个命令的简写。

-d
--detach
,代表让容器后台运行。
-p
指定宿主机和容器的端口映射,左边为宿主机的端口,右边为容器的端口,也就是说访问宿主机的 8003 端口,会映射到容器内的 3000 端口。
--name
设置容器别名,如果不指定,docker 会随机生成一个名字,比如