Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refine build files #73

Merged
merged 8 commits into from
Nov 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 33 additions & 18 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,11 @@ jobs:
- uses: actions/checkout@v3
- run: |
source ./tool.sh
build_image jdk17 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=17" && push_image
build_image jdk11 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=11" && alias_image jdk11 latest jdk latest && push_image
build_image jdk8 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=8" && push_image
build_image jdk17 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=17"
build_image jdk11 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=11"
build_image jdk8 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=8"
alias_image jdk11 latest jdk latest
push_image jdk

qpod_julia:
name: qpod/julia
Expand Down Expand Up @@ -173,11 +175,11 @@ jobs:
- uses: actions/checkout@v3
- run: |
source ./tool.sh
build_image cuda_11.6 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04"
build_image cuda_11.6 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_11.6"
build_image cuda_11.6 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_11.6"
build_image tmp latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04" && docker rmi nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
build_image tmp latest docker_base/Dockerfile --build-arg "BASE_IMG=tmp"
build_image cuda_11.6 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=tmp"
alias_image cuda_11.6 latest cuda latest
push_image
push_image cuda

qpod_cuda_11_2:
name: qpod/cuda_11.2
Expand All @@ -186,11 +188,10 @@ jobs:
- uses: actions/checkout@v3
- run: |
source ./tool.sh
build_image cuda_11.2 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04"
build_image cuda_11.2 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_11.2"
build_image cuda_11.2 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_11.2"
alias_image cuda_11.2 latest cuda latest
push_image
build_image tmp latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04" && docker rmi nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04
build_image tmp latest docker_base/Dockerfile --build-arg "BASE_IMG=tmp"
build_image cuda_11.2 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=tmp"
push_image cuda

# For legacy torch/paddle support
qpod_cuda_10_2:
Expand All @@ -200,21 +201,24 @@ jobs:
- uses: actions/checkout@v3
- run: |
source ./tool.sh
build_image cuda_10.2 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04"
build_image cuda_10.2 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_10.2"
build_image cuda_10.2 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_10.2" && push_image
build_image tmp latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04" && docker rmi nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04
build_image tmp latest docker_base/Dockerfile --build-arg "BASE_IMG=tmp"
build_image cuda_10.2 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=tmp"
push_image cuda

# cuda_10.0 - for legacy tensorflow 1.15 support
# The cuda version 10.0 image is solely serverd for legacy tensorflow 1.15, which requires python 3.7
qpod_cuda_10_0:
name: qpod/cuda_10.0
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: |
source ./tool.sh
build_image cuda_10.0 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04"
build_image cuda_10.0 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_10.0"
build_image cuda_10.0 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_10.0" && push_image
build_image tmp latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04" && docker rmi nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
build_image tmp latest docker_base/Dockerfile --build-arg "BASE_IMG=tmp" --build-arg "PYTHON_VERSION=3.7"
build_image cuda_10.0 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=tmp"
push_image cuda


qpod_tf1:
Expand Down Expand Up @@ -300,6 +304,17 @@ jobs:
alias_image py-nlp-cuda116 latest py-nlp latest
push_image

qpod_py-nlp-cuda112:
name: qpod/py-nlp-cuda112
needs: qpod_base
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: |
source ./tool.sh
build_image py-nlp-cuda112 latest docker_core/Dockerfile --build-arg "BASE_IMG=cuda_11.2" --build-arg "ARG_PROFILE_PYTHON=datascience,mkl,torch,nlp"
push_image

qpod_py-nlp-cuda102:
name: qpod/py-nlp-cuda102
needs: qpod_base
Expand Down
54 changes: 19 additions & 35 deletions docker_atom/work/script-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ setup_mamba() {


setup_conda_postprocess() {
ln -sf ${CONDA_PREFIX}/bin/python3 /usr/bin/python

# If python exists, set pypi source
if [ -f "$(which python)" ]; then
cat >/etc/pip.conf <<EOF
Expand All @@ -31,8 +29,8 @@ trusted-host=pypi.python.org pypi.org files.pythonhosted.org
EOF
fi

echo 'export PATH=$PATH:${CONDA_PREFIX}/bin' >> /etc/profile
ln -sf ${CONDA_PREFIX}/bin/conda /usr/bin/
echo "export PATH=$PATH:${CONDA_PREFIX}/bin" >> /etc/profile
ln -sf "${CONDA_PREFIX}/bin/conda" /usr/bin/

conda config --system --prepend channels conda-forge \
&& conda config --system --set auto_update_conda false \
Expand All @@ -41,27 +39,30 @@ EOF
&& conda config --system --set channel_priority strict \
&& conda update --all --quiet --yes

# remove non-necessary folder/symlink "python3.1" exists
rm -rf "${CONDA_PREFIX}"/bin/python3.1

# These conda pkgs shouldn't be removed (otherwise will cause RemoveError) since they are directly required by conda: pip setuptools pycosat pyopenssl requests ruamel_yaml
CONDA_PY_PKGS=$(conda list | grep "py3" | cut -d " " -f 1 | sed "/#/d;/conda/d;/pip/d;/setuptools/d;/pycosat/d;/pyopenssl/d;/requests/d;/ruamel_yaml/d;") \
&& conda remove --force -yq "${CONDA_PY_PKGS}" \
&& pip install -UIq pip setuptools "${CONDA_PY_PKGS}"
# CONDA_PY_PKGS=$(conda list | grep "py3" | cut -d " " -f 1 | sed "/#/d;/conda/d;/pip/d;/setuptools/d;/pycosat/d;/pyopenssl/d;/requests/d;/ruamel_yaml/d;") \
# && conda remove --force -yq "${CONDA_PY_PKGS}" \
# && pip install -UIq pip setuptools "${CONDA_PY_PKGS}" \
# && rm -rf "${CONDA_PREFIX}"/pkgs/*

# Print Conda and Python packages information in the docker build log
echo "@ Version of Conda & Python:" && conda info && conda list | grep -v "<pip>"
}

setup_conda_with_mamba() {
mkdir -pv ${CONDA_PREFIX}
VERSION_PYTHON=$1; shift 1;
mamba install -y --root-prefix="${CONDA_PREFIX}" --prefix="${CONDA_PREFIX}" -c "conda-forge" conda pip python="${VERSION_PYTHON:-3.10}"
rm -rf ${CONDA_PREFIX}/pkgs/*
mkdir -pv "${CONDA_PREFIX}"
VERSION_PYTHON=${1:-"3.10"}; shift 1;
mamba install -y --root-prefix="${CONDA_PREFIX}" --prefix="${CONDA_PREFIX}" -c "conda-forge" conda pip python="${VERSION_PYTHON}"
setup_conda_postprocess
}

setup_conda_download() {
mkdir -pv ${CONDA_PREFIX}
mkdir -pv "${CONDA_PREFIX}"
wget -qO- "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-$(arch).sh" -O /tmp/conda.sh
bash /tmp/conda.sh -f -b -p ${CONDA_PREFIX}/
bash /tmp/conda.sh -f -b -p "${CONDA_PREFIX}/"
rm -rf /tmp/conda.sh
setup_conda_postprocess
}
Expand All @@ -76,7 +77,7 @@ setup_tini() {


setup_nvtop() {
# Install Utilities `nvtop`
# Install Utilities "nvtop"
sudo apt-get -qq update --fix-missing && sudo apt-get -qq install -y --no-install-recommends libncurses5-dev

DIRECTORY=$(pwd)
Expand Down Expand Up @@ -105,7 +106,7 @@ setup_java_base() {
&& JDK_URL_ORCA=$(curl -sL ${JDK_PAGE_DOWNLOAD} | grep "tar.gz" | grep "http" | grep -v sha256 | grep ${ARCH} | grep -i $(uname) | sed "s/'/\"/g" | sed -n 's/.*="\([^"]*\).*/\1/p' | grep "jdk-${VER_JDK}" | head -n 1)

JDK_PAGE_RELEASE="https://www.oracle.com/java/technologies/javase/${VER_JDK}u-relnotes.html" \
&& JDK_VER_MINOR=$(curl -sL ${JDK_PAGE_RELEASE} | grep -P 'JDK \d..\d+' | grep -Po '[\d\.]{3,}' | head -n1) \
&& JDK_VER_MINOR=$(curl -sL "${JDK_PAGE_RELEASE}" | grep -P 'JDK \d..\d+' | grep -Po '[\d\.]{3,}' | head -n1) \
&& JDK_URL_MSFT="https://aka.ms/download-jdk/microsoft-jdk-${JDK_VER_MINOR}-linux-${ARCH}.tar.gz"

if [ "$VER_JDK" -gt 11 ] ; then
Expand All @@ -114,7 +115,7 @@ setup_java_base() {
URL_OPENJDK=${JDK_URL_MSFT}
else
echo "ORCA download URL ref: ${JDK_URL_ORCA}"
URL_OPENJDK="https://javadl.oracle.com/webapps/download/GetFile/1.8.0_341-b10/424b9da4b48848379167015dcc250d8d/linux-i586/jdk-8u341-linux-${ARCH}.tar.gz"
URL_OPENJDK="https://javadl.oracle.com/webapps/download/GetFile/1.8.0_351-b10/10e8cce67c7843478f41411b7003171c/linux-i586/jdk-8u351-linux-${ARCH}.tar.gz"
fi

echo "Installing JDK version ${VER_JDK} from: ${URL_OPENJDK}" \
Expand All @@ -126,7 +127,7 @@ setup_java_base() {
setup_java_maven() {
VERSION_MAVEN=$1; shift 1; VERSION_MAVEN=${VERSION_MAVEN:-"3.8.6"} \
&& install_zip "http://archive.apache.org/dist/maven/maven-3/${VERSION_MAVEN}/binaries/apache-maven-${VERSION_MAVEN}-bin.zip" \
&& mv /opt/apache-maven-${VERSION_MAVEN} /opt/maven \
&& mv "/opt/apache-maven-${VERSION_MAVEN}" /opt/maven \
&& ln -sf /opt/maven/bin/mvn* /usr/bin/ \
&& echo "@ Version of Maven:" && mvn --version
}
Expand All @@ -136,7 +137,7 @@ setup_node() {
# NODEJS_VERSION_MAJOR="v14" && grep "v${NODEJS_VERSION_MAJOR}."
ARCH="x64" \
&& NODEJS_VERSION=$(curl -sL https://github.com/nodejs/node/releases.atom | grep 'releases/tag' | head -1 | grep -Po '\d[.\d]+') \
&& NODEJS_VERSION_MAJOR=$(echo ${NODEJS_VERSION} | cut -d '.' -f1 ) \
&& NODEJS_VERSION_MAJOR=$(echo "${NODEJS_VERSION}" | cut -d '.' -f1 ) \
&& install_tar_gz "https://nodejs.org/download/release/latest-v${NODEJS_VERSION_MAJOR}.x/node-v${NODEJS_VERSION}-linux-${ARCH}.tar.gz" \
&& mv /opt/node* /opt/node \
&& echo "PATH=/opt/node/bin:$PATH" >> /etc/bash.bashrc \
Expand Down Expand Up @@ -241,23 +242,6 @@ setup_julia() {
}


setup_octave() {
# TEMPFIX: javac version
# && OCTAVE_VERSION="6.3.0" \
# && install_tar_xz "https://ftp.gnu.org/gnu/octave/octave-${OCTAVE_VERSION}.tar.xz" \
# && cd /opt/octave-* \
# && sed -i "s/1.6/11/g" ./Makefile.in \
# && sed -i "s/1.6/11/g" ./scripts/java/module.mk \
# && ./configure --prefix=/opt/octave --disable-docs --without-opengl \
# && make -j8 && make install -j8 \
# && cd /opt/utils && rm -rf /opt/octave-*

install_apt /opt/utils/install_list_octave.apt \
&& install_octave /opt/utils/install_list_octave.pkg \
&& echo "@ Version of Octave and installed packages: $(/opt/octave/bin/octave --version)"
}


setup_traefik() {
TRAEFIK_VERSION=$(curl -sL https://github.com/traefik/traefik/releases.atom | grep 'releases/tag' | head -1 | grep -Po '\d[\d.]+') \
&& TRAEFIK_URL="https://github.com/traefik/traefik/releases/download/v${TRAEFIK_VERSION}/traefik_v${TRAEFIK_VERSION}_linux_$(dpkg --print-architecture).tar.gz" \
Expand Down
27 changes: 15 additions & 12 deletions docker_base/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,27 @@
ARG BASE_NAMESPACE
ARG BASE_IMG="atom"
FROM ${BASE_NAMESPACE:+$BASE_NAMESPACE/}${BASE_IMG}

LABEL maintainer="haobibo@gmail.com"

ARG PYTHON_VERSION="3.10"

ENV CONDA_PREFIX=/opt/conda
ENV PATH=$PATH:${CONDA_PREFIX}/bin

RUN source /opt/utils/script-setup.sh \
## source /opt/utils/script-utils.sh # already included in the `script-setup.sh`
&& install_apt /opt/utils/install_list_base.apt \
&& echo "Install tini:" && setup_tini \
&& echo "Install Mamba, Python, and Conda:" && setup_mamba && setup_conda_with_mamba \
&& echo "Install Mamba:" && setup_mamba \
&& echo "Install Python ${PYTHON_VERSION} and conda:" && setup_conda_with_mamba ${PYTHON_VERSION} \
&& echo "Replace system Python3 with conda Python - note that /bin and /sbin are symlinks of /usr/bin in docker image ubuntu" \
&& PYTHON_VERSION_DEFAULT=$(py3versions -v -i) \
&& sed -i "s/${PYTHON_VERSION_DEFAULT}/${PYTHON_VERSION}/g" /usr/share/python3/debian_defaults \
&& PYTHON_PTH_FILE=$("${CONDA_PREFIX}"/bin/python3 -c 'import sys;print(sys.path[-1]+"/usr_share.pth")') \
&& echo "/usr/share/pyshared/" >> "${PYTHON_PTH_FILE}" \
&& echo "/usr/share/python3/" >> "${PYTHON_PTH_FILE}" \
&& rm -rf $(/usr/bin/python3 -c 'import sys; print(" ".join(i for i in sys.path if "python" in i))') /usr/bin/python3* \
&& ln -sf "${CONDA_PREFIX}"/bin/python3.* /usr/bin/ \
&& ln -sf /usr/bin/python${PYTHON_VERSION} /usr/bin/python \
&& ln -sf /usr/bin/python${PYTHON_VERSION} /usr/bin/python3 \
&& lsb_release -a && py3versions -d \
&& install__clean

#&& echo "Replace system Python3 with Conda's Python - note that /bin and /sbin are symlinks of /usr/bin in docker image ubuntu" \
#&& ln -sf /opt/conda/lib/python3.10 /opt/conda/lib/python3 \
#&& cp --verbose -rn /usr/lib/python3.*/* /opt/conda/lib/python3/ \
#&& mv /usr/share/pyshared/lsb_release.py /usr/bin/ \
#&& rm --verbose -rf $(/usr/bin/python3 -c 'import sys; print(" ".join(sys.path))') /usr/lib/python3* /usr/share/pyshared/ \
#&& ln -sf /opt/conda/lib/python3 /usr/lib/ \
#&& TO_REPLACE="/usr/bin/python3;/usr/bin/python3.10" \
#&& for F in $(echo ${TO_REPLACE} | tr ";" "\n") ; do ( rm -f ${F} && ln -s /opt/conda/bin/python ${F} ) ; done
1 change: 0 additions & 1 deletion docker_cuda/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ LABEL maintainer="haobibo@gmail.com"
# For tensorflow 2.x or torch, python>=3.9 is supported.
RUN echo ${CUDA_VERSION} && nvcc --version \
&& source /opt/utils/script-setup.sh && setup_nvtop \
&& [[ ${CUDA_VERSION} == *"10.0"* ]] && mamba install -yq python=3.7 || true \
&& install__clean
40 changes: 22 additions & 18 deletions tool.sh
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
#!/bin/bash
# set -exu
set -xu

export REGISTRY_URL="docker.io" # docker.io or other registry URL, DOCKER_REGISTRY_USER/DOCKER_REGISTRY_PASSWORD to be set in CI env.
export BUILDKIT_PROGRESS="plain" # Full logs for CI build.
# DOCKER_REGISTRY_USER and DOCKER_REGISTRY_PASSWORD is required for docker image push, they should be set in CI secrets.

CI_PROJECT_NAME=${GITHUB_REPOSITORY:-"QPod/docker-images"}
CI_PROJECT_BRANCH=${GITHUB_HEAD_REF:-"main"}
CI_PROJECT_SPACE=$(echo "${CI_PROJECT_BRANCH}" | cut -f1 -d'/')

if [ "${CI_PROJECT_BRANCH}" = "main" ] ; then
export CI_PROJECT_NAMESPACE=$(echo "$(dirname ${CI_PROJECT_NAME})") ;
# If on the main branch, docker images namespace will be same as CI_PROJECT_NAME's name space
export CI_PROJECT_NAMESPACE="$(dirname ${CI_PROJECT_NAME})" ;
else
export CI_PROJECT_NAMESPACE=$(echo "$(dirname ${CI_PROJECT_NAME})")0${CI_PROJECT_BRANCH} ;
# not main branch, docker namespace = {CI_PROJECT_NAME's name space} + "0" + {1st substr before / in CI_PROJECT_SPACE}
export CI_PROJECT_NAMESPACE="$(dirname ${CI_PROJECT_NAME})0${CI_PROJECT_SPACE}" ;
fi

export NAMESPACE=$(echo "${REGISTRY_URL:-"docker.io"}/${CI_PROJECT_NAMESPACE}" | awk '{print tolower($0)}')
Expand All @@ -22,36 +25,37 @@ jq '.experimental=true' /etc/docker/daemon.json > /tmp/daemon.json && sudo mv /
sudo service docker restart

build_image() {
echo $@ ;
IMG=$1; TAG=$2; FILE=$3; shift 3; VER=`date +%Y.%m%d`;
docker build --squash --compress --force-rm=true -t "${NAMESPACE}/${IMG}:${TAG}" -f "$FILE" --build-arg "BASE_NAMESPACE=${NAMESPACE}" "$@" "$(dirname $FILE)" ;
echo "$@" ;
IMG=$1; TAG=$2; FILE=$3; shift 3; VER=$(date +%Y.%m%d.%H%M); WORKDIR="$(dirname $FILE)";
docker build --squash --compress --force-rm=true -t "${NAMESPACE}/${IMG}:${TAG}" -f "$FILE" --build-arg "BASE_NAMESPACE=${NAMESPACE}" "$@" "${WORKDIR}" ;
docker tag "${NAMESPACE}/${IMG}:${TAG}" "${NAMESPACE}/${IMG}:${VER}" ;
}

build_image_no_tag() {
echo $@ ;
IMG=$1; TAG=$2; FILE=$3; shift 3;
docker build --squash --compress --force-rm=true -t "${NAMESPACE}/${IMG}:${TAG}" -f "$FILE" --build-arg "BASE_NAMESPACE=${NAMESPACE}" "$@" "$(dirname $FILE)" ;
echo "$@" ;
IMG=$1; TAG=$2; FILE=$3; shift 3; WORKDIR="$(dirname $FILE)";
docker build --squash --compress --force-rm=true -t "${NAMESPACE}/${IMG}:${TAG}" -f "$FILE" --build-arg "BASE_NAMESPACE=${NAMESPACE}" "$@" "${WORKDIR}" ;
}

build_image_common() {
echo $@ ;
IMG=$1; TAG=$2; FILE=$3; shift 3; VER=`date +%Y.%m%d`;
docker build --compress --force-rm=true -t "${NAMESPACE}/${IMG}:${TAG}" -f "$FILE" --build-arg "BASE_NAMESPACE=${NAMESPACE}" "$@" "$(dirname $FILE)" ;
echo "$@" ;
IMG=$1; TAG=$2; FILE=$3; shift 3; VER=$(date +%Y.%m%d.%H%M); WORKDIR="$(dirname $FILE)";
docker build --compress --force-rm=true -t "${NAMESPACE}/${IMG}:${TAG}" -f "$FILE" --build-arg "BASE_NAMESPACE=${NAMESPACE}" "$@" "${WORKDIR}" ;
docker tag "${NAMESPACE}/${IMG}:${TAG}" "${NAMESPACE}/${IMG}:${VER}" ;
}

alias_image() {
IMG_1=$1; TAG_1=$2; IMG_2=$3; TAG_2=$4; shift 4; VER=`date +%Y.%m%d`;
IMG_1=$1; TAG_1=$2; IMG_2=$3; TAG_2=$4; shift 4; VER=$(date +%Y.%m%d.%H%M);
docker tag "${NAMESPACE}/${IMG_1}:${TAG_1}" "${NAMESPACE}/${IMG_2}:${TAG_2}" ;
docker tag "${NAMESPACE}/${IMG_2}:${TAG_2}" "${NAMESPACE}/${IMG_2}:${VER}" ;
}

push_image() {
docker image prune --force && docker images ;
IMGS=$(docker images | grep "second" | awk '{print $1 ":" $2}') ;
KEYWORD="${1:-second}";
docker image prune --force && docker images | sort;
IMAGES=$(docker images | grep "${KEYWORD}" | awk '{print $1 ":" $2}') ;
echo "$DOCKER_REGISTRY_PASSWORD" | docker login "${REGISTRY_URL}" -u "$DOCKER_REGISTRY_USER" --password-stdin ;
for IMG in $(echo $IMGS | tr " " "\n") ;
for IMG in $(echo "${IMAGES}" | tr " " "\n") ;
do
docker push "${IMG}";
status=$?;
Expand All @@ -60,8 +64,8 @@ push_image() {
}

remove_folder() {
sudo du -h -d1 $1 || true ;
sudo rm -rf $1 || true ;
sudo du -h -d1 "$1" || true ;
sudo rm -rf "$1" || true ;
}

free_diskspace() {
Expand Down