複数環境(本番、検証、開発)でECS on Fargateを構築した際にDockerfileを共通化した備忘録です。
前提情報
手順
buildspec.yml内のdocker build
するところでDockerfileに引数を渡すことで共通化できます。
例)Javaのメモリ割り当てのところを共通化する
1、パラメータストアにメモリの初期値と最大値を設定する
メモリ初期値のキー名:/web/java-min-memsize
メモリ最大値のキー名:/web/java-max-memsize
※画像は省略
2、buildspec.ymlでパラメータストアの値を取得し、Dockerfileに引数で渡す
「--build-arg」を利用してDockerfileに引数で渡す
複数の値を渡したい場合は以下のように「--build-arg」を複数書く。
buildspec.yml
version: 0.2 env: parameter-store: maxsize: "/web/java-max-memsize" minsize: "/web/java-min-memsize" phases: install: runtime-versions: python: 3.9 pre_build: commands: pre_buildは省略 build: commands: - mv buildConf/backOffice/* . - docker build -t $REPOSITORY_URI:latest --build-arg MAXSIZE=${maxsize} --build-arg MINSIZE=${minsize} . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
3、Dockerfileで値を受け取る
「ARG」で引数を受け取り、「ENV」で環境変数に設定します。
最後に${}
で括って環境変数名を入れます。
環境変数に入れないと実行時に参照することができません。
Dockerfile
FROM public.ecr.aws/amazoncorretto/amazoncorretto:17 ARG MINSIZE ARG MAXSIZE ENV MINSIZE ${MINSIZE} ENV MAXSIZE ${MAXSIZE} CMD java -Xms${MINSIZE}m -Xmx${MAXSIZE}m -Dloader.path=/test/conf -jar /test/sample.jar
以上で設定は完了です。