FROM node:10.0-alpineRUN apk --update add tzdata
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& echo "Asia/Shanghai" > /etc/timezone
&& apk del tzdata
RUN echo "Asia/Shanghai" > /etc/timezone
RUN mkdir -p /usr/src/nodejs/
WORKDIR /usr/src/nodejs/
# add npm package
COPY package.json /usr/src/app/package.json
RUN cd /usr/src/app/
RUN npm i
# copy code
COPY . /usr/src/app/
EXPOSE 30010
CMD npm start
重新打包了一个版本 mayjun/hello-docker:1.1.0 再次查看下效果,可以看到镜像文件从 688MB 减少至 85.3MB,这个体积优化还是很大的
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mayjun/hello-docker 1.1.0 169e05b8197d 3 minutes ago 85.3MB生产环境不要打包 devDependencies 包
有些测试环境用的包,在进行生产环境打镜像时不要包含进去,也就是 package.json 文件 devDependencies 对象,通过在 npm i 之后指定 –production 参数过滤
改进如下所示:
FROM node:10.0-alpine# 省略 ...
# add npm package
COPY package.json /usr/src/app/package.json
RUN cd /usr/src/app/
RUN npm i --production # 改变在这了
# 省略 ...
重新打包了一个版本 mayjun/hello-docker:1.2.0 再次查看下效果,可以看到镜像文件从 85.3MB 又减少至 72.3MB
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mayjun/hello-docker 1.2.0 f018aa578711 3 seconds ago 72.3MB常见问题
Question1
以下命令在删除镜像的时候报如下错误:
$ docker rmi 6b1c2775591e
Error response from daemon: conflict: unable to delete 6b1c2775591e (must be forced) - image is referenced in multiple repositories细心的你也许会发现镜像 ID 6b1c2775591e 同时指向了 hello-docker 和 mayjun/hello-docker 仓库,这也是造成删除失败的原因
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 383867b75fd2 6 days ago 373MB
hello-docker latest 6b1c2775591e 7 days ago 675MB
mayjun/hello-docker latest 6b1c2775591e 7 days ago 675MB指定 repository 和 tag 来删除,执行删除命令之后再次查看 mayjun/hello-docker 仓库就已经没有了
$ docker rmi mayjun/hello-docker
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 383867b75fd2 6 days ago 373MB
hello-docker latest 6b1c2775591e 7 days ago 675MBQuestion2










