Help us understand the problem. What is going on with this article?

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

More than 3 years have 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に接続することが出来ました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした