0
0

More than 1 year has passed since last update.

Docker起動後に環境変数ファイルを作成して、別ユーザーに引き渡せるようにしたい

Posted at

docker-envsubst

やりたいこと

  1. Docker起動時に環境変数を指定する
  2. Docker起動時に読み込んだ環境変数を基に、ローカルに環境変数ファイルを作成する
  3. 別ユーザーで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にも同様のソースを公開しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0