如何减少执行Docker服务的时间

时间:2018-05-22 09:04:11

标签: docker docker-compose dockerfile docker-machine

  • 我正在Docker上部署我的节点服务。
    • docker需要10多分钟才能构建服务并在ubuntu机器上运行

下面是我的Dockerfile

FROM node

ARG ENVIRONMENT
ARG PORT

ENV PORT $PORT
ENV ENVIRONMENT $ENVIRONMENT

RUN apt-get update -qq
RUN apt-get install --yes curl
RUN apt-get update && apt-get install -my wget gnupg
RUN curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install --yes nodejs
RUN apt-get install --yes build-essential vim

RUN mkdir /auth_service
ADD . /auth_service
WORKDIR /auth_service

RUN npm install -g express
RUN npm install -g path
RUN npm cache verify
RUN npm install

EXPOSE $PORT

ENTRYPOINT [ "node",  "server.js" ]
CMD [ $PORT, $ENVIRONMENT ]

我正在使用代码

运行该服务
#!/bin/bash
ORGANISATION="$1"
SERVICE_NAME="$2"
VERSION="$3"
ENVIRONMENT="$4"
INTERNAL_PORT_NUMBER="$5"
EXTERNAL_PORT_NUMBER="$6"
NETWORK="$7"
sudo docker build -t ${ORGANISATION}/${SERVICE_NAME}:${VERSION} --build-arg PORT=${INTERNAL_PORT_NUMBER} --build-arg ENVIRONMENT=${ENVIRONMENT} --no-cache .
sudo docker stop ${SERVICE_NAME}
sudo docker rm ${SERVICE_NAME}

docker run -p ${EXTERNAL_PORT_NUMBER}:${INTERNAL_PORT_NUMBER} --network ${NETWORK} --name ${SERVICE_NAME} --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}

此外,我在构建和部署过程中遇到以下错误。

debconf: delaying package configuration, since apt-utils is not installed

请建议更改以改善执行时间

提前致谢

2 个答案:

答案 0 :(得分:0)

我可以想到一些改进。

删除--no-cache

正如其他评论建议的那样,这将大大缩短您的构建时间。下面的其他建议还需要您先删除--no-cache

重新排序命令

将某些命令重新排序为ADD / COPY

之前
RUN npm install -g express
RUN npm install -g path
RUN npm cache verify

由于ADD / COPY检查您的文件发生了变化,因此每次构建映像时都可能会安装expresspath而不使用任何缓存。

首先复制package.json

您可以先考虑COPY package.jsonRUN npm install。然后,COPY其他文件到上下文。这将确保您的依赖关系并缓存它们,因此下次如果您的依赖关系列表没有更改,您将不需要花时间再次安装它们。

答案 1 :(得分:0)

这里有多个问题,但总结一个答案:

  1. 不要每次都建立。构建一次,多次运行。
  2. 您正在传递构建参数(PORT,ENVIRONMENT),它应该是运行时参数。将这些作为环境变量传递到docker run命令中,并在entryPoint中对它们进行软编码(否则您将不得不每次都构建,并且永远无法将图像重新用于其他PORT / ENVIRONMENT)。
  3. 不要在构建
  4. 上使用no-cache选项
  5. 没有运行单个OS命令的RUN语句,聚合它们,例如RUN apt-get update -qq && apt-get install --yes curl等。
  6. 重新命令命令,使最不可能更改的命令首先显示在泊坞窗文件中,这意味着重建时更有可能重新使用现有图层