CircleCI
docker

CircleCI で設定した環境変数を Dockerfile で読み込んでイメージに反映する

More than 1 year has passed since last update.

以前、GIRLS.PRODUCTに参加した時、CircleCI、ECS、ECR環境でDockerコンテナを継続的デプロイする環境を作ったのですが、CircleCIの管理画面で設定した環境変数をDockerイメージに反映するのに少し苦労したのでメモです。

上記環境を設定するときは以下を参照しました。
CircleCI+ECS+ECR環境でDockerコンテナのCD(継続的デプロイ)環境を構築する -前編-
CircleCI+ECS+ECR環境でDockerコンテナのCD(継続的デプロイ)環境を構築する -後編-

CircleCIで環境変数を設定する

Project Settingsより、環境変数を設定します。
スクリーンショット 2016-09-08 17.09.15.png

circle.ymlを編集する

CircleCIのDockerのバージョンが低いので、上げる

イメージビルド時に使う予定の--build-argがDockerのバージョン1.9から使えますが、CircleCIでそのまま使うと昔のバージョンで実行してしまうので、変える必要があります。

circle.yml
machine:
  pre:
    - curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0
  services:
    - docker

circle.ymlのイメージビルドするところで--build-argを使う

circle.yml内ではCircleCIで設定した環境変数が使えるため、--build-argでひとつひとつ丁寧にDockerfileに受け渡します。

docker build --build-arg DOCKER_FILE_PATH_NAME=$CIRCLE_CI_PATH_NAME .

上記二つを反映して実際に動かしたファイルは以下です。

circle.yml
machine:
  php:
    version: 7.0.4
  pre:
    - curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0
  services:
    - docker

dependencies:
  post:
    - docker build --build-arg WOMANSHIFT_DEFAULT_MYSQL_URL=$WOMANSHIFT_DEFAULT_MYSQL_URL --build-arg WOMANSHIFT_DEFAULT_MYSQL_PASSWORD=$WOMANSHIFT_DEFAULT_MYSQL_PASSWORD --build-arg AWS_SECRET_KEY=$AWS_SECRET_KEY --build-arg AWS_KEY=$AWS_KEY -t $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/womanshift-web:$CIRCLE_SHA1 .

test:
  post:
    - docker run -d -p 80:80 --name womanshift-web $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/womanshift-web:$CIRCLE_SHA1; sleep 10

deployment:
  prod:
    branch: master
    commands:
      - ./deploy.sh

DockerfileでARGENVを使う

ARG--build-argで設定した変数をDockerfile内で使用すると宣言します。
ENVでイメージに環境変数を設定します。

実際に動かしたファイルは以下です。

FROM richarvey/nginx-php-fpm:php7

ARG WOMANSHIFT_DEFAULT_MYSQL_URL
ARG WOMANSHIFT_DEFAULT_MYSQL_PASSWORD
ARG AWS_SECRET_KEY
ARG AWS_KEY

ENV FUEL_ENV production
ENV WOMANSHIFT_DEFAULT_MYSQL_URL $WOMANSHIFT_DEFAULT_MYSQL_URL
ENV WOMANSHIFT_DEFAULT_MYSQL_PASSWORD $WOMANSHIFT_DEFAULT_MYSQL_PASSWORD
ENV AWS_SECRET_KEY $AWS_SECRET_KEY
ENV AWS_KEY $AWS_KEY

COPY . /opt/womanshift

COPY conf/default.conf /etc/nginx/sites-available/default.conf

RUN chmod 777 /opt/womanshift/fuel/app/logs
RUN chmod 777 /opt/womanshift/fuel/app/tmp

EXPOSE 80

WORKDIR /opt/womanshift

以上で、本番反映したコンテナからAWS各種サービス、MySQLに接続することが出来ました。