首页 > 其他分享 >[Docker] Build multi stage image

[Docker] Build multi stage image

时间:2023-02-04 17:56:36浏览次数:44  
标签:multi notesapp -- image Build PYBASE Docker sha256 docker

Existing Dockerfile

Dockerfile:

FROM python:3
ENV PYBASE /pybase
ENV PYTHONUSERBASE $PYBASE
ENV PATH $PYBASE/bin:$PATH

RUN pip install pipenv
WORKDIR /tmp
COPY Pipfile .
RUN pipenv lock
RUN PIP_USER=1 PIP_IGNORE_INSTALLED=1 pipenv install -d --system --ignore-pipfile

COPY . /app/notes
WORKDIR /app/notes
EXPOSE 80
CMD [ "flask", "run", "--port=80", "--host=0.0.0.0" ]

Build the image:

docker build -t notesapp:default .

Set a variable to view the layers of the image:

export showLayers='{{ range .RootFS.Layers }}{{ println . }}{{end}}'

Set a variable to show the size of the image:

export showSize='{{ .Size }}'

Show the image layers:

docker inspect -f "$showLayers" notesapp:default
sha256:a9099c3159f52e46aeed72420924377873529e3f36a80eddbfeb63860d036a04
sha256:a463dbda46648cc9a3af3f009b2c73035cb068639edb24f1fb5a792b057c6aa8
sha256:49b333f7bad4d30043c926b2e1270833f419ee03da204f91e09bd7939c68032e
sha256:9f4f964da72795eddb83aa809dd2b336cb37b93238a18a2e230b0adec951d1a7
sha256:a4db1a4057634db9daf255df4f001ff04cd7f0018d9b1aac8f56c3cf800f466b
sha256:dc6462f7bb8b1f906aa41ee08e5950c439fe30ba35c5eb05fba8d4a43d24d47e
sha256:52671c2fdc002602e02618d37653da28f4f06cd70d31c99ad56bdef714dbbbd6
sha256:258fef020bc42d77252f3f101b78b008a7835c230806bd45c5882ae64bb2fee2
sha256:b3683446f8e5bfa05977978d9370a115d1bf6ab81e080a8c138a44fb3dcb7730
sha256:79cd603fb06da84f169e4754828379375d8bed42f2fbcc354a67293bc50a9ac5
sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef
sha256:37bf192760afd096a3a2886aef195dec0dd9bb03035b008f2094cc77df6f1529
sha256:2f27fc3d94d973a3dea19e0a49a3067a1b68211bbf6f42f72b47fb2549ce8c41
sha256:4f36d94e66694e9a8d3f43c62b2dca00cd3e5597e4749037a70d2c667fa75eac
sha256:1963e112f11a8b8e657cb93524dbb0491fc35bdbb75bf2720bc861b2eb1681b1
sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef

Let's count how many lines of output layters:

docker inspect -f "$showLayers" notesapp:default | wc -l

Result is 17, but need to reduce 1 empty line, so actual is 16.

Let's see the size:

[cloud_user@ip-10-0-1-179 notes]$ docker inspect -f "$showSize" notesapp:default | numfmt --to=iec
1013M

Add a multi build stage

vim Dockerfile

- FROM python:3
+ FROM python:3 AS base
ENV PYBASE /pybase
ENV PYTHONUSERBASE $PYBASE
ENV PATH $PYBASE/bin:$PATH

+ FROM baase AS builder
RUN pip install pipenv
WORKDIR /tmp
COPY Pipfile .
RUN pipenv lock
RUN PIP_USER=1 PIP_IGNORE_INSTALLED=1 pipenv install -d --system --ignore-pipfile

+ From base
+ COPY --from=builder /pybase /pybase
COPY . /app/notes
WORKDIR /app/notes
EXPOSE 80
CMD [ "flask", "run", "--port=80", "--host=0.0.0.0" ]

Let's build our new image: docker build -t notesapp:multistage .

Let's see the layers and size:

docker inspect -f "$showLayers" notesapp:multistage | wc -l
13
docker inspect -f "$showSize" notesapp:multistage | numfmt --to=iec
919M

So the multi stage image can reduce the size and layer fo the final image.

标签:multi,notesapp,--,image,Build,PYBASE,Docker,sha256,docker
From: https://www.cnblogs.com/Answer1215/p/17092045.html

相关文章

  • Docker常用指令
    run  创建一个新的容器。  #使用docker镜像nginx:latest以后台模式启动一个容器#并将容器命名为mynginxdockerrun--namemynginx-dnginx:latest#使......
  • 不使用docker部署项目需要启动的一些服务-cnblog
    mysqlredis./redis-servenginx:./nginx源springboot项目:nohupjava-jarhelloworld-1.0-SNAPSHOT.jar&>hello.log&springboot项目部署到服务器的注意......
  • springboot读取docker容器系统环境变量,在alpine和debian版本的差异
    执行dockerrun--rm-e"a.a=c"-e"cc=ccs"-italpine:3.16sh,进入容器后,执行env,查看到的环境变量有cc,a.a执行dockerrun--rm-e"a.a=c"-e"cc=ccs"-itdebian......
  • Docker第二章:Docker镜像、容器卷、单机tomcat、mysql、redis安装
    镜像一种轻量级、可执行的独立软件包,我们把应用程序和配置依赖打包形成一个可交付的运行环境(包括代码、运行时所需的库、环境变量和配置文件等),这个打包好的运行环境就是im......
  • Docker搭建本地私有仓库
    一、搭建本地私有仓库有时候使用DockerHub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。使用私有仓库有......
  • 什么是Docker、Docker架构 及 Docker 安装卸载
    (目录)初识Docker1.什么是Docker微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生......
  • Docker的基本镜像操作、容器操作 及 数据卷挂载管理
    (目录)Docker的基本操作1.镜像操作1.1.镜像名称首先来看下镜像的名称组成:镜像名称一般分两部分组成:[repository]:[tag]。在没有指定tag时,默认是latest,代表最新版本......
  • 隆重介绍:Buddy全新Docker CLI操作
    自2013年推出以来,Docker一直是软件开发人员的福音。一个隔离独立的测试环境,一个在整个团队中共享工具和依赖项的独立运行时且快速与易用,有保证的Kubernetes可扩展性——所有......
  • Docker面试题
    常规题:1.  Docker 和虚拟机有啥不同?答:Docker 是轻量级的沙盒,在其中运行的只是应用,虚拟机里面还有额外的系统。2.    Docker安全么?答:Docker 利用了Linux  内......
  • 如何正确使用docker run -i -t -d 参数
    如何正确使用dockerrun-i-t-d参数在使用dockerrun命令时,我们经常会使用到-i、-t和-d参数,那么这几个参数的作用究竟是什么呢,这篇文章简单讲一下。选项说明官方文档......