docker-compose.yml → Dockerfile 変数渡し & 複数FROM構成での注意点


docker-compose.yml → Dockerfile に変数を渡す方法

↓この記事で使ったネタです
* syslog受信 → S3保存 してくれるDockerコンテナ お手軽セット https://qiita.com/yagrush/items/2fbff71c1c2bf12f7d71

1/2 docker-compose.yml側

buildキーの子要素としてargsキーを追加し、
その下に配列として、渡したい変数名と値を書いていきます。

services:
  my-s3access-app:
    build:
      context: ./app
      dockerfile: Dockerfile
      args:
        - GITHUB_ACC=hogehige
        - GITHUB_ACC_PASSWORD=agd82gfo3gfagkaf
     ・
     ・
     ・

2/2 Dockerfile側

ARGコマンドで宣言(キャッチ)すると、それ以降$HOGEで利用可能になります。

FROM golang:1.13
ARG GITHUB_ACC
ARG GITHUB_ACC_PASSWORD
RUN echo -e "machine github.com\nlogin $GITHUB_ACC\npassword $GITHUB_ACC_PASSWORD" > ~/.netrc
RUN go mod download
 ・
 ・
 ・

Dockerfileが複数FROM構成のときの注意点

次のFROMコマンドに処理が移るとき引き継がれないので、ARGしなおさないといけません。

ちなみに複数FROMが必要となるのは
[ソースコードをビルドするイメージ]

[ビルド結果の実行体だけを配備して実行するためのイメージ]
を分けたい時などですね。

FROM golang:1.13 as base

FROM base as builder
ARG GITHUB_ACC
ARG GITHUB_ACC_PASSWORD
RUN echo -e "machine github.com\nlogin $GITHUB_ACC\npassword $GITHUB_ACC_PASSWORD" > ~/.netrc
RUN go mod download
 ・
 ・
 ・
FROM base as scratch
ARG GITHUB_ACC
ARG GITHUB_ACC_PASSWORD
 ・
 ・
 ・