当前位置: 首页 > 知识库问答 >
问题:

为什么在Ubuntu 16.04上部署Python 3.6、Virtualenv、Flask、GUnicorn时Docker容器映像变得如此大?

赵元白
2023-03-14

在虚拟环境中部署烧瓶应用程序时,python3-m venv FLSK-ENV

Dockerfile:

    FROM appcontainers/ubuntu:xenial

    MAINTAINER user <user>

    RUN apt-get install -y software-properties-common \
            && add-apt-repository ppa:jonathonf/python-3.6 -y \
            && apt-get update -y \
            && apt-get install -y python3.6-minimal python3.6-venv \
            && apt-get install -y git \
            && apt-get install python-pip -y \
            && pip install --upgrade pip \
            && pip install gunicorn \
            && mkdir -p /home/EZMOVE 

    WORKDIR /home/workdir

    RUN git clone -b develop --single-branch http://repo

    RUN ["chmod", "+x", "./prepareenv.sh"]

    RUN /bin/bash -c "source prepareenv.sh"

    EXPOSE 5000

因此,上面的Dockerfile将从“app容器/ubuntu: xenial”中提取最小的ubuntu-16.04,并将仅更新和安装所需的包,例如:

 1. python3.6
 2. git
 3. python-pip
 4. gunicorn

然后它将执行“prepareenv”。要创建python3.6虚拟环境,请激活venv,然后安装需求。txt使用pip,然后它将公开端口,gunicorn将服务于Flask应用程序。。等

但在创建图像时,docker图像大小从70MB增加到550MB。

在安装软件包时,它正在安装其他软件包,如下所示:

    The following additional packages will be installed:
  binutils build-essential bzip2 cpp cpp-5 dpkg-dev fakeroot g++ g++-5 gcc
  gcc-5 gcc-5-base libalgorithm-diff-perl libalgorithm-diff-xs-perl
  libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6 libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot
  libfile-fcntllock-perl libgcc-5-dev libgomp1 libisl15 libitm1 liblsan0
  libmpc3 libmpfr4 libmpx0 libpython-all-dev libpython-dev libpython-stdlib
  libpython2.7 libpython2.7-dev libpython2.7-minimal libpython2.7-stdlib
  libquadmath0 libstdc++-5-dev libstdc++6 libtsan0 libubsan0 linux-libc-dev
  make manpages manpages-dev python python-all python-all-dev python-dev
  python-minimal python-pkg-resources python-setuptools python-wheel python2.7
  python2.7-dev python2.7-minimal
Suggested packages:
  binutils-doc bzip2-doc cpp-doc gcc-5-locales debian-keyring g++-multilib
  g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib autoconf automake
  libtool flex bison gdb gcc-doc gcc-5-multilib libgcc1-dbg libgomp1-dbg
  libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg
  libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc locales
  libstdc++-5-doc make-doc man-browser python-doc python-tk
  python-setuptools-doc python2.7-doc binfmt-support
The following NEW packages will be installed:
  binutils build-essential bzip2 cpp cpp-5 dpkg-dev fakeroot g++ g++-5 gcc
  gcc-5 libalgorithm-diff-perl libalgorithm-diff-xs-perl
  libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev libcc1-0
  libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl
  libgcc-5-dev libgomp1 libisl15 libitm1 liblsan0 libmpc3 libmpfr4 libmpx0
  libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libpython2.7-minimal libpython2.7-stdlib libquadmath0
  libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make manpages manpages-dev
  python python-all python-all-dev python-dev python-minimal python-pip
  python-pkg-resources python-setuptools python-wheel python2.7 python2.7-dev
  python2.7-minimal
The following packages will be upgraded:
  gcc-5-base libc6 libstdc++6
3 upgraded, 59 newly installed, 0 to remove and 24 not upgraded.
Need to get 76.6 MB of archives.
After this operation, 210 MB of additional disk space will be used.

那么如何减小Docker图像的大小呢?

共有1个答案

汪德明
2023-03-14

请尝试以下Dockerfile,它将图像大小减小到255 MB。“--无安装建议”确保只安装了所需的软件包,“rm-rf/var/lib/apt/lists/*”会清除所有索引文件。

FROM appcontainers/ubuntu:xenial

RUN apt-get update \
            && apt-get install -y --no-install-recommends software-properties-common \
            && add-apt-repository -y ppa:jonathonf/python-3.6 \
            && apt-get update \
            && apt-get install -y --no-install-recommends python3.6-minimal python3.6-venv \
            && apt-get install -y --no-install-recommends git \
            && apt-get install -y --no-install-recommends python-pip \
            && pip install --upgrade pip \
            && pip install gunicorn \
            && rm -rf /var/lib/apt/lists/* \
            && mkdir -p /home/EZMOVE

WORKDIR /home/workdir

EXPOSE 5000
 类似资料:
  • 问题内容: 我通过Fedora的Dockerfile创建了一个简单的映像(最初为320 MB)。 添加了Nano(这个1MB大小的微型编辑器),图像的大小已增加到530 MB。我在此基础上添加了Git(30-ish MB),然后将图像大小的火箭提高到830 MB。 那不是疯了吗? 我试图导出和导入容器以删除历史记录/中间图像。这项工作最多可节省25 MB,现在我的图像大小为804 MB。我也尝试过

  • 问题内容: 您可以在几秒钟内用Dockerfile构建一个容器,那么为什么人们需要在Docker容器内安装虚拟环境? 就像虚拟机中的“虚拟机”? 问题答案: 我正在Docker中使用virtualenvs,我认为有以下几个原因: 您可能想将应用程序与系统的python软件包隔离 您可能想运行自定义版本的python,但仍保持系统软件包不变 您可能需要针对特定​​应用安装的软件包进行精细控制 您可能

  • 我正试图使用但出现错误。下面是我的文件内容: 错误: 开始步骤#2 步骤#2:已经有图像(带摘要):gcr.io/cloud-builders/gcloud 步骤2:错误:(gcloud.compute.instances.update container)未指定的资源[instance-2-production]。指定[--zone]标志。 如果我从Cloud SDK Sheel运行相同的命令,

  • 在使用Docker时,我们从一个基图像开始。我们启动它,创建更改,这些更改保存在图层中,形成另一个图像。 所以最终我有了一个用于我的PostgreSQL实例的映像和一个用于我的web应用程序的映像,对这些映像的更改将持续保持。 什么是容器?

  • 我从Fedora通过Dockerfile制作了一个简单的图像(最初为320 MB)。 添加了Nano(这个1MB大小的微小编辑器),图像的大小上升到了530MB。我在上面添加了Git(大约30 MB),然后我的图像大小的sky-rockets达到了830 MB。 这不是疯了吗? 我已经尝试导出和导入容器来删除历史/中间图像。这一努力节省了25 MB,现在我的图像大小是804 MB。我也尝试在一个上

  • 我们可以在单独的docker容器中部署apache和php,然后将它们链接起来。 但是有没有办法在docker容器中本地安装apache(使用apt get install apache2)和php fpm,然后链接它们? 谢谢