diff --git a/gitea/Dockerfile b/gitea/Dockerfile index 9175a4a..9e1004a 100644 --- a/gitea/Dockerfile +++ b/gitea/Dockerfile @@ -1,5 +1,5 @@ ARG ARCH -FROM harbor.colben.cn/general/photon$ARCH +FROM harbor.colben.cn/general/photon$ARCH:5 MAINTAINER Colben colbenlee@gmail.com ADD --chown=root:root /ADD/ccmd /opt/ ADD --chown=root:root /ADD/gitea /usr/bin/gitea diff --git a/greatsql/Dockerfile-greatsql8 b/greatsql/Dockerfile-greatsql8 index f960008..72c4883 100644 --- a/greatsql/Dockerfile-greatsql8 +++ b/greatsql/Dockerfile-greatsql8 @@ -33,9 +33,8 @@ gpgcheck=0\n\ && ln -s /usr/bin/mysqldump /usr/bin/greatsqldump \ && ln -s /usr/bin/mysqladmin /usr/bin/greatsqladmin \ && rm -rf /usr/sbin/mysqld-debug \ - /var/cache/yum \ - /var/lib/yum \ - /var/lib/rpm \ + /var/cache/dnf \ + /var/lib/dnf \ /var/log/* \ /etc/my.cnf.d \ $BUNDLE_FILE \ diff --git a/mongodb/Dockerfile b/mongodb/Dockerfile index b100a37..d7d3a74 100644 --- a/mongodb/Dockerfile +++ b/mongodb/Dockerfile @@ -15,6 +15,6 @@ gpgcheck=0\n\ && mv /etc/mongod.conf /etc/mongod.conf.origin \ && mv /var/log/mongodb /var/log/mongo \ && rm -f /var/log/mongo/mongod.log \ - && rm -rf /var/cache/dnf + && rm -rf /var/cache/dnf /var/lib/dnf CMD ["/opt/ccmd"] diff --git a/mysql/Dockerfile-mysql8 b/mysql/Dockerfile-mysql8 index 3690d3d..460cd44 100644 --- a/mysql/Dockerfile-mysql8 +++ b/mysql/Dockerfile-mysql8 @@ -14,9 +14,8 @@ gpgcheck=0\n\ && dnf -y module disable mysql \ && dnf install mysql-community-server -y \ && rm -rf /usr/sbin/mysqld-debug \ - /var/cache/yum \ - /var/lib/yum \ - /var/lib/rpm \ + /var/cache/dnf \ + /var/lib/dnf \ /var/log/* \ /etc/my.cnf.d \ && mkdir -p /var/log/mysql \ diff --git a/pgsql/ADD/ccmd b/pgsql/ADD/ccmd new file mode 100755 index 0000000..b4b4131 --- /dev/null +++ b/pgsql/ADD/ccmd @@ -0,0 +1,76 @@ +#!/bin/bash + +################################################## +# Mount dir # +# - /var/lib/pgsql # +# - /var/log/pgsql # +# - /etc/pgsql/conf.d # +################################################## + +set -euo pipefail +export LANG=en_US.UTF-8 +trap Quit EXIT + +PIDS= +GOT_SIGTERM= +LOG_DIR=/var/log/pgsql +DATA_DIR=/var/lib/pgsql +VERSION=$VERSION + +function Print { + local file=/dev/null + [ '-f' = "$1" ] && file=$2 && shift && shift + date +"[%F %T] $*" | tee -a $file +} + +function Quit { + Print killing pgsql ... + su - postgres -c "pg_ctl stop" || true + while :; do + pkill -x postmaster && Print killing postmaster ... || break + sleep 2 + done + Print Container stopped. + test -n "$GOT_SIGTERM" +} + +function Init { + chown -R postgres:postgres $LOG_DIR $DATA_DIR + if [ -z "$(ls $DATA_DIR)" ]; then + Print Initing pgsql db files ... + su - postgres -c "initdb --pgdata=$DATA_DIR --locale=en_US.UTF-8" + else + Print Checking pgsql db dir ... + su - postgres -c "postgresql-$VERSION-check-db-dir $DATA_DIR" + fi +} + +function StartProc { + Print Starting pgsql ... + local sock="/tmp/.s.PGSQL.$(su - postgres -c 'postmaster -C port')" + rm -f $sock + su - postgres -c postmaster & + PIDS="$PIDS $!" + while sleep 1; do + [ -e $sock ] && break || echo -n . + [ ! -e /proc/$! ] && echo && Print unexpected error! && exit + done + echo + Print PGSQL is ready for connections. +} + +function Main { + local pid= + Init + StartProc + trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM + while [ -z "$GOT_SIGTERM" ] && sleep 2; do + for pid in $PIDS; do + [ ! -e /proc/$pid ] && Print Unexpected error! && exit + done + done +} + +# Start here +Main + diff --git a/pgsql/Demo/SingleNode/README.md b/pgsql/Demo/SingleNode/README.md new file mode 100644 index 0000000..93b60d2 --- /dev/null +++ b/pgsql/Demo/SingleNode/README.md @@ -0,0 +1,21 @@ +# 部署 PostgreSQL 单节点 + +- 按实际环境修改 + - docker-compose.yml + - pgsql/conf.d/\*.cnf + +- 创建目录 + ``` + grep '\ /etc/yum.repos.d/pgsql-$VERSION.repo \ + && dnf makecache \ + && dnf -y module disable postgresql \ + && dnf install -y postgresql$VERSION-server \ + && rm -rf /var/lib/pgsql/* \ + /var/cache/dnf \ + /var/lib/dnf \ + /var/log/* \ + && rm -f /var/lib/pgsql/.bash* \ + && mkdir -p /var/log/pgsql /etc/pgsql/conf.d \ + && chown -R postgres:postgres /var/log/pgsql \ + && echo -e "# DO NOT EDIT THIS FILE!\n\ +\n\ +include_if_exists = '/var/lib/pgsql/postgresql.conf'\n\ +include_dir = 'conf.d'\n\ +include = 'fixed-parameters.conf'\n\ +" > /etc/pgsql/postgresql.conf \ + && echo -e "# DO NOT EDIT THIS FILE!\n\ +\n\ +data_directory = '/var/lib/pgsql'\n\ +hba_file = '/var/lib/pgsql/pg_hba.conf'\n\ +ident_file = '/var/lib/pgsql/pg_ident.conf'\n\ +log_destination = 'stderr'\n\ +logging_collector = on\n\ +log_directory = '/var/log/pgsql'\n\ +log_filename = 'server-%y%m%d.log'\n\ +log_file_mode = 0644\n\ +log_rotation_age = 1d\n\ +log_rotation_size = 128MB\n\ +log_truncate_on_rotation = on\n\ +" > /etc/pgsql/fixed-parameters.conf \ + && echo -e "export PGDATA=/etc/pgsql\n\ +export PATH=/usr/pgsql-$VERSION/bin:\$PATH\n\ +" > /etc/profile.d/pgsql.sh +ENV VERSION=15 +CMD ["/opt/ccmd"] + diff --git a/pgsql/README.md b/pgsql/README.md new file mode 100644 index 0000000..0facbcc --- /dev/null +++ b/pgsql/README.md @@ -0,0 +1,16 @@ +# 构建 postgresql 镜像 + +## 定制 +- 安装 postgresql +- 固定一些常用配置 +- 第一次启动 postgresql 时,会执行如下操作 + - 初始化数据目录 + +## 外挂目录和文件 +- /var/lib/pgsql/: pgsql 数据目录 +- /etc/conf.d/: pgsql 配置文件目录,覆盖数据目录下的 postgresql.conf +- /var/log/pgsql: pgsql 日志目录 + +## 案例 +- [Demo/SingleNode/](Demo/SingleNode/): 单节点 + diff --git a/pgsql/pgsql.sh b/pgsql/pgsql.sh new file mode 100755 index 0000000..c8d0181 --- /dev/null +++ b/pgsql/pgsql.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +#========================================= +# Author : colben +#========================================= + +set -euo pipefail +export LANG=en_US.UTF-8 + +[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" +ROOT_DIR="$(cd $(dirname $0) && pwd)" +VERSION=${1:?} +IMAGE="harbor.colben.cn/general/pgsql$ARCH:$VERSION" + +if [ -t 0 ]; then + function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } + function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; } + function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; } +else + function Print { echo -e "$(date +'[%F %T INFO]') $*"; } + function Warn { echo -e "$(date +'[%F %T WARN]') $*"; } + function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; } +fi + +function Quit { + local exitCode=$? + [ 0 -ne $exitCode ] && Error Failed to build or push image! + [ -z "${END:-}" ] && echo && Error Interrupted manually! + Print Succeeded to build and push image. +} + +function YesOrNo { + Warn $* + local sw= + while :; do + read -p '(Yes/No/Quit) ' -n1 sw + [[ "$sw" =~ ^Y|y$ ]] && echo && return 0 + [[ "$sw" =~ ^N|n$ ]] && echo && return 1 + [[ "$sw" =~ ^Q|q$ ]] && echo && exit 0 + [ -n "$sw" ] && echo + done +} + +function Update { + : +} + +function Build { + local yn + cd $ROOT_DIR + docker images --format='{{.Repository}}:{{.Tag}}' | grep "^$IMAGE$" \ + && Warn Removing image $IMAGE ... \ + && docker rmi $IMAGE + Warn Building image: $IMAGE ... + docker build --force-rm --build-arg ARCH="$ARCH" --build-arg VERSION="$VERSION" -t $IMAGE -f Dockerfile . + YesOrNo Push image: $IMAGE? && docker push $IMAGE +} + +function Main { + trap Quit EXIT + Update + Build + END=1 +} + +# Start here +Main + diff --git a/photon/Dockerfile b/photon/Dockerfile index 3c7d85e..0e6bf37 100644 --- a/photon/Dockerfile +++ b/photon/Dockerfile @@ -1,4 +1,4 @@ -FROM photon:4.0 +FROM photon:5 MAINTAINER Colben colbenlee@gmail.com ADD --chown=root:root /ADD/ /etc/ RUN tdnf makecache \ diff --git a/photon/photon.sh b/photon/photon.sh index 7cd2344..aa7cfcc 100755 --- a/photon/photon.sh +++ b/photon/photon.sh @@ -9,7 +9,7 @@ export LANG=en_US.UTF-8 [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" ROOT_DIR="$(cd $(dirname $0) && pwd)" -IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest" +IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:5" if [ -t 0 ]; then function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } diff --git a/rocky-python/Dockerfile b/rocky-python/Dockerfile index 5470821..834d0ee 100644 --- a/rocky-python/Dockerfile +++ b/rocky-python/Dockerfile @@ -3,5 +3,5 @@ FROM harbor.colben.cn/general/rocky$ARCH:8 MAINTAINER Colben colbenlee@gmail.com RUN dnf makecache \ && dnf install gcc gcc-c++ make cmake python39-devel mysql-devel -y \ - && rm -rf /var/cache/dnf + && rm -rf /var/cache/dnf /var/lib/dnf diff --git a/rocky8/Dockerfile b/rocky8/Dockerfile index ac037ae..79d54ae 100644 --- a/rocky8/Dockerfile +++ b/rocky8/Dockerfile @@ -17,7 +17,7 @@ gpgcheck=0\n\ && dnf makecache \ && dnf install -y ncurses iproute procps-ng glibc-langpack-en \ && echo 'alias ls="ls --color=auto"' > /etc/profile.d/docker.sh \ - && rm -rf /var/cache/dnf \ + && rm -rf /var/cache/dnf /var/lib/dnf \ && rm -rf /var/log/* ENV PS1='\[\e[33;1;1m\][\[\e[0m\]\[\e[35;1m\]\u\[\e[0m\]\[\e[33;1;1m\]@\[\e[0m\]\[\e[31;1;1m\]docker\[\e[0m\]\[\e[32;1;1m\](\h)\[\e[0m\]\[\e[33;1;1m\]:\[\e[0m\]\[\e[32m\]\w\[\e[0m\]\[\e[33;1;1m\]]\[\e[0m\]\[\e[36m\]\$\[\e[0m\] ' ENV PS2='\[\e[36m\]>\[\e[0m\] '