Сборка Dockerfile из исходного кода на одном этапе, а затем копирование и установка на втором этапе - PullRequest
1 голос
/ 09 мая 2020

Я новичок в docker и linux.

Я использую базовый образ Alpine, и я хочу, чтобы мой образ был как можно более чистым и легким. Мне нужно собрать и установить некоторые пакеты в моем Dockerfile, в частности this .

. Мне было интересно, есть ли у меня способ использовать docker многоступенчатые сборки и собрать MariaDB соединитель на одном этапе и скопируйте файлы на следующий этап, а затем установите его там.

Я попытался создать его в отдельном каталоге и скопировать на другой компьютер, чтобы проверить, возможно ли это, но я столкнулся с проблемой, когда его невозможно установить без ряда файлов, находящихся вне встроенный справочник.

1 Ответ

1 голос
/ 09 мая 2020

Если вы хотите собрать свою библиотеку на первом этапе и использовать ее на более позднем этапе без всех библиотек и инструментов, необходимых для ее компиляции, вы можете использовать многоступенчатую сборку, как вы говорите.

Но, когда вы копируете собранную библиотеку, вам необходимо установить общую библиотеку, которая была связана с ней (здесь musl и unixodb c).

Вы можете найти их, запустив ldd:

/build/mariadb-connector-odbc-3.1.4 # ldd /usr/lib/libmaodbc.so
    /lib/ld-musl-x86_64.so.1 (0x7fde6847b000)
    libodbcinst.so.2 => /usr/lib/libodbcinst.so.2 (0x7fde683c5000)
    libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7fde6847b000)

Поскольку musl уже должен присутствовать, вам нужно только установить обратно unixodb c lib, который использовался для сборки библиотеки.

Это пример Dockerfile для этого:

FROM alpine AS build
# Add build dependencies
RUN apk add --no-cache alpine-sdk cmake unixodbc-dev mariadb-connector-c mariadb-connector-c-dev mariadb-static unixodbc
# Download the source code from github
ADD https://github.com/MariaDB/mariadb-connector-odbc/archive/3.1.4.tar.gz /build/mariadb-connector-odbc.tgz

# Build it
WORKDIR /build
RUN tar xzf mariadb-connector-odbc.tgz \
    && cd mariadb-connector-odbc-3.1.4 \
    && CFLAGS="$CFLAGS -I/usr/include/mysql" \
       cmake \
       -DCMAKE_INSTALL_PREFIX=/usr \
       -DCMAKE_INSTALL_LIBDIR=lib \
       -DBUILD_SHARED_LIBS=True \
       -DCMAKE_BUILD_TYPE=None \
       . \
    && make install

# Final stage
FROM alpine
# Add the dependencies for the lib
RUN apk add --no-cache unixodbc
# Copy it from the build image
COPY --from=build  /usr/lib/libmaodbc.so  /usr/lib/libmaodbc.so
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...