[alpine]修改为多阶段编译;增加tini工具;更新Makefile
This commit is contained in:
+31
-32
@@ -1,6 +1,6 @@
|
||||
# Ver: 1.0 by Endial Fang (endial@126.com)
|
||||
# Ver: 1.1 by Endial Fang (endial@126.com)
|
||||
#
|
||||
FROM alpine:3.12
|
||||
FROM colovu/alpine-builder as builder
|
||||
|
||||
# ARG参数使用"--build-arg"指定,如 "--build-arg apt_source=tencent"
|
||||
# sources.list 可使用版本:default / tencent / ustc / aliyun / huawei
|
||||
@@ -11,34 +11,11 @@ ARG local_url=""
|
||||
|
||||
ARG gosu_ver=1.12
|
||||
|
||||
LABEL \
|
||||
"Version"="v3.12" \
|
||||
"Description"="Alpine image for Alpine 3.12." \
|
||||
"Dockerfile"="https://github.com/colovu/docker-alpine" \
|
||||
"Vendor"="Endial Fang (endial@126.com)"
|
||||
|
||||
COPY sources/* /etc/apk/
|
||||
|
||||
RUN set -eux; \
|
||||
\
|
||||
# 更改源为当次编译指定的源
|
||||
cp /etc/apk/repositories.${apt_source} /etc/apk/repositories; \
|
||||
\
|
||||
apk update; \
|
||||
apk upgrade --no-cache;\
|
||||
apk add --no-cache bash; \
|
||||
\
|
||||
# 安装依赖软件包
|
||||
apk add --no-cache --virtual .fetch-deps \
|
||||
dpkg \
|
||||
gnupg \
|
||||
; \
|
||||
\
|
||||
# 安装应用软件
|
||||
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
|
||||
if [ -n "${local_url}" ]; then \
|
||||
wget -O /usr/local/bin/gosu "${local_url}/gosu-${dpkgArch}"; \
|
||||
wget -O /usr/local/bin/gosu.asc "${local_url}/gosu-${dpkgArch}.asc"; \
|
||||
wget -O /usr/local/bin/gosu "${local_url}/gosu/gosu-${dpkgArch}"; \
|
||||
wget -O /usr/local/bin/gosu.asc "${local_url}/gosu/gosu-${dpkgArch}.asc"; \
|
||||
else \
|
||||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${gosu_ver}/gosu-$dpkgArch"; \
|
||||
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/${gosu_ver}/gosu-$dpkgArch.asc"; \
|
||||
@@ -55,15 +32,37 @@ RUN set -eux; \
|
||||
done; \
|
||||
gpg --batch --verify "/usr/local/bin/gosu.asc" "/usr/local/bin/gosu"; \
|
||||
command -v gpgconf > /dev/null && gpgconf --kill all; \
|
||||
rm -rf "$GNUPGHOME"; \
|
||||
\
|
||||
chmod +x /usr/local/bin/gosu; \
|
||||
rm -rf /usr/local/bin/gosu.asc; \
|
||||
\
|
||||
# 删除安装的依赖软件包
|
||||
apk del --no-network .fetch-deps; \
|
||||
\
|
||||
# 验证安装的应用软件是否正常
|
||||
gosu nobody true;
|
||||
|
||||
# 镜像生成
|
||||
FROM alpine:3.12
|
||||
ARG apt_source=default
|
||||
|
||||
LABEL \
|
||||
"Version"="v3.12" \
|
||||
"Description"="Alpine image for Alpine 3.12." \
|
||||
"Dockerfile"="https://github.com/colovu/docker-alpine" \
|
||||
"Vendor"="Endial Fang (endial@126.com)"
|
||||
|
||||
COPY sources/* /etc/apk/
|
||||
|
||||
RUN set -eux; \
|
||||
cp /etc/apk/repositories.${apt_source} /etc/apk/repositories; \
|
||||
\
|
||||
apk update; \
|
||||
apk upgrade --no-cache; \
|
||||
apk add --no-cache bash tini; \
|
||||
\
|
||||
rm -rf /var/cache/apk/*; \
|
||||
rm -rf /root/.cache; \
|
||||
rm -rf /tmp/*;
|
||||
|
||||
COPY --from=builder /usr/local/bin/gosu /usr/local/bin/
|
||||
|
||||
WORKDIR /srv/data
|
||||
|
||||
CMD []
|
||||
|
||||
@@ -1,9 +1,40 @@
|
||||
# Ver: 1.3 by Endial Fang (endial@126.com)
|
||||
#
|
||||
# 当前 Docker 镜像的编译脚本
|
||||
|
||||
current_branch := $(shell git rev-parse --abbrev-ref HEAD)
|
||||
app_name := colovu/alpine
|
||||
|
||||
# 生成镜像TAG,类似:<镜像名>:<分支名>-<Git ID> 或 <镜像名>:latest-<年月日>-<时分秒>
|
||||
current_subversion:=$(shell if [[ -d .git ]]; then git rev-parse --short HEAD; else date +%y%m%d-%H%M%S; fi)
|
||||
current_tag:=$(shell if [[ -d .git ]]; then git rev-parse --abbrev-ref HEAD | sed -e 's/master/latest/'; else echo "latest"; fi)-$(current_subversion)
|
||||
|
||||
# Sources List: default / tencent / ustc / aliyun / huawei
|
||||
build-arg := --build-arg apt_source=tencent
|
||||
build-arg += --build-arg local_url=http://192.168.48.132/dist-files/
|
||||
build-arg:=--build-arg apt_source=tencent
|
||||
|
||||
# 设置本地下载服务器路径,加速调试时的本地编译速度
|
||||
local_ip:=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $$2}'|tr -d "addr:"`
|
||||
build-arg+=--build-arg local_url=http://$(local_ip)/dist-files/
|
||||
|
||||
.PHONY: build clean clearclean upgrade
|
||||
|
||||
build:
|
||||
docker build --force-rm $(build-arg) -t alpine:$(current_branch) .
|
||||
@echo "Build $(app_name):$(current_tag)"
|
||||
@docker build --force-rm $(build-arg) -t $(app_name):$(current_tag) .
|
||||
@echo "Add tag: $(app_name):latest"
|
||||
@docker tag $(app_name):$(current_tag) $(app_name):latest
|
||||
|
||||
# 清理悬空的镜像(无TAG)及停止的容器
|
||||
clean:
|
||||
@echo "Clean untaged images and stoped containers..."
|
||||
@docker ps -a | grep "Exited" | awk '{print $$1}' | xargs docker rm
|
||||
@docker images | grep '<none>' | awk '{print $$3}' | xargs docker rmi -f
|
||||
|
||||
# 为了防止删除前缀名相同的镜像,在过滤条件中加入一个空格进行过滤
|
||||
clearclean: clean
|
||||
@echo "Clean all images for current application..."
|
||||
@docker images | grep "$(app_name) " | awk '{print $$3}' | xargs docker rmi -f
|
||||
|
||||
# 更新所有 colovu 仓库的镜像
|
||||
upgrade:
|
||||
@echo "Upgrade all images..."
|
||||
@docker images | grep 'colovu' | grep -v '<none>' | grep -v "latest-" | awk '{print $$1":"$$2}' | xargs -L 1 docker pull
|
||||
|
||||
Reference in New Issue
Block a user