繁体   English   中英

在Ubuntu Docker容器上安装Python mysqlclient

[英]Install Python mysqlclient on Ubuntu docker container

我想在运行Ubuntu的Docker容器上安装Python的mysqlclient软件包。 安装失败,因为我没有在容器中安装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有轮子吗? 我找不到。

您可以安装构建依赖项,制作模块,然后删除它们。

Redis是一个很好的示例 ,说明如何一步一步地构建和清理,因此您不会创建笨重的图像层。

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

我创建了一个容器并安装了构建mysqlclient所需的一切。 我下载了.tgz并使用python setup.py bdist_wheel生成了Wheel文件。 我将wheel文件复制到从主机安装的目录中,并将其安装在要安装mysqlclient的容器上。 这样,我不必删除我下载的软件包。 我将容器实例和gcc保存为单独的图像,以备将来使用。

对于需要编译内容但又不想污染构建内容的映像的一个好的解决方案是使用多阶段构建

通过多阶段构建,您可以使用编译所需的所有工具和数据构建第一个映像,然后构建第二个映像,在该映像中仅复制第一个映像的结果。 如果您需要一些秘密(例如SSH密钥来访问git private仓库),但又不想在最终映像中使用这些秘密,它也很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM