以前、GIRLS.PRODUCTに参加した時、CircleCI、ECS、ECR環境でDockerコンテナを継続的デプロイする環境を作ったのですが、CircleCIの管理画面で設定した環境変数をDockerイメージに反映するのに少し苦労したのでメモです。
上記環境を設定するときは以下を参照しました。
CircleCI+ECS+ECR環境でDockerコンテナのCD(継続的デプロイ)環境を構築する -前編-
CircleCI+ECS+ECR環境でDockerコンテナのCD(継続的デプロイ)環境を構築する -後編-
CircleCIで環境変数を設定する
Project Settingsより、環境変数を設定します。
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でARG
とENV
を使う
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に接続することが出来ました。