LoginSignup
0
0

More than 3 years have passed since last update.

Dockerhubのオートビルドで環境変数を使う方法

Posted at

Dockerhubのオートビルドでは、プロジェクト固有の環境変数を使うことができます。ただ、設定が結大変だったので、忘備録も兼ねてまとめます。オートビルドで環境変数を使うために必要な工程は、以下の3つです。

  1. BUILD ENVIRONMENT VARIABLES
  2. hooks/build
  3. Dockerfile ARG

サンプルコード

以下が今回の解説に使うソースコード、Dockerリポジトリです。

ソースコード
https://github.com/kaidouji85/study-three-js

Dockerリポジトリ
https://hub.docker.com/r/kaidouji85/gbraver-burst

このコードは私が趣味で作っているゲームですが、遊び方説明動画としてYouTubeを埋め込んでいます。YouTubeのURLをハードコーディングするのも気が引けたので、HOW_TO_PLAY_URLという環境変数で設定を外出し出来るようにしました。

環境変数設定方法

1. BUILD ENVIRONMENT VARIABLES

スクリーンショット 2020-03-26 12.07.48.png

dockerhubのオートビルド設定画面を開くと、「BUILD ENVIRONMENT VARIABLES」という項目があります。「Key」に環境変数名、「Value」にその値をセットします。これだけで環境変数が使えそうですが、そうは問屋が卸しません。

2. hooks/build

Dockerhub公式サイトにさりげなく書いてありますが、前節で設定した項目はhooksフォルダ配下のシェルでしか使えません。なので、以下内容でgitリポジトリにhooks/buildというファイルを追加します。

hooks/build
#!/bin/bash

docker build -t $IMAGE_NAME --build-arg <環境変数名>=$<環境変数名> . 

サンプルプロジェクトでは、hooks/buildに以下内容を記載しました。

サンプルコード
#!/bin/bash

docker build -t $IMAGE_NAME --build-arg HOW_TO_PLAY_URL=$HOW_TO_PLAY_URL .

ちなみに複数環境変数を渡したい場合は、面倒臭いですが以下のように書きます。

環境変数複数指定
docker build -t $IMAGE_NAME --build-arg VAL1=$VAL1 --build-arg VAL2=$VAL2 --build-arg VAL3=$VAL3 .

ここから先は踏み込んだ説明なので、やり方だけ知りたいという方は読み飛ばしてください。hooks/buildはユーザ独自のDockerビルドコマンドを実行したい時に使うシェルです。Dockerビルドに環境変数を渡すやり方は色々あると思いますが、ここでは一般的な方法である--build-argを使っています。また、$IMAGE_NAMEはdockerhubが予め用意している環境変数名で、dockerイメージ名がセットされます。dockerhub公式サイトを見ると、これ以外にも様々な環境変数が事前定義されているようです。

3. ARG

以下のように、DockerfileにARGという項目を追加します。

Dockerfile
ARG 環境変数名

以下が、サンプルコードのDockerfileです。2行目に「ARG」という記載があります。

サンプルコード
FROM node:12.16.1-slim as builder
ARG HOW_TO_PLAY_URL
WORKDIR /usr/src/app
COPY . /usr/src/app/
RUN npm config set registry http://registry.npmjs.org/ && \
  npm ci && \
  npm run build:production

FROM node:12.16.1-slim as runner
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/ /usr/src/app/
CMD [ "npm", "run", "serve" ]
EXPOSE 3000

ちなみにですが、ARGとは--build-argで渡された環境変数をDockerfileで使えるようにするための命令です。なので--build-argだけを指定しも、環境変数の受け渡しはできません。

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