9 Commits

Author SHA1 Message Date
ae36bab6ec - Fix docker_mk_env config sed generation. 2024-12-27 13:48:07 +01:00
7a4ee6f87f - Add docker_config_add command for docker_mk_env. 2024-12-23 00:00:27 +01:00
57fc0d82a5 - Add missing new files! 2024-12-16 10:27:35 +01:00
1ffaa822e6 - Add docker_mk_dir & docker_tools_install commands. 2024-12-14 08:40:32 +01:00
a1cdbcdac2 - Implement volume modes,
- Add DOCKER_TOOLS_VOLUME & DOCKER_TOOLS_EXECPTION_LIBS env variables.
2024-11-26 17:44:43 +01:00
7bf4bc661a - Add prefix_add function. 2024-11-25 01:08:25 +01:00
ce4241ff9e - Add service_name to docker_service_add function. 2024-11-23 10:50:07 +01:00
58f1259e90 - Improve docker_service_add function.
- Warning: API break!
2024-11-17 19:30:48 +01:00
9462b195c5 - Move repo from Rx3/docker_tools to Rx3-Docker/docker_tools,
- docker_service_add:
    - Add *_LOG_* variable generation,
- Add docker_build_push command.
2024-11-15 20:18:44 +01:00
6 changed files with 445 additions and 20 deletions

View File

@@ -1,13 +1,20 @@
Welcome to Docker Tools!
Welcome to Rx3-Docker/Docker Tools!
This is project aims to give some basic tools to be used by others Rx3 docker packaging projects.
This project aims to give some basic tools to be used by other Rx3 docker packaging projects.
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_start, docker_stop & docker_logs command,
- docker_service_add env file function.
- docker_service_add env file function,
- docker_build_push.
Support different mounted volume modes:
- Single,
- Merged, (Old mode)
- Splited. (Default)
Enjoy it!
@@ -16,4 +23,4 @@ Your Docker Tools Team.
--
arnaud@rx3.net
https://git.rx3.org/gitea/rx3/docker_tools
https://git.rx3.org/gitea/rx3-docker/docker_tools

View File

@@ -1,3 +1,41 @@
------------------------------------------------------------------------------------------------------------------------------------
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
------------------------------------------------------------------------------------------------------------------------------------
- Improve docker_service_add function,
- Switch by default to splited volume mode,
- Add DOCKER_TOOLS_DEBUG, DOCKER_TOOLS_VOLUME & DOCKER_TOOLS_EXECPTION_LIBS env variable support.
- Warning: API break!
------------------------------------------------------------------------------------------------------------------------------------
Rx3-Docker/Docker Tools V 1.2.0 - A. GIBERT - 2024/11/15
------------------------------------------------------------------------------------------------------------------------------------
- Move repo from Rx3/docker_tools to Rx3-Docker/docker_tools,
- docker_service_add:
- Add *_LOG_* variable generation,
- Add docker_build_push command.
------------------------------------------------------------------------------------------------------------------------------------
Docker Tools V 1.1.0 - A. GIBERT - 2024/11/03
------------------------------------------------------------------------------------------------------------------------------------

15
sbin/docker_build_push Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
#-------------------------------------------------------------------------------
set -o errexit
APPL_HOME_DIR="$(dirname "$(dirname "$0")")"
#-------------------------------------------------------------------------------
sbin/docker_mk_env
docker compose build
docker compose push

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

@@ -1,10 +1,30 @@
#!/bin/bash
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#
# DOCKER_TOOLS_DEBUG= TRUE | FALSE # Enable debugging (Default FALSE)
#
# DOCKER_TOOLS_VOLUME= SINGLE | MERGED | SPLITED # Default: SPLITED
# SINGLE: Merged volume mode + No service suffix
# MERGED: Merged volume mode + Service suffix
# SPLITED: By service volume mode + No service suffix
#
# DOCKER_TOOLS_EXEPTION_LIBS="module_name:lib_dir_name ..."
# Example: postgres:pgsq
#
#-------------------------------------------------------------------------------
set -o errexit
if [[ "${DOCKER_TOOLS_DEBUG}" == "TRUE" ]]
then
set -x
fi
APPL_HOME_DIR="$(dirname "$(dirname "$0")")"
DYNVAR_LIST=""
DYNVAR_LIST="APPL_HOME_DIR"
CONFIG_FILE_LIST=""
version="$1"
@@ -24,53 +44,288 @@ function dynvar_export
#-------------------------------------------------------------------------------
function psfix_cat
{
prefix=$1
separator=$2
suffix=$3
if [[ "${prefix}" == "" ]] || [[ "${suffix}" == "" ]]
then
separator=""
fi
echo "${prefix}${separator}${suffix}"
}
#-------------------------------------------------------------------------------
function module_lib_name_get
{
module=$1
for tup in ${DOCKER_TOOLS_EXEPTION_LIBS}
do
if [[ "${module}" == "${tup/:*}" ]]
then
echo ${tup/*:}
return
fi
done
echo "${module}"
}
#-------------------------------------------------------------------------------
function docker_service_add
{
varible_prefix="$1"
shift
for var in service_name target_url_prefix target_name target_name_full target_version from_url_prefix from_name from_version module_name module_version port_main_ext port_main_int port_admin_ext port_admin_int user_name_id group_name_id
do
eval ${var}=\"${1}\"
shift
done
for var in NAME NAME_FULL URL_PREFIX IMG_NAME VERSION_EXT VERSION_INT PORT_MAIN_EXT PORT_MAIN_INT PORT_ADMIN_EXT PORT_ADMIN_INT USER_NAME GROUP_NAME
# Service variables
dynvar_export "${varible_prefix}_SERVICE_NAME" "${service_name}"
# Global Image variables
if [[ "${target_name}" == "-" ]]
then
target_name="${service_name}"
fi
dynvar_export "${varible_prefix}_IMG_NAME" "${target_name}"
dynvar_export "${varible_prefix}_IMG_NAME_FULL" "${target_name_full}"
dynvar_export "${varible_prefix}_IMG_VERSION" "${target_version}"
dynvar_export "${varible_prefix}_IMG_MAINTAINER" "\${ORG_MAINTAINER}"
dynvar_export "${varible_prefix}_IMG_URL" "${target_url_prefix}/${target_name}:${target_version}"
if [[ "${service_name}" == "${APPL_NAME}" ]]
then
dynvar_export "${varible_prefix}_IMG_URL" "${target_url_prefix}:${target_version}"
dynvar_export "${varible_prefix}_HOST_NAME" "$( psfix_cat "${HOST_NAME_PREFIX}" "-" "webapp")"
else
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}")"
fi
# Building variables
if [[ "${module_name}" == "-" ]]
then
module_name="${target_name}"
fi
if [[ "${target_name_full}" != "-" ]]
then
# Build
dynvar_export "${varible_prefix}_MODULE_NAME" "${module_name}"
dynvar_export "${varible_prefix}_MODULE_PATH" "src/${module_name}"
dynvar_export "${varible_prefix}_MODULE_VERSION" "${module_version}"
dynvar_export "${varible_prefix}_IMG_FROM_URL" "${from_url_prefix}/${from_name}:${from_version}"
fi
# Volume Directories
if [[ "${APPL_NAME}" != "" ]]
then
dynvar_export "${varible_prefix}_CONTEXT_PATH" "/${APPL_NAME}/${service_name}/"
else
DOCKER_TOOLS_VOLUME="SINGLE"
dynvar_export "${varible_prefix}_CONTEXT_PATH" "/${service_name}/"
fi
if [[ "${DOCKER_TOOLS_VOLUME}" == "" ]]
then
DOCKER_TOOLS_VOLUME="SPLITED"
fi
if [[ "${DOCKER_TOOLS_VOLUME}" != "SPLITED" ]]
then
volume_prefix="."
else
volume_prefix="./mnt/${service_name}"
fi
if [[ "${DOCKER_TOOLS_VOLUME}" != "MERGED" ]]
then
volume_suffix_ext=""
else
volume_suffix_ext="${service_name}"
fi
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}
dynvar_export "${varible_prefix}_LIB_INT" "${module_lib_path}"
dynvar_export "${varible_prefix}_LIB_EXT" "$( psfix_cat "${volume_prefix}${module_lib_path}" "-" "${volume_suffix_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_EXT" "$( psfix_cat "${volume_prefix}/var/log/init" "-" "${volume_suffix_ext}")"
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_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
if [[ "${port_main_int}" != "-" ]]
then
dynvar_export "${varible_prefix}_PORT_MAIN_INT" "${port_main_int}"
dynvar_export "${varible_prefix}_PORT_MAIN_EXT" "\$(( ${port_main_ext} + ${PORT_ENV_OFFSET}))"
fi
if [[ "${PORT_SV_INT}" != "" ]]
then
dynvar_export "${varible_prefix}_PORT_SV_INT" "${PORT_SV_INT}"
dynvar_export "${varible_prefix}_PORT_SV_EXT" "\$(( \${${varible_prefix}_PORT_MAIN_EXT} + ${PORT_SV_OFFSET}))"
fi
if [[ "${port_admin_int}" != "-" ]]
then
dynvar_export "${varible_prefix}_PORT_ADMIN_INT" "${port_admin_int}"
dynvar_export "${varible_prefix}_PORT_ADMIN_EXT" "\$(( ${port_admin_ext} + ${PORT_ENV_OFFSET}))"
fi
# User & Group
if [[ "${user_name_id}" == "-" ]]
then
user_name="-"
user_id="-"
else
if [[ "${user_name_id}" =~ ^[0-9]+$ ]]
then
user_name="-"
user_id="${user_name_id}"
else
user_name="${user_name_id}"
user_id="$( id -u "${user_name}")"
fi
fi
dynvar_export "${varible_prefix}_USER_NAME" "${user_name}"
dynvar_export "${varible_prefix}_USER_ID" "${user_id}"
if [[ "${group_name_id}" == "-" ]]
then
group_name="-"
group_id="-"
else
if [[ "${group_name_id}" =~ ^[0-9]+$ ]]
then
group_name="-"
group_id="${group_name_id}"
else
group_name="${group_name_id}"
group_id="$( getent group "${group_name}" | cut -d: -f3)"
fi
fi
dynvar_export "${varible_prefix}_GROUP_NAME" "${group_name}"
dynvar_export "${varible_prefix}_GROUP_ID" "${group_id}"
}
#-------------------------------------------------------------------------------
function docker_service_add-12
{
varible_prefix="$1"
shift
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"
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_INT}"
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_INT}"
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}"
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}_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"
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}))"
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" "-"
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}"
dynvar_export "${varible_prefix}_USER_ID" "\${${varible_prefix}_USER_NAME}"
else
dynvar_export "${varible_prefix}_USER_ID" "\$( id -u \${${varible_prefix}_USER_NAME})"
dynvar_export "${varible_prefix}_USER_ID" "\$( id -u \${${varible_prefix}_USER_NAME})"
fi
fi
@@ -94,6 +349,18 @@ function docker_service_add
#-------------------------------------------------------------------------------
function docker_config_add
{
config_file_target="$1"
config_file_source="$2"
CONFIG_FILE_LIST+=" ${config_file_target}:${config_file_source}"
}
#-------------------------------------------------------------------------------
. ${APPL_HOME_DIR}/env
@@ -110,8 +377,25 @@ fi
>${APPL_HOME_DIR}/.env
>${APPL_HOME_DIR}/.env.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)
do
echo "${var}='${!var}'" >>${APPL_HOME_DIR}/.env
echo "${var}='${!var}'" >>${APPL_HOME_DIR}/.env
echo "s/\${${var}}/${!var//\//\\/}/g" >>${APPL_HOME_DIR}/.env.sed
done
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} -f ${APPL_HOME_DIR}/.env.sed
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