12 Commits

5 changed files with 264 additions and 98 deletions

View File

@@ -5,6 +5,7 @@ Welcome to Rx3-Docker/Docker Tools!
This project aims to give some basic tools to be used by other Rx3 docker packaging projects. This project aims to give some basic tools to be used by other Rx3 docker packaging projects.
Features: Features:
- docker_tools_install & docker_mk_dir to setup a new application environment,
- docker_mk_env command to compile env file into .env file, - docker_mk_env command to compile env file into .env file,
- docker_start, docker_stop & docker_logs command, - docker_start, docker_stop & docker_logs command,
- docker_service_add env file function, - docker_service_add env file function,
@@ -12,8 +13,9 @@ Features:
Support different mounted volume modes: Support different mounted volume modes:
- Single, - Single,
- Merged, (Old mode) - Mixed (Old mode),
- Splited. (Default) - Merged,
- Splited (Default).
Enjoy it! Enjoy it!

View File

@@ -1,10 +1,67 @@
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.7 - A. GIBERT - 2025/03/31
------------------------------------------------------------------------------------------------------------------------------------
- Remove ${service_name} == ${APPL_NAME} exption hangling of *_IMG_URL.
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.6 - A. GIBERT - 2025/01/31
------------------------------------------------------------------------------------------------------------------------------------
- Add a new DOCKER_TOOLS_USER_GROUP_FORCE env variable support.
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.5 - A. GIBERT - 2025/01/24
------------------------------------------------------------------------------------------------------------------------------------
- Add a new DOCKER_TOOLS_VOLUME mode: "MIXED".
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.4 - A. GIBERT - 2025/01/13
------------------------------------------------------------------------------------------------------------------------------------
- Replace ENV_SED by ENV_NET_SED environment variable.
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.3 - A. GIBERT - 2025/01/05
------------------------------------------------------------------------------------------------------------------------------------
- Add DOCKER_TOOLS_EXEPTION_LOGS env variable support,
- Remove .env.sed file obsoleted by ENV_SED environment variable.
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.2 - A. GIBERT - 2024/12/27
------------------------------------------------------------------------------------------------------------------------------------
- Add docker_config_add function for docker_mk_env to support config file generation.
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.1 - A. GIBERT - 2024/12/14
------------------------------------------------------------------------------------------------------------------------------------
- Add docker_mk_dir & docker_tools_install commands.
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.3.0 - A. GIBERT - 2024/11/26 Rx3-Docker/Docker Tools V 1.3.0 - A. GIBERT - 2024/11/26
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
- Improve docker_service_add function, - Improve docker_service_add function,
- Switch by default to splited volume mode, - Switch by default to splited volume mode,
- Add DOCKER_TOOLS_DEBUG, DOCKER_TOOLS_VOLUME & DOCKER_TOOLS_EXECPTION_LIBS env variable support. - Add DOCKER_TOOLS_DEBUG, DOCKER_TOOLS_VOLUME & DOCKER_TOOLS_EXEPTION_LIBS env variable support.
- Warning: API break! - Warning: API break!

33
sbin/docker_mk_dir Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/bash
#-------------------------------------------------------------------------------
#set -o errexit
grep -e _LOG_ -e _LIB_ .env | grep -e _EXT= | while read line
do
OIFS=$IFS
IFS="="
set $line
IFS=$OIFS
grep $1 compose.yaml >/dev/null
if [[ "$?" == "0" ]]
then
eval echo $2
fi
done | sort -u | while read dir
do
echo "Add/Create: [${dir}]"
mkdir -p ${dir}
echo -e '# Ignore everything in this directory\n*\n# Except this file\n!.gitignore' > ${dir}/.gitignore
git add ${dir}/.gitignore
done

View File

@@ -5,25 +5,32 @@
# #
# DOCKER_TOOLS_DEBUG= TRUE | FALSE # Enable debugging (Default FALSE) # DOCKER_TOOLS_DEBUG= TRUE | FALSE # Enable debugging (Default FALSE)
# #
# DOCKER_TOOLS_VOLUME= SINGLE | MERGED | SPLITED # Default: SPLITED # DOCKER_TOOLS_VOLUME= SINGLE | MIXED | MERGED | SPLITED # Default: SPLITED
# SINGLE: Merged volume mode + No service suffix # SINGLE: Merged volume mode + No service suffix
# MERGED: Merged volume mode + Service suffix # MIXED: Merged volume mode + Init/SV log Service suffix
# MERGED: Merged volume mode + Full service suffix
# SPLITED: By service volume mode + No service suffix # SPLITED: By service volume mode + No service suffix
# #
# DOCKER_TOOLS_EXECPTION_LIBS="module_name:lib_dir_name ..." # DOCKER_TOOLS_EXEPTION_LIBS="module_name:lib_dir_name ..."
# Example: postgres:pgsq # Example: "postgres:pgsq httpd:/var/www/html"
#
# DOCKER_TOOLS_EXEPTION_LOGS="module_name:log_dir_name ..."
# Example: "postgres:web-server:httpd"
#
# DOCKER_TOOLS_USER_GROUP_FORCE= TRUE | FALSE # Force using curent user / group (Default FALSE)
# #
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
set -o errexit set -o errexit
if [[ "$DOCKER_TOOLS_DEBUG" == "TRUE" ]] if [[ "${DOCKER_TOOLS_DEBUG}" == "TRUE" ]]
then then
set -x set -x
fi fi
APPL_HOME_DIR="$(dirname "$(dirname "$0")")" APPL_HOME_DIR="$(dirname "$(dirname "$0")")"
DYNVAR_LIST="APPL_HOME_DIR" DYNVAR_LIST="APPL_HOME_DIR"
CONFIG_FILE_LIST=""
version="$1" version="$1"
@@ -66,7 +73,26 @@ function module_lib_name_get
{ {
module=$1 module=$1
for tup in ${DOCKER_TOOLS_EXECPTION_LIBS} for tup in ${DOCKER_TOOLS_EXEPTION_LIBS}
do
if [[ "${module}" == "${tup/:*}" ]]
then
echo ${tup/*:}
return
fi
done
echo "${module}"
}
#-------------------------------------------------------------------------------
function module_log_name_get
{
module=$1
for tup in ${DOCKER_TOOLS_EXEPTION_LOGS}
do do
if [[ "${module}" == "${tup/:*}" ]] if [[ "${module}" == "${tup/:*}" ]]
then then
@@ -114,10 +140,10 @@ function docker_service_add
if [[ "${service_name}" == "${APPL_NAME}" ]] if [[ "${service_name}" == "${APPL_NAME}" ]]
then then
dynvar_export "${varible_prefix}_IMG_URL" "${target_url_prefix}:${target_version}" # dynvar_export "${varible_prefix}_IMG_URL" "${target_url_prefix}:${target_version}"
dynvar_export "${varible_prefix}_HOST_NAME" "$( psfix_cat "${HOST_NAME_PREFIX}" "-" "webapp")" dynvar_export "${varible_prefix}_HOST_NAME" "$( psfix_cat "${HOST_NAME_PREFIX}" "-" "webapp")"
else else
dynvar_export "${varible_prefix}_IMG_URL" "${target_url_prefix}/${target_name}:${target_version}" # dynvar_export "${varible_prefix}_IMG_URL" "${target_url_prefix}/${target_name}:${target_version}"
dynvar_export "${varible_prefix}_HOST_NAME" "$( psfix_cat "${HOST_NAME_PREFIX}" "-" "${service_name}")" dynvar_export "${varible_prefix}_HOST_NAME" "$( psfix_cat "${HOST_NAME_PREFIX}" "-" "${service_name}")"
fi fi
@@ -164,27 +190,60 @@ function docker_service_add
volume_prefix="./mnt/${service_name}" volume_prefix="./mnt/${service_name}"
fi fi
if [[ "${DOCKER_TOOLS_VOLUME}" != "MERGED" ]]
if [[ "${DOCKER_TOOLS_VOLUME}" == "SINGLE" ]] || [[ "${DOCKER_TOOLS_VOLUME}" == "SPLITED" ]]
then then
volume_suffix_ext="" volume_suffix_initsv_ext=""
volume_suffix_module_ext=""
else else
volume_suffix_ext="${service_name}" volume_suffix_initsv_ext="${service_name}"
if [[ "${DOCKER_TOOLS_VOLUME}" == "MIXED" ]]
then
volume_suffix_module_ext=""
else
volume_suffix_module_ext="${service_name}"
fi fi
fi
module_lib_name="$( module_lib_name_get "${module_name}")" module_lib_name="$( module_lib_name_get "${module_name}")"
if [[ "${module_lib_name}" != /* ]]
then
path_prefix="/var/lib/"
else
path_prefix=""
fi
module_lib_path=${path_prefix}${module_lib_name}
module_log_name="$( module_log_name_get "${module_name}")"
if [[ "${module_log_name}" != /* ]]
then
path_prefix="/var/log/"
else
path_prefix=""
fi
module_log_path=${path_prefix}${module_log_name}
dynvar_export "${varible_prefix}_LIB_INT" "${module_lib_path}"
dynvar_export "${varible_prefix}_LIB_EXT" "$( psfix_cat "${volume_prefix}${module_lib_path}" "-" "${volume_suffix_module_ext}")"
dynvar_export "${varible_prefix}_LIB_INT" "/var/lib/${module_lib_name}"
dynvar_export "${varible_prefix}_LIB_EXT" "$( psfix_cat "${volume_prefix}/var/lib/${module_lib_name}" "-" "${volume_suffix_ext}")"
dynvar_export "${varible_prefix}_LOG_INIT_INT" "/var/log/init" dynvar_export "${varible_prefix}_LOG_INIT_INT" "/var/log/init"
dynvar_export "${varible_prefix}_LOG_INIT_EXT" "$( psfix_cat "${volume_prefix}/var/log/init" "-" "${volume_suffix_ext}")" dynvar_export "${varible_prefix}_LOG_INIT_EXT" "$( psfix_cat "${volume_prefix}/var/log/init" "-" "${volume_suffix_initsv_ext}")"
dynvar_export "${varible_prefix}_LOG_SV_INT" "/var/log/supervisor" dynvar_export "${varible_prefix}_LOG_SV_INT" "/var/log/supervisor"
dynvar_export "${varible_prefix}_LOG_SV_EXT" "$( psfix_cat "${volume_prefix}/var/log/supervisor" "-" "${volume_suffix_ext}")" dynvar_export "${varible_prefix}_LOG_SV_EXT" "$( psfix_cat "${volume_prefix}/var/log/supervisor" "-" "${volume_suffix_initsv_ext}")"
dynvar_export "${varible_prefix}_LOG_MAIN_INT" "${module_log_path}"
dynvar_export "${varible_prefix}_LOG_MAIN_EXT" "$( psfix_cat "${volume_prefix}${module_log_path}" "-" "${volume_suffix_module_ext}")"
dynvar_export "${varible_prefix}_LOG_MAIN_INT" "/var/log/${module_name}"
dynvar_export "${varible_prefix}_LOG_MAIN_EXT" "$( psfix_cat "${volume_prefix}/var/log/${module_name}" "-" "${volume_suffix_ext}")"
# Ports # Ports
@@ -215,6 +274,11 @@ function docker_service_add
user_name="-" user_name="-"
user_id="-" user_id="-"
else else
if [[ "${DOCKER_TOOLS_USER_GROUP_FORCE}" == "TRUE" ]]
then
user_name_id=$( id -u)
fi
if [[ "${user_name_id}" =~ ^[0-9]+$ ]] if [[ "${user_name_id}" =~ ^[0-9]+$ ]]
then then
user_name="-" user_name="-"
@@ -234,6 +298,11 @@ function docker_service_add
group_name="-" group_name="-"
group_id="-" group_id="-"
else else
if [[ "${DOCKER_TOOLS_USER_GROUP_FORCE}" == "TRUE" ]]
then
group_name_id=$( id -g)
fi
if [[ "${group_name_id}" =~ ^[0-9]+$ ]] if [[ "${group_name_id}" =~ ^[0-9]+$ ]]
then then
group_name="-" group_name="-"
@@ -251,85 +320,13 @@ function docker_service_add
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
function docker_service_add-12 function docker_config_add
{ {
varible_prefix="$1" config_file_target="$1"
shift config_file_source="$2"
for var in NAME NAME_FULL URL_PREFIX IMG_NAME APPL_NAME VERSION_EXT VERSION_INT PORT_MAIN_EXT PORT_MAIN_INT PORT_ADMIN_EXT PORT_ADMIN_INT USER_NAME GROUP_NAME
do
dynvar_export "${varible_prefix}_${var}" "$1"
shift
done
dynvar_export "${varible_prefix}_LOG_INIT_INT" "/var/log/init" CONFIG_FILE_LIST+=" ${config_file_target}:${config_file_source}"
dynvar_export "${varible_prefix}_LOG_INIT_EXT" "./var/log/init-\${${varible_prefix}_NAME}"
dynvar_export "${varible_prefix}_LOG_SV_INT" "/var/log/supervisor"
dynvar_export "${varible_prefix}_LOG_SV_EXT" "./var/log/supervisor-\${${varible_prefix}_NAME}"
if [[ $( eval echo \${${varible_prefix}_APPL_NAME}) != "-" ]]
then
dynvar_export "${varible_prefix}_LIB_INT" "/var/lib/\${${varible_prefix}_APPL_NAME}"
dynvar_export "${varible_prefix}_LIB_EXT" "./var/lib/\${${varible_prefix}_APPL_NAME}"
dynvar_export "${varible_prefix}_LOG_MAIN_INT" "/var/log/\${${varible_prefix}_APPL_NAME}"
dynvar_export "${varible_prefix}_LOG_MAIN_EXT" "./var/log/\${${varible_prefix}_APPL_NAME}"
fi
if [[ $( eval echo \${${varible_prefix}_IMG_NAME}) != "-" ]]
then
# No Build
dynvar_export "${varible_prefix}_IMG_URL" "\${${varible_prefix}_URL_PREFIX}/\${${varible_prefix}_IMG_NAME}:\${${varible_prefix}_VERSION_EXT}"
else
# Build
dynvar_export "${varible_prefix}_IMG_URL" "\${${varible_prefix}_URL_PREFIX}/\${${varible_prefix}_NAME}:\${${varible_prefix}_VERSION_EXT}"
dynvar_export "${varible_prefix}_MODULE_NAME" "\${${varible_prefix}_NAME}"
dynvar_export "${varible_prefix}_MODULE_PATH" "src/\${${varible_prefix}_NAME}"
fi
dynvar_export "${varible_prefix}_CONTAINER_NAME" "${CONTAINER_NAME_PREFIX}-\${${varible_prefix}_NAME}"
dynvar_export "${varible_prefix}_HOST" "\${${varible_prefix}_CONTAINER_NAME}"
dynvar_export "${varible_prefix}_PORT_MAIN_EXT" "\$(( \${${varible_prefix}_PORT_MAIN_EXT} + ${PORT_ENV_OFFSET}))"
dynvar_export "${varible_prefix}_PORT_SV_EXT" "\$(( \${${varible_prefix}_PORT_MAIN_EXT} + ${PORT_SV_OFFSET}))"
dynvar_export "${varible_prefix}_PORT_SV_INT" "9001"
if [[ $( eval echo \${${varible_prefix}_PORT_ADMIN_EXT}) != "-" ]]
then
dynvar_export "${varible_prefix}_PORT_ADMIN_EXT" "\$(( \${${varible_prefix}_PORT_ADMIN_EXT} + ${PORT_ENV_OFFSET}))"
fi
if [[ $( eval echo \${${varible_prefix}_USER_NAME}) == "-" ]]
then
dynvar_export "${varible_prefix}_USER_ID" "-"
else
if [[ $( eval echo \${${varible_prefix}_USER_NAME}) =~ ^[0-9]+$ ]]
then
dynvar_export "${varible_prefix}_USER_ID" "\${${varible_prefix}_USER_NAME}"
else
dynvar_export "${varible_prefix}_USER_ID" "\$( id -u \${${varible_prefix}_USER_NAME})"
fi
fi
if [[ $( eval echo \${${varible_prefix}_GROUP_NAME}) == "-" ]]
then
dynvar_export "${varible_prefix}_GROUP_ID" "-"
else
if [[ $( eval echo \${${varible_prefix}_GROUP_NAME}) =~ ^[0-9]+$ ]]
then
dynvar_export "${varible_prefix}_GROUP_ID" "\${${varible_prefix}_GROUP_NAME}"
else
dynvar_export "${varible_prefix}_GROUP_ID" "\$( getent group \${${varible_prefix}_GROUP_NAME} | cut -d: -f3)"
fi
fi
dynvar_export "${varible_prefix}_CONTEXT_PATH" "/${APPL_NAME}/\${${varible_prefix}_NAME}/"
# dynvar_export "${varible_prefix}_" "${varible_prefix}_${}"
} }
@@ -350,8 +347,37 @@ fi
>${APPL_HOME_DIR}/.env >${APPL_HOME_DIR}/.env
ENV_SED=""
ENV_NET_SED=""
for var in $( ( grep "^ *[a-zA-Z0-9_-]*=" ${APPL_HOME_DIR}/env | sed -e "s/=.*//" -e "s/ *//"; echo ${DYNVAR_LIST} | sed -e 's/ /\n/g') | sort -u) for var in $( ( grep "^ *[a-zA-Z0-9_-]*=" ${APPL_HOME_DIR}/env | sed -e "s/=.*//" -e "s/ *//"; echo ${DYNVAR_LIST} | sed -e 's/ /\n/g') | sort -u)
do do
echo "${var}='${!var}'" >>${APPL_HOME_DIR}/.env echo "${var}='${!var}'" >>${APPL_HOME_DIR}/.env
pat="s/\${${var}}/${!var//\//\\/}/g
"
ENV_SED="${ENV_SED}${pat}"
if [[ ${var} =~ _HOST_ ]] || ( [[ ${var} =~ _PORT_ ]] && [[ ${var} =~ _INT ]])
then
ENV_NET_SED="${ENV_NET_SED}${pat}"
fi
done
echo ENV_NET_SED=\'"${ENV_NET_SED}"\' >>${APPL_HOME_DIR}/.env
for tupple in ${CONFIG_FILE_LIST}
do
IFS=":"
set ${tupple}
config_file_target="$1"
config_file_source="$2"
IFS=" "
sed <${config_file_source} >${config_file_target} -e "${ENV_SED}"
done done

48
sbin/docker_tools_install Executable file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
#-------------------------------------------------------------------------------
set -o errexit
DOCKER_TOOLS_HOME_DIR="$(dirname "$(dirname "$0")")"
if [[ "$1" == "" ]]
then
APPL_HOME_DIR="$PWD"
else
APPL_HOME_DIR="$1"
fi
#-------------------------------------------------------------------------------
function link_create
{
source="$1"
target="$2"
if [[ -d "$target" ]]
then
real_target=${target}/$( basename "${source}")
else
real_target=${target}
fi
if [[ -e "${real_target}" ]]
then
mv ${real_target} ${real_target}.old
fi
ln -s ${source} ${target}
}
#-------------------------------------------------------------------------------
DOCKER_TOOLS_HOME_DIR=$( realpath --relative-to ${APPL_HOME_DIR} ${DOCKER_TOOLS_HOME_DIR})
cd ${APPL_HOME_DIR}
link_create ${DOCKER_TOOLS_HOME_DIR}/sbin .
link_create env.dist env