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

Dockerロゴ 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                                                                                                                       0.0s
 => => transferring dockerfile: 68B                                                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                                                          0.0s
 => => transferring context: 2B                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/rockylinux:9.2                                                                                                          8.8s
 => [auth] library/rockylinux:pull token for registry-1.docker.io                                                                                                          0.0s
 => [1/2] FROM docker.io/library/rockylinux:9.2@sha256:b07e21a7bbcecbae55b9153317d333d4d50808bf5dc0859db0180b6fbd7afb3d                                                    0.0s
 => CACHED [2/2] WORKDIR /workspace                                                                                                                                        0.0s
 => exporting to image                                                                                                                                                     0.0s
 => => exporting layers                                                                                                                                                    0.0s
 => => writing image sha256:ff4c45f6578e08cb435c337125eb8362985ba768a7abdcc4275c92a99192818f                                                                               0.0s
 => => 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. コンテナ起動時のオプションで、↑のファイルを指定して起動する
タイトルとURLをコピーしました