[alpine]修改为多阶段编译;增加tini工具;更新Makefile

This commit is contained in:
2020-09-02 10:42:23 +08:00
parent d1bf44947c
commit 47bf6fd974
2 changed files with 66 additions and 36 deletions
+31 -32
View File
@@ -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 []
+35 -4
View File
@@ -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