Docker构建镜像

153 阅读1分钟

命令

  1. CP 复制本地文件到镜像内。

    示例:CP . /target,表示复制本地当前目录内的所有文件到镜像内的target目录

  2. WORKDIR 容器运行时的工作目录。

    示例:WORKDIR /target,表示容器运行时的工作目录是/target

  3. RUN 在打包镜像时(docker build)会执行RUN后面的命令。

    示例:RUN npm install pm2 -g,表示打包镜像时会在镜像内安装pm2

  4. CMD 在运行容器时(docker run image)会执行CMD后面的命令。

    CMD运行完成后,Docker容器会停止运行。

    Dockerfile如果有多个CMD,只会执行文件内最后一个CMD命令。

    示例:CMD node ./app.js,表示执行工作目录内target/app.js文件

  5. EXPOSE 声明镜像运行后,容器暴露的端口。只是一个声明,无实际意义,端口映射还是需要在run image时自己去使用-p处理

    示例:EXPOSE 3000,对外暴露3000端口

构建镜像后,容器运行后就退出的问题

COPY . /target
WORKDIR /target
RUN npm install pm2 -g
EXPOSE 3000
RUN npm install
CMD ["pm2", "start", "./app.js"]

描述:构建镜像后,node使用pm2做守护的情况下,容器运行成功后就会退出(exit 0)。

原因:容器启动后,如果CMD后的命令执行完成,容器就会退出,同时pm2是在后台执行的。

所以这个时候我们就需要使用pm2-runtime让pm2保持一直处于前台运行的状态,这样容器就不会退出了,所以我们这时就要把CMD改一下:

CMD ["pm2-runtime", "start", "./src/app.js"]。

所以我们在构建镜像时需要注意CMD后的命令会不会一直保存在前台运行。