我想在运行Python's mysqlclient的Docker容器上安装Ubuntu包。安装失败,因为我没有在容器中安装gcc:
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Dversion_info=(1,3,7,'final',1) -D__version__=1.3.7 -I/usr/include/mysql -I/usr/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -fabi-version=2 -fno-omit-frame-pointer
unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
但是,我不想在容器中安装gcc。是否有可用于mysqlclient的轮子?我找不到任何。
答案 0 :(得分:1)
您可以安装构建依赖项,创建模块,然后删除它们。
Redis is a good example如何一步构建和清理,这样就不会创建庞大的图像层。
RUN buildDeps='gcc libc6-dev make' \
&& set -x \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/src/redis \
&& curl -sSL "$REDIS_DOWNLOAD_URL" -o redis.tar.gz \
&& echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& rm redis.tar.gz \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
答案 1 :(得分:1)
我创建了一个容器并安装了构建mysqlclient所需的一切。我下载了.tgz并使用python setup.py bdist_wheel
来生成Wheel文件。我将wheel文件复制到从我的主机安装的目录中,并将其安装在我希望安装mysqlclient的容器上。这样我就不必删除我下载的软件包了。我用gcc保存了容器的实例作为单独的图像以供将来使用。
答案 2 :(得分:0)
当您需要编译内容但不想使用构建内容污染图像时,一个很好的解决方案是使用multi-stage builds。
使用多阶段构建,您可以构建包含编译所需的所有工具和数据的第一个图像,然后构建第二个图像,其中只复制第一个图像的结果。如果您需要一些秘密(例如SSH密钥来访问git私有回购),但在最终图像中不想要这些秘密,这也很有用。