Retrieve secrets from Keeper Secrets Manager at Docker runtime



FROM debian:buster-slim
...
... INSTALL MySQL 8.0 SERVER
...
ENTRYPOINT ["docker-entrypoint.sh"]
β
EXPOSE 3306 33060
CMD ["mysqld"]FROM mysql:debian
ARG BUILD_KSM_INI_CONFIG
ARG BUILD_ROOT_UID
ARG BUILD_USER_UID
RUN apt-get update && \
apt-get install -y python3 python3-pip python3-venv && \
apt-get clean
# Avoid system installed modules that might interfer.
ENV VIRTUAL_ENV /venv
RUN python3 -m pip install --upgrade pip && \
python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# Upgrade pip since the distro's Python might be old enough that it doesn't like to install newer modules.
RUN pip3 install --upgrade pip
# Install Keeper Secrets Manager CLI
RUN pip3 install keeper-secrets-manager-cli
# Import our configuration, decode it, and store it a place where ksm can find it.
RUN ksm profile import $(printenv --null BUILD_KSM_INI_CONFIG)
ENV MYSQL_ROOT_PASSWORD keeper://${BUILD_ROOT_UID}/field/password
ENV MYSQL_USER keeper://${BUILD_USER_UID}/field/login
ENV MYSQL_PASSWORD keeper://${BUILD_USER_UID}/field/password
ENV MYSQL_DATABASE keeper://${BUILD_USER_UID}/custom_field/database
β
ENTRYPOINT ["ksm", "exec", "--", "docker-entrypoint.sh"]#!/bin/sh
β
βexport CF=$(ksm profile export)
docker build \
--build-arg "BUILD_KSM_INI_CONFIG=${CF}" \
--build-arg "BUILD_ROOT_UID=DvpMcO4xV5nZF6jqLGF1fQ" \
--build-arg "BUILD_USER_UID=VNxZvvNAZ8j2mL4WIjEzjg" \
-t mysql_custom \
.
---
version: "2"
services:
init:
image: keeper/keeper-secrets-manager-cli:latest
main:
image: ubuntu:latest
volumes_from:
- init:ro
command: [ '/cli/glibc/ksm', 'exec', 'printenv', 'MY_LOGIN' ]
environment:
KSM_CONFIG: ewog ... M09IemdQMnc9Igp9
MY_LOGIN: keeper://bf18xLR3aVut5eYy7oIZZZ/field/login
LC_ALL: C.UTF-8
LANG: C.UTF-8
depends_on:
init:
condition: service_completed_successfully$ example : docker-compose up
[+] Running 2/0
β Ώ Container example-init-1 Created 0.0s
β Ώ Container example-main-1 Recreated 0.1s
Attaching to example-init-1, example-main-1
example-init-1 |
example-init-1 | βββ βββββββββββββββ ββββ ββββββββββ βββ
example-init-1 | βββ βββββββββββββββββ βββββ βββββββββββ βββ
example-init-1 | βββββββ βββββββββββββββββββ βββ βββ βββ
example-init-1 | βββββββ βββββββββββββββββββ βββ βββ βββ
example-init-1 | βββ ββββββββββββββ βββ βββ βββββββββββββββββββ
example-init-1 | βββ ββββββββββββββ βββ ββββββββββββββββββ
example-init-1 |
example-init-1 | Current Version: 1.0.13
example-init-1 |
example-init-1 | Running in shell mode. Type 'quit' to exit.
example-init-1 |
example-init-1 exited with code 0
example-main-1 | john.smith@localhost
example-main-1 exited with code 0version: '3.0'
services:
init:
image: keeper/keeper-secrets-manager-cli:latest
main:
image: mysql:8.0
environment:
KSM_CONFIG: "ewog .... RQ3pQMnc9Igp9"
MYSQL_USER: "keeper://KOJLz4Wzbqfi9xUO-VMViA/field/login"
MYSQL_PASSWORD: "keeper://KOJLz4Wzbqfi9xUO-VMViA/field/password"
MYSQL_ROOT_PASSWORD: "keeper://KOJLz4Wzbqfi9xUO-VMViA/custom_field/Root Password"
MYSQL_DATABASE: "keeper://KOJLz4Wzbqfi9xUO-VMViA/custom_field/Database"
depends_on:
init:
condition: service_completed_successfully
entrypoint: ["/cli/glibc/ksm", "exec", "docker-entrypoint.sh"]
command: ["mysqld"]
ports:
- "3306:3306"
volumes_from:
- init:ro$ my_mysql : docker-compose up
[+] Running 3/3
β Ώ Network my_mysql_default Created 0.0s
β Ώ Container my_mysql-init-1 Created 0.1s
β Ώ Container my_mysql-main-1 Created 0.0s
Attaching to my_mysql-init-1, my_mysql-main-1
my_mysql-init-1 |
my_mysql-init-1 | βββ βββββββββββββββ ββββ ββββββββββ βββ
my_mysql-init-1 | βββ βββββββββββββββββ βββββ βββββββββββ βββ
my_mysql-init-1 | βββββββ βββββββββββββββββββ βββ βββ βββ
my_mysql-init-1 | βββββββ βββββββββββββββββββ βββ βββ βββ
my_mysql-init-1 | βββ ββββββββββββββ βββ βββ βββββββββββββββββββ
my_mysql-init-1 | βββ ββββββββββββββ βββ ββββββββββββββββββ
my_mysql-init-1 |
my_mysql-init-1 | Current Version: 1.0.14
my_mysql-init-1 |
my_mysql-init-1 | Running in shell mode. Type 'quit' to exit.
my_mysql-init-1 |
my_mysql-init-1 exited with code 0
my_mysql-main-1 | 2022-10-31 21:35:26+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
my_mysql-main-1 | 2022-10-31 21:35:26+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
my_mysql-main-1 | 2022-10-31 21:35:26+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
my_mysql-main-1 | 2022-10-31 21:35:26+00:00 [Note] [Entrypoint]: Initializing database files
my_mysql-main-1 | 2022-10-31T21:35:26.830527Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
my_mysql-main-1 | 2022-10-31T21:35:26.830594Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.31) initializing of server in progress as process 83
...
my_mysql-main-1 | 2022-10-31T21:35:35.611063Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
my_mysql-main-1 | 2022-10-31T21:35:35.611015Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock



