使用Mysql容器为Python应用设置Docker
我有一个正在运行的容器,里面是“dockerfile/mysql”,我可以连接并与之互动。现在我想为一个Python应用程序构建另一个镜像,这个应用程序需要从MySQL数据库读取数据。问题是,这个Python应用程序需要安装MySQL-python,并在设置时尝试安装它。因为这个容器里没有MySQL服务器,所以我遇到了以下问题:
Downloading/unpacking MySQL-python
Downloading MySQL-python-1.2.5.zip (108kB): 108kB downloaded
Running setup.py (path:/tmp/pip_build_vagrant/MySQL-python/setup.py) egg_info for package MySQL-python
sh: 1: mysql_config: not found
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/tmp/pip_build_vagrant/MySQL-python/setup.py", line 17, in <module>
metadata, options = get_config()
File "setup_posix.py", line 43, in get_config
libs = mysql_config("libs_r")
File "setup_posix.py", line 25, in mysql_config
raise EnvironmentError("%s not found" % (mysql_config.path,))
EnvironmentError: mysql_config not found
Complete output from command python setup.py egg_info:
sh: 1: mysql_config: not found
这完全可以理解。
我应该如何设置我的Python应用程序容器(它使用SQLAlchemy)以便从MySQL容器中读取数据呢?
谢谢!
4 个回答
0
如果你想在Alpine Linux上安装MySQL,解决这个问题的正确方法是用这个命令来添加 mariadb-connector-c
这个软件包。
apk update && apk add mariadb-connector-c
2
为了避免图片大小不成比例地增加(多出300MB),你可以在构建完mysqlclient后,从镜像中删除一些包。这样你可以做以下几步:
在你的dockerfile中添加以下几行:
COPY ./apk_deps.sh ./apk_deps.sh RUN ./apk_deps.sh
创建一个名为apk_deps.sh的文件,里面写上以下内容:
#! /bin/sh set -e echo "apk add --no-cache --virtual .build-deps gcc libc-dev linux-headers mariadb-dev python3-dev" apk add --no-cache --virtual .build-deps gcc libc-dev linux-headers mariadb-dev python3-dev echo "pip install mysqlclient" pip install mysqlclient echo "apk del .build-deps" apk del .build-deps apk add --no-cache mariadb-client-libs
这样我的镜像大小只增加了7MB。
10
如果你使用的是 python:3.5-alpine
,你可以通过在你的 Dockerfile
中添加以下代码来安装 mysqlclient
:
RUN set -e; \
apk add --no-cache --virtual .build-deps \
gcc \
libc-dev \
linux-headers \
mariadb-dev \
python3-dev \
postgresql-dev \
;
整个 Dockerfile
看起来会是这样的:
# Version: 0.0.1
FROM python:3.5-alpine
ENV PYTHONUNBUFFERED 1
RUN set -e; \
apk add --no-cache --virtual .build-deps \
gcc \
libc-dev \
linux-headers \
mariadb-dev \
python3-dev \
postgresql-dev \
;
RUN mkdir /djcode
WORKDIR /djcode
ENV REFRESHED_AT 2017-12-25
ADD requirements.txt /djcode/
RUN pip install --no-cache-dir -r /djcode/requirements.txt
RUN pip install uwsgi
ADD . /djcode/
EXPOSE 6001
14
在你的 Dockerfile
文件中添加 apt-get install -y libmysqlclient-dev
这一行。