2016-08-06 17 views
1

Python's mysqlclientパッケージをDockerコンテナUbuntuにインストールします。コンテナにgccがインストールされていないため、インストールが失敗します。Python mysqlclientをUbuntuドッカーコンテナにインストールする

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用のホイールがありますか?私は何も見つけることができません。

答えて

1

私はコンテナを作成し、mysqlclientの構築に必要なものすべてをインストールしました。私は.tgzをダウンロードし、ホイールファイルを生成するためにpython setup.py bdist_wheelを使用しました。ホイールファイルをホストマシンからマウントされたディレクトリにコピーし、mysqlclientをインストールしたいコンテナにインストールしました。この方法で、ダウンロードしたパッケージを削除する必要はありませんでした。私は将来の使用のためにgccを別のイメージとしてコンテナのインスタンスを保存しました。

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 
+0

私はそれをやろうと考えていました。私はapt-getがgccに多くの依存関係があることを示しているので、やりたくはありませんでした。私が何をするかは、すべてがある別のコンテナを構築し、実際に使用するコンテナにコピーするホイールを生成します。私は、Linux用のホイールを生成して再利用することは可能だと考えています(そのような車輪は存在しないので質問します)。 – user2233706

0

コンパイルが必要なときにビルド用の画像を汚染したくない場合の良い解決方法は、multi-stage buildsです。多段階で

は、コンパイルに必要なすべてのツールとデータとの最初のイメージを構築し、あなたは、あなたが最初の画像から結果だけをコピーする第2の画像を構築する構築します。秘密(git private reposにアクセスするためのSSHキーなど)が必要な場合でも、最終イメージにこれらの秘密を必要としない場合にも便利です。