docker-envsubst
やりたいこと
- Docker起動時に環境変数を指定する
- Docker起動時に読み込んだ環境変数を基に、ローカルに環境変数ファイルを作成する
- 別ユーザーでShellを実行した際、ローカルに作成した環境変数ファイルを読み込む
上記流れで処理する事で、Docker上で別ユーザー間の環境変数の引き渡しを行うことができるようにしたい。
なんでそんな事をしたくなったのか?
Docker上でcronからShellファイルを実行するときに、Dcoker起動時の環境変数はそのままでは使えなかったので、一度環境変数ファイルを作成してShellからそのファイルを読み込ませる必要があったため。
その他仕様
- docker-compose でDockerの定義をする
- docker-compose に環境変数を読み込む定義を記載する
- コンテナは常時起動させる
ソースコード
ファイル構成
ファイル構成はこんな感じになりました。
.
├── Dockerfile
├── docker-compose.yml
├── env
│ └── app.env.template
└── shell
└── run_init.sh
docker-compose.yml
docker-compose.yml
# コンテナ構築用docker-composeファイル
version: '3.2'
services:
# アプリケーション用定義
app:
build:
context: .
dockerfile: ./Dockerfile
container_name: app
ports:
- "8080:8080"
# 環境変数を指定
environment:
- ENV_STRING=hoge
#自動起動設定
restart: always
tty: true
Dockerfile
Dockerfile
#################################################
# コンテナの作成
#################################################
# ベースイメージ取得
# ベースイメージ取得(Amazon Correttoを利用)
FROM amazoncorretto:11
# 環境変数用ファイルをコピー
COPY ./env/* /tmp/env/
# shellのコピー
COPY ./shell/* /opt/shell/
# 初期設定(ライブラリのインストールなど)
RUN \
# ========================================================
# ライブラリをインストール
# ========================================================
yum -y update && \
yum -y install util-linux shadow-utils gettext && \
rm -rf /var/cache/yum/* && \
yum clean all && \
# ========================================================
# 実行権限の付与
# ========================================================
chmod +x /opt/shell/*
# shellの実行
CMD ["/bin/sh", "/opt/shell/run_init.sh"]
run_init.sh
run_init.sh
#!/bin/sh
# ========================================================
# 環境定義ファイルの作成
# ========================================================
# 環境変数用のディレクトリが無ければ作成
mkdir -p /var/env
# 環境変数ファイルの作成
envsubst < /tmp/env/app.env.template > /var/env/app.env
# 作成したapp.envを読み込む
source /var/env/app.env
# app.envで読み込んだ環境変数を標準出力する
echo ${STRING} > /var/log/test.log
#コンテナを起動し続ける
tail -f /dev/null
app.env.template
app.env.template
##########################################################
#
# 環境変数
#
##########################################################
# 置換文字列
STRING=${ENV_STRING}
GitHub
GitHubにも同様のソースを公開しています。