有没有更有效的方法来码头化 Luarocks?
Posted
技术标签:
【中文标题】有没有更有效的方法来码头化 Luarocks?【英文标题】:Is there a more efficient way to dockerize 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 应用程序并为“推送到分支”触发它。是这个意思吗? 【参考方案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
【讨论】:
以上是关于有没有更有效的方法来码头化 Luarocks?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript - 有没有更有效的方法来创建数组? - 提供的例子