diff options
author | Lingxian Kong <anlin.kong@gmail.com> | 2020-09-01 18:17:38 +1200 |
---|---|---|
committer | Lingxian Kong <anlin.kong@gmail.com> | 2020-09-02 09:37:01 +1200 |
commit | 43d7aec774c1adb015720c2cbae2774877e10d8a (patch) | |
tree | a3795c793722683ce45820c170d30726e3c219ea | |
parent | 410b8ee25c8f67342f5d79aacc49883f9750ba90 (diff) | |
download | trove-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/Dockerfile | 33 | ||||
-rwxr-xr-x | backup/install.sh | 26 | ||||
-rw-r--r-- | trove/common/cfg.py | 15 | ||||
-rw-r--r-- | trove/guestagent/datastore/mysql_common/service.py | 4 |
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'}} |