エンジニアを目指す初学者に向けて、わかりやすく解説したブログです。
サイトをリニューアルしました

【Docker】コンテナに環境変数を渡す

やりたいこと

APIキーなどの秘匿性の高い環境変数を、Dockerコンテナに環境変数としていい感じに渡したい。

docker composeなどを使わないシンプルな環境でこれを実行したい。

手順

①まずはシンプルなDockerfile作成

ベースイメージをrockylinuxとして、環境を構築

Dockerfile

FROM rockylinux:9.2

WORKDIR /workspace

※注意:Dockerfileに「ENV」などを使って環境変数を設定してしまうと、

Dockerイメージに書き込まれてしまうのでオススメしない。

②環境変数を記載するファイルを作成

ここでは「.env」というファイル名で環境変数を記述するファイルを作成する。

このファイルは.gitignoreに追加し、git管理をしないようにする。

ここでは、「API_KEY」という環境変数に、「secret_key」という値を入れる想定。

.env

API_KEY=secret_key

③Dockerイメージをビルド

Dockerfileをもとに、Dockerイメージを生成する。

$ docker build -t docker-sandbox:1.0 .
[+] Building 8.8s (7/7) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 68B
=> [internal] load .dockerignore  
=> => transferring context: 2B
=> [internal] load metadata for docker.io/library/rockylinux:9.2
=> [auth] library/rockylinux:pull token for registry-1.docker.io
=> [1/2] FROM docker.io/library/rockylinux:9.2@sha256:b07e21a7bbcecbae55b9153317d333d4d50808bf5dc0859db0180b6fbd7afb3d
=> CACHED [2/2] WORKDIR /workspace
=> exporting to image
=> => exporting layers
=> => writing image sha256:ff4c45f6578e08cb435c337125eb8362985ba768a7abdcc4275c92a99192818f
=> => naming to docker.io/library/docker-sandbox:1.0

④コンテナ起動時に環境変数ファイルを引数指定

コンテナを起動し続けておくために、-itdのオプションを利用して「/bin/bashをバックグラウンドで実行する」状態でコンテナを起動する。

$ docker container run -itd --name "docker-sandbox-container" --env-file ./.env docker-sandbox:1.0 /bin/bash

ここでのポイントは「--env-file ./.env」というオプションで、

環境変数ファイルを指定しながらコンテナを起動しているところ。

⑤コンテナに入って環境変数が設定されているか確認する

execコマンドを利用して、対象のコンテナに対して/bin/bashを新しく実行。

コンテナ内でenvコマンドを実行すると、API_KEYという環境変数が設定されていることを確認できる。

$ docker exec -it docker-sandbox-container /bin/bash
[root@e6123712698f workspace]# env
HOSTNAME=e6123712698f
PWD=/workspace
API_KEY=secret_key
HOME=/root
LANG=C.UTF-8
TERM=xterm
LESSOPEN=||/usr/bin/lesspipe.sh %s
SHLVL=1
DEBUGINFOD_URLS=https://debuginfod.centos.org/
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env

まとめ

  1. 環境変数ファイルを作成(git管理しない)
  2. コンテナ起動時のオプションで、↑のファイルを指定して起動する