【问题标题】:Is there a more efficient way to dockerize Luarocks?有没有更有效的方法来码头化 Luarocks?
【发布时间】:2019-10-25 06:03:06
【问题描述】:

我正在尝试构建一个精简的 alpine docker 容器,用于在 Google Cloud Build 中对 Lua 进行单元测试。

它运行良好,但构建大约需要 30 - 50 秒。当我运行 busted 和 luacheck 时,每个只需要几秒钟。关于如何优化此构建过程的任何想法?

我使用 wget,然后切换到 git。我添加了 curl 和 unzip ,因为 luarocks 期望它和 openssl 用于 luacheck 的依赖项之一。我可以/应该使用不同的依赖项吗?

FROM alpine

ENV LUA_VERSION 5.1

RUN apk update

RUN apk add lua${LUA_VERSION} 
RUN apk add lua${LUA_VERSION}-dev

RUN apk add bash build-base curl git openssl unzip

RUN cd /tmp && \
    git clone https://github.com/keplerproject/luarocks.git && \
    cd luarocks && \
    sh ./configure && \
    make build install && \
    cd && \
    rm -rf /tmp/luarocks

RUN luarocks install busted
RUN luarocks install luacheck
RUN luarocks install luacov

【问题讨论】:

  • 每次构建之间有什么变化?
  • 我正在使用 Google Cloud Build GitHub 应用程序并为“推送到分支”触发它。是这个意思吗?

标签: docker google-cloud-build luarocks


【解决方案1】:

您不必构建 luarocks。您可以使用安装包,

RUN apk add luarocks

【讨论】:

  • 当我用 nginx:1.21.1-alpine 尝试这个时,它显然可以运行,但我实际上不能使用它:``` => [2/14] RUN apk add luarocks 2.0s => 错误 [3/14] 运行 luarocks 安装 lunajson ```
【解决方案2】:

你可以试试这个

Dockerfile

FROM alpine:3.12

# Set environment
ENV LUA_VERSION=5.1.5 \
    LUAROCKS_VERSION=3.4.0

# Install dependency packages
RUN set -xe && \
        apk add --no-cache --virtual .build-deps \
            curl \
            gcc \
            g++ \
            libc-dev \
            make \
            readline-dev \
        && \
        apk add --no-cache \
            readline \
        && \
        # Install Lua
        wget http://www.lua.org/ftp/lua-${LUA_VERSION}.tar.gz && \
        tar zxf lua-${LUA_VERSION}.tar.gz && rm -f lua-${LUA_VERSION}.tar.gz && \
        cd lua-${LUA_VERSION} && \
        make -j $(getconf _NPROCESSORS_ONLN) linux && make install && \
        cd / && rm -rf lua-${LUA_VERSION} && \
        # Install LuaRocks
        wget https://luarocks.org/releases/luarocks-${LUAROCKS_VERSION}.tar.gz && \
        tar zxf luarocks-${LUAROCKS_VERSION}.tar.gz && rm -f luarocks-${LUAROCKS_VERSION}.tar.gz && \
        cd luarocks-${LUAROCKS_VERSION} && \
        ./configure && \
        make -j $(getconf _NPROCESSORS_ONLN) build && make install && \
        cd / && rm -rf luarocks-${LUAROCKS_VERSION} && \
        # Remove all build deps
        apk del .build-deps && \
        # Test
        lua -v && luarocks

COPY docker-entrypoint.sh /usr/local/bin

docker-entrypoint.sh

#!/bin/sh

set -e

buildDepsApk="
curl
libc-dev
gcc
wget
"

pm='unknown'
if [ -e /lib/apk/db/installed ]; then
    pm='apk'
fi

if [ "$pm" = 'apk' ]; then
    apk add --no-cache ${buildDepsApk}
fi

luarocks install $@

if [ "$pm" = 'apk' ]; then
    apk del ${buildDepsApk}
fi

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多