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

编写 Dockerfile

express 自动建立的目录为例,目录结构以下:node

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

在项目目录下新建 Dockerfile 文件docker

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 是默认的容器主进程的启动命令

构建镜像

在项目目录下执行shell

docker build -t express-app:v1 .

若是构建成功,查看镜像列表express

docker images

应该会输出镜像 express-app:v1npm

clipboard.png

运行容器

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

docker rundocker createdocker start 两个命令的简写。json

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

执行bash

docker ps

正常展现以下app

clipboard.png

添加 -a 参数能够查看全部已启动容器。ui

进入容器

若是要进入容器进行操做,执行下面命令spa

docker exec -it express-app bash

clipboard.png

-i-t 通常结合使用,-i 启动交互模式,-t 指定须要分配终端,能够自行尝试不传其中一个的效果。

exec 相似的还有 attach 命令,命令为 docker attach express-app,但从这个 stdin 中 exit,会致使容器的中止,因此推荐使用 exec 命令。

关闭操做

中止容器

docker stop express-app

删除容器

docker rm express-app

若是删除时容器还在运行,须要加上 -f 参数

删除镜像

docker rmi express-app:v1
相关文章
相关标签/搜索