やりたいこと
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
まとめ
- 環境変数ファイルを作成(git管理しない)
- コンテナ起動時のオプションで、↑のファイルを指定して起動する