2016-08-06 4 views
1

Ubuntu을 실행중인 Docker 컨테이너에 Python's mysqlclient 패키지를 설치하고 싶습니다.우분투 도커 컨테이너에 파이썬 mysqlclient 설치

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를 설치하지 않으려는 : 나는 용기에 설치된 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에 많은 의존성이 있다는 것을 보여주기 때문에 그렇게하지 않기를 원했습니다. 제가 대신 할 일은 모든 것을 가진 다른 컨테이너를 빌드하고 실제로 사용할 컨테이너로 복사 할 휠을 생성하는 것입니다. 리눅스 용 휠을 생성하고 재사용하는 것이 가능하다고 가정합니다 (그러한 휠이 존재하지 않기 때문에 물어 봅니다). – user2233706

0

물건을 컴파일해야하지만 빌드 물건으로 이미지를 오염시키지 않으려면 좋은 해결책은 multi-stage builds을 사용하는 것입니다.

다단계 빌드를 사용하면 컴파일에 필요한 모든 도구와 데이터가 포함 된 첫 번째 이미지를 작성한 다음 첫 번째 이미지의 결과 만 복사하는 두 번째 이미지를 빌드합니다. git private repos에 액세스 할 때 SSH 키와 같은 비밀이 필요하지만 최종 이미지에 그러한 비밀을 원하지 않는 경우에도 유용합니다.

관련 문제