From 6fbf81470e385562a3c7e4dadcd94c68d40f085d Mon Sep 17 00:00:00 2001 From: Endial Fang Date: Sat, 25 Jul 2020 11:44:42 +0800 Subject: [PATCH] =?UTF-8?q?[feat:11]=E6=9B=B4=E6=8D=A2=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E4=B8=BADebian=EF=BC=9B=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E4=B8=BA=E5=88=86=E6=94=AF=E7=AE=A1=E7=90=86=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 10/.dockerignore => .dockerignore | 0 10/Dockerfile => Dockerfile | 31 ++++------ docker-compose-cluster.yml | 58 +++++++++++++++++++ docker-compose.yml | 36 ++++++++++++ .../usr/local/bin/appcommon.sh | 49 ++++++++-------- .../usr/local/bin/entrypoint.sh | 1 - .../usr/local/license/LICENSE | 0 .../usr/local/overrides/overrides-11.sh | 0 .../usr/local/scripts/libcommon.sh | 0 .../usr/local/scripts/libdownload.sh | 0 .../usr/local/scripts/libfile.sh | 0 .../usr/local/scripts/libfs.sh | 0 .../usr/local/scripts/liblog.sh | 0 .../usr/local/scripts/libnet.sh | 0 .../usr/local/scripts/libos.sh | 0 .../usr/local/scripts/libservice.sh | 0 .../usr/local/scripts/libvalidations.sh | 0 17 files changed, 131 insertions(+), 44 deletions(-) rename 10/.dockerignore => .dockerignore (100%) rename 10/Dockerfile => Dockerfile (87%) create mode 100644 docker-compose-cluster.yml create mode 100644 docker-compose.yml rename {10/prebuilds => prebuilds}/usr/local/bin/appcommon.sh (99%) rename {10/prebuilds => prebuilds}/usr/local/bin/entrypoint.sh (99%) rename {10/prebuilds => prebuilds}/usr/local/license/LICENSE (100%) rename 10/prebuilds/usr/local/overrides/overrides-10.sh => prebuilds/usr/local/overrides/overrides-11.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libcommon.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libdownload.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libfile.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libfs.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/liblog.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libnet.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libos.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libservice.sh (100%) rename {10/prebuilds => prebuilds}/usr/local/scripts/libvalidations.sh (100%) diff --git a/10/.dockerignore b/.dockerignore similarity index 100% rename from 10/.dockerignore rename to .dockerignore diff --git a/10/Dockerfile b/Dockerfile similarity index 87% rename from 10/Dockerfile rename to Dockerfile index 637554e..cae657e 100644 --- a/10/Dockerfile +++ b/Dockerfile @@ -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之上 diff --git a/docker-compose-cluster.yml b/docker-compose-cluster.yml new file mode 100644 index 0000000..838b2b7 --- /dev/null +++ b/docker-compose-cluster.yml @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ba92a6b --- /dev/null +++ b/docker-compose.yml @@ -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 \ No newline at end of file diff --git a/10/prebuilds/usr/local/bin/appcommon.sh b/prebuilds/usr/local/bin/appcommon.sh similarity index 99% rename from 10/prebuilds/usr/local/bin/appcommon.sh rename to prebuilds/usr/local/bin/appcommon.sh index 9c3d5ad..032fd79 100644 --- a/10/prebuilds/usr/local/bin/appcommon.sh +++ b/prebuilds/usr/local/bin/appcommon.sh @@ -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 diff --git a/10/prebuilds/usr/local/bin/entrypoint.sh b/prebuilds/usr/local/bin/entrypoint.sh similarity index 99% rename from 10/prebuilds/usr/local/bin/entrypoint.sh rename to prebuilds/usr/local/bin/entrypoint.sh index b7905cf..d738b10 100644 --- a/10/prebuilds/usr/local/bin/entrypoint.sh +++ b/prebuilds/usr/local/bin/entrypoint.sh @@ -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" diff --git a/10/prebuilds/usr/local/license/LICENSE b/prebuilds/usr/local/license/LICENSE similarity index 100% rename from 10/prebuilds/usr/local/license/LICENSE rename to prebuilds/usr/local/license/LICENSE diff --git a/10/prebuilds/usr/local/overrides/overrides-10.sh b/prebuilds/usr/local/overrides/overrides-11.sh similarity index 100% rename from 10/prebuilds/usr/local/overrides/overrides-10.sh rename to prebuilds/usr/local/overrides/overrides-11.sh diff --git a/10/prebuilds/usr/local/scripts/libcommon.sh b/prebuilds/usr/local/scripts/libcommon.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libcommon.sh rename to prebuilds/usr/local/scripts/libcommon.sh diff --git a/10/prebuilds/usr/local/scripts/libdownload.sh b/prebuilds/usr/local/scripts/libdownload.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libdownload.sh rename to prebuilds/usr/local/scripts/libdownload.sh diff --git a/10/prebuilds/usr/local/scripts/libfile.sh b/prebuilds/usr/local/scripts/libfile.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libfile.sh rename to prebuilds/usr/local/scripts/libfile.sh diff --git a/10/prebuilds/usr/local/scripts/libfs.sh b/prebuilds/usr/local/scripts/libfs.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libfs.sh rename to prebuilds/usr/local/scripts/libfs.sh diff --git a/10/prebuilds/usr/local/scripts/liblog.sh b/prebuilds/usr/local/scripts/liblog.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/liblog.sh rename to prebuilds/usr/local/scripts/liblog.sh diff --git a/10/prebuilds/usr/local/scripts/libnet.sh b/prebuilds/usr/local/scripts/libnet.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libnet.sh rename to prebuilds/usr/local/scripts/libnet.sh diff --git a/10/prebuilds/usr/local/scripts/libos.sh b/prebuilds/usr/local/scripts/libos.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libos.sh rename to prebuilds/usr/local/scripts/libos.sh diff --git a/10/prebuilds/usr/local/scripts/libservice.sh b/prebuilds/usr/local/scripts/libservice.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libservice.sh rename to prebuilds/usr/local/scripts/libservice.sh diff --git a/10/prebuilds/usr/local/scripts/libvalidations.sh b/prebuilds/usr/local/scripts/libvalidations.sh similarity index 100% rename from 10/prebuilds/usr/local/scripts/libvalidations.sh rename to prebuilds/usr/local/scripts/libvalidations.sh