summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-09-01 18:17:38 +1200
committerLingxian Kong <anlin.kong@gmail.com>2020-09-02 09:37:01 +1200
commit43d7aec774c1adb015720c2cbae2774877e10d8a (patch)
treea3795c793722683ce45820c170d30726e3c219ea
parent410b8ee25c8f67342f5d79aacc49883f9750ba90 (diff)
downloadtrove-43d7aec774c1adb015720c2cbae2774877e10d8a.tar.gz
Improve docker image for database backup/restore
* Decrease the image size by not installing unnecessary packages. * Move the option 'backup_docker_image' to separate database config section. Change-Id: I3362e1f8a7dc21b89c060352f2db2f138c16db07
-rw-r--r--backup/Dockerfile33
-rwxr-xr-xbackup/install.sh26
-rw-r--r--trove/common/cfg.py15
-rw-r--r--trove/guestagent/datastore/mysql_common/service.py4
4 files changed, 48 insertions, 30 deletions
diff --git a/backup/Dockerfile b/backup/Dockerfile
index c260e50b..86c19ede 100644
--- a/backup/Dockerfile
+++ b/backup/Dockerfile
@@ -1,41 +1,26 @@
FROM ubuntu:18.04
LABEL maintainer="anlin.kong@gmail.com"
+ARG DATASTORE="mysql"
ARG APTOPTS="-y -qq --no-install-recommends --allow-unauthenticated"
ARG PERCONA_XTRABACKUP_VERSION=24
-ENV DEBIAN_FRONTEND noninteractive
-ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1
+ENV DEBIAN_FRONTEND noninteractive \
+ APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1
RUN apt-get update \
&& apt-get install $APTOPTS gnupg2 lsb-release apt-utils apt-transport-https ca-certificates software-properties-common curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
-# Install percona-xtrabackup for mysql
-RUN curl -sSL https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb -o percona-release.deb \
- && dpkg -i percona-release.deb \
- && percona-release enable-only tools release \
- && apt-get update \
- && apt-get install $APTOPTS percona-xtrabackup-${PERCONA_XTRABACKUP_VERSION} \
- && apt-get clean
-
-# Install mariabackup for mariadb
-Run apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' \
- && add-apt-repository "deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/ubuntu $(lsb_release -cs) main" \
- && apt-get update \
- && apt-get install $APTOPTS mariadb-backup \
- && apt-get clean
-
-RUN apt-get update \
- && apt-get install $APTOPTS build-essential python3-setuptools python3-all python3-all-dev python3-pip libffi-dev libssl-dev libxml2-dev libxslt1-dev libyaml-dev \
- && apt-get clean
-
COPY . /opt/trove/backup
WORKDIR /opt/trove/backup
+RUN ./install.sh $DATASTORE ${PERCONA_XTRABACKUP_VERSION}
-RUN pip3 --no-cache-dir install -U -r requirements.txt
-
-RUN curl -sSL https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 -o /usr/local/bin/dumb-init \
+RUN apt-get update \
+ && apt-get install $APTOPTS build-essential python3-setuptools python3-all python3-all-dev python3-pip libffi-dev libssl-dev libxml2-dev libxslt1-dev libyaml-dev \
+ && apt-get clean \
+ && pip3 --no-cache-dir install -U -r requirements.txt \
+ && curl -sSL https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 -o /usr/local/bin/dumb-init \
&& chmod +x /usr/local/bin/dumb-init
ENTRYPOINT ["dumb-init", "--single-child", "--"]
diff --git a/backup/install.sh b/backup/install.sh
new file mode 100755
index 00000000..ad1c2e4a
--- /dev/null
+++ b/backup/install.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+set -e
+
+APTOPTS="-y -qq --no-install-recommends --allow-unauthenticated"
+
+case "$1" in
+"mysql")
+ curl -sSL https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb -o percona-release.deb
+ dpkg -i percona-release.deb
+ percona-release enable-only tools release
+ apt-get update
+ apt-get install $APTOPTS percona-xtrabackup-$2
+ apt-get clean
+ ;;
+"mariadb")
+ apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
+ add-apt-repository "deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/ubuntu $(lsb_release -cs) main"
+ apt-get update
+ apt-get install $APTOPTS mariadb-backup
+ apt-get clean
+ ;;
+*)
+ echo "datastore $1 not supported"
+ exit 1
+ ;;
+esac
diff --git a/trove/common/cfg.py b/trove/common/cfg.py
index 4180e3be..03f3caa2 100644
--- a/trove/common/cfg.py
+++ b/trove/common/cfg.py
@@ -475,8 +475,6 @@ common_opts = [
help='Key (OpenSSL aes_cbc) for instance RPC encryption.'),
cfg.StrOpt('database_service_uid', default='1001',
help='The UID(GID) of database service user.'),
- cfg.StrOpt('backup_docker_image', default='openstacktrove/db-backup:1.0.1',
- help='The docker image used for backup and restore.'),
cfg.ListOpt('reserved_network_cidrs', default=[],
help='Network CIDRs reserved for Trove guest instance '
'management.'),
@@ -613,7 +611,11 @@ mysql_opts = [
cfg.StrOpt(
'docker_image', default='mysql',
help='Database docker image.'
- )
+ ),
+ cfg.StrOpt(
+ 'backup_docker_image', default='openstacktrove/db-backup-mysql:1.0.0',
+ help='The docker image used for backup and restore.'
+ ),
]
# Percona
@@ -1366,7 +1368,12 @@ mariadb_opts = [
cfg.StrOpt(
'docker_image', default='mariadb',
help='Database docker image.'
- )
+ ),
+ cfg.StrOpt(
+ 'backup_docker_image',
+ default='openstacktrove/db-backup-mariadb:1.0.0',
+ help='The docker image used for backup and restore.'
+ ),
]
# RPC version groups
diff --git a/trove/guestagent/datastore/mysql_common/service.py b/trove/guestagent/datastore/mysql_common/service.py
index 6e13380b..d9b569ec 100644
--- a/trove/guestagent/datastore/mysql_common/service.py
+++ b/trove/guestagent/datastore/mysql_common/service.py
@@ -676,7 +676,7 @@ class BaseMySqlApp(service.BaseDbApp):
backup_type = 'incremental'
backup_id = backup_info["id"]
- image = CONF.backup_docker_image
+ image = cfg.get_configuration_property('backup_docker_image')
name = 'db_backup'
volumes = {'/var/lib/mysql': {'bind': '/var/lib/mysql', 'mode': 'rw'}}
admin_pass = self.get_auth_password()
@@ -771,7 +771,7 @@ class BaseMySqlApp(service.BaseDbApp):
user_token = context.auth_token
auth_url = CONF.service_credentials.auth_url
user_tenant = context.project_id
- image = CONF.backup_docker_image
+ image = cfg.get_configuration_property('backup_docker_image')
name = 'db_restore'
volumes = {'/var/lib/mysql': {'bind': '/var/lib/mysql', 'mode': 'rw'}}