以 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:v1
npm
docker run -d -p 8003:3000 --name="express-app" express-app:v1
docker run
是 docker create
和 docker start
两个命令的简写。json
-d
即 --detach
,表明让容器后台运行。-p
指定宿主机和容器的端口映射,左边为宿主机的端口,右边为容器的端口,也就是说访问宿主机的 8003 端口,会映射到容器内的 3000 端口。--name
设置容器别名,若是不指定,docker 会随机生成一个名字,好比 tender_swirles
之类的。执行bash
docker ps
正常展现以下app
添加 -a
参数能够查看全部已启动容器。ui
若是要进入容器进行操做,执行下面命令spa
docker exec -it express-app bash
-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