[feat:11]更换基础系统为Debian;切换为分支管理方式

This commit is contained in:
2020-07-25 11:44:42 +08:00
parent c933d56cab
commit 6fbf81470e
17 changed files with 131 additions and 44 deletions
View File
+11 -20
View File
@@ -1,10 +1,14 @@
# Ver: 1.0 by Endial Fang (endial@126.com)
#
# 指定原始系统镜像,常用镜像为 colovu/ubuntu:18.04、colovu/debian:10-buster、colovu/alpine:3.11、colovu/openjdk:8u252-jre
FROM colovu/ubuntu:18.04
# 指定原始系统镜像,常用镜像为 colovu/ubuntu:18.04、colovu/debian:10、colovu/alpine:3.12、colovu/openjdk:8u252-jre
FROM colovu/debian:10
# ARG参数使用"--build-arg"指定,如 "--build-arg apt_source=tencent"
# sources.list 可使用版本:default / tencent / ustc / aliyun / huawei
ARG apt_source=default
# 外部指定应用版本信息,如 "--build-arg app_ver=6.0.0"
ARG app_ver=10
ARG app_ver=11
# 编译镜像时指定本地服务器地址,如 "--build-arg local_url=http://172.29.14.108/dist-files/"
ARG local_url=""
@@ -25,8 +29,7 @@ ENV APP_BASE_DIR=/usr/lib/${APP_NAME}/${APP_VERSION} \
APP_CACHE_DIR=/var/cache/${APP_NAME} \
APP_RUN_DIR=/var/run/${APP_NAME} \
APP_LOG_DIR=/var/log/${APP_NAME} \
APP_CERT_DIR=/srv/cert/${APP_NAME} \
APP_WWW_DIR=/srv/www
APP_CERT_DIR=/srv/cert/${APP_NAME}
# 设置应用需要的特定环境变量
ENV \
@@ -49,6 +52,9 @@ RUN set -eux; \
# 设置程序使用静默安装,而非交互模式;类似tzdata等程序需要使用静默安装
export DEBIAN_FRONTEND=noninteractive; \
\
# 更改源为当次编译指定的源
cp /etc/apt/sources.list.${apt_source} /etc/apt/sources.list; \
\
# 设置容器入口脚本的可执行权限
chmod +x /usr/local/bin/entrypoint.sh; \
\
@@ -65,8 +71,6 @@ RUN set -eux; \
pgdg-keyring \
libnss-wrapper \
xz-utils \
locales \
tzdata \
"; \
\
\
@@ -103,15 +107,6 @@ RUN set -eux; \
\
\
\
# 为中国区使用重新配置 TimeZone 信息。需要安装 tzdata 软件包
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
dpkg-reconfigure -f noninteractive tzdata; \
\
# 安装 UTF-8 编码。需要安装 locales 软件包
localedef -c -i en_US -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8; \
echo 'en_GB.UTF-8 UTF-8\nen_US.UTF-8 UTF-8' >> /etc/locale.gen && locale-gen; \
update-locale LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=POSIX && dpkg-reconfigure locales; \
\
# 检测是否存在对应版本的 overrides 脚本文件;如果存在,执行
{ [ ! -e "/usr/local/overrides/overrides-${APP_VERSION}.sh" ] || /bin/bash "/usr/local/overrides/overrides-${APP_VERSION}.sh"; }; \
\
@@ -138,10 +133,6 @@ RUN set -eux; \
# 验证安装的软件是否可以正常运行,常规情况下放置在命令行的最后
gosu ${APP_USER} ${APP_EXEC} --version ;
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US.UTF-8 \
LC_ALL=en_US.UTF-8
VOLUME ["/srv/conf", "/srv/data", "/var/log", "/var/run"]
# 默认使用gosu切换为新建用户启动,必须保证端口在1024之上
+58
View File
@@ -0,0 +1,58 @@
version: '3.6'
# Docker-Compose 单容器使用参考 YAML 配置文件
# 更多配置参数请参考镜像 README.md 文档中说明
services:
zookeeper:
image: 'bitnami/zookeeper:3'
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: 'bitnami/kafka:2'
ports:
- '9092'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
volumes:
- 'kafka2_data:/bitnami'
depends_on:
- zookeeper
kafka2:
image: 'bitnami/kafka:2'
ports:
- '9092'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
volumes:
- 'kafka_data:/bitnami'
depends_on:
- zookeeper
kafka3:
image: 'bitnami/kafka:2'
ports:
- '9092'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
volumes:
- 'kafka3_data:/bitnami'
depends_on:
- zookeeper
volumes:
kafka_data:
driver: local
kafka2_data:
driver: local
kafka3_data:
driver: local
networks:
back-tier:
driver: bridge
front-tier:
driver: bridge
+36
View File
@@ -0,0 +1,36 @@
version: '3.6'
# Docker-Compose 单容器使用参考 YAML 配置文件
# 更多配置参数请参考镜像 README.md 文档中说明
services:
postgres:
# 10
image: 'colovu/postgres:10'
ports:
- '5432:5432'
container_name: postgres
restart: always
networks:
- back-tier
volumes:
- $PWD/conf:/srv/conf
- $PWD/log:/var/log
- $PWD/datalog:/srv/datalog
- $PWD/data:/srv/data
environment:
- PG_USERNAME=postgres
- PG_PASSWORD=colovu
- PG_DATABASE=postgres
- ENV_DEBUG=yes
volumes:
zookeeper_data:
driver: local
kafka_data:
driver: local
networks:
back-tier:
driver: bridge
front-tier:
driver: bridge
@@ -14,28 +14,6 @@
# 函数列表
# 配置 libnss_wrapper 以使得 PostgreSQL 命令可以以任意用户身份执行
# 全局变量:
# PG_*
postgresql_enable_nss_wrapper() {
if ! getent passwd "$(id -u)" &> /dev/null && [ -e /usr/lib/libnss_wrapper.so ]; then
LOG_D "Configuring libnss_wrapper..."
export LD_PRELOAD='/usr/lib/libnss_wrapper.so'
export NSS_WRAPPER_PASSWD="$(mktemp)"
export NSS_WRAPPER_GROUP="$(mktemp)"
echo "postgres:x:$(id -u):$(id -g):PostgreSQL:${PG_DATA_DIR}:/bin/false" > "$NSS_WRAPPER_PASSWD"
echo "postgres:x:$(id -g):" > "$NSS_WRAPPER_GROUP"
fi
}
postgresql_disable_nss_wrapper() {
# unset/cleanup "nss_wrapper" bits
if [ "${LD_PRELOAD:-}" = '/usr/lib/libnss_wrapper.so' ]; then
rm -f "$NSS_WRAPPER_PASSWD" "$NSS_WRAPPER_GROUP"
unset LD_PRELOAD NSS_WRAPPER_PASSWD NSS_WRAPPER_GROUP
fi
}
# 加载应用使用的环境变量初始值,该函数在相关脚本中以 eval 方式调用
# 全局变量:
# ENV_* : 容器使用的全局变量
@@ -133,6 +111,28 @@ EOF
fi
}
# 配置 libnss_wrapper 以使得 PostgreSQL 命令可以以任意用户身份执行
# 全局变量:
# PG_*
postgresql_enable_nss_wrapper() {
if ! getent passwd "$(id -u)" &> /dev/null && [ -e /usr/lib/libnss_wrapper.so ]; then
LOG_D "Configuring libnss_wrapper..."
export LD_PRELOAD='/usr/lib/libnss_wrapper.so'
export NSS_WRAPPER_PASSWD="$(mktemp)"
export NSS_WRAPPER_GROUP="$(mktemp)"
echo "postgres:x:$(id -u):$(id -g):PostgreSQL:${PG_DATA_DIR}:/bin/false" > "$NSS_WRAPPER_PASSWD"
echo "postgres:x:$(id -g):" > "$NSS_WRAPPER_GROUP"
fi
}
postgresql_disable_nss_wrapper() {
# unset/cleanup "nss_wrapper" bits
if [ "${LD_PRELOAD:-}" = '/usr/lib/libnss_wrapper.so' ]; then
rm -f "$NSS_WRAPPER_PASSWD" "$NSS_WRAPPER_GROUP"
unset LD_PRELOAD NSS_WRAPPER_PASSWD NSS_WRAPPER_GROUP
fi
}
# 将变量配置更新至配置文件
# 参数:
# $1 - 文件
@@ -517,10 +517,12 @@ app_start_server_bg() {
LOG_D "${APP_NAME} is ready for service..."
}
# 停止 PostgreSQL 后台服务
# 停止应用后台服务
# 全局变量:
# PG_PID_FILE
app_stop_server() {
is_app_server_running || return
LOG_I "Stopping ${APP_NAME}..."
stop_service_using_pid "$PG_PID_FILE"
}
@@ -555,6 +557,7 @@ app_clean_tmp_file() {
# APP_*
# PG_*
app_clean_from_restart() {
LOG_D "Delete temp files when restart container"
local -r -a files=(
"$PG_DATA_DIR"/postmaster.pid
"$PG_DATA_DIR"/standby.signal
@@ -71,7 +71,6 @@ _main() {
docker_ensure_dir_and_configs
# 以root用户运行时,会使用gosu重新以"APP_USER"用户运行当前脚本
LOG_D "Check if run as root"
if _is_run_as_root; then
LOG_D "Change permissions when run as root"