🐳
DockerでPHPとAWS CLIとDynamoDBが使える環境を作成する
前回の記事にさらにDynamoDBをローカルで利用できる環境を加えました。
DynamoDBは公式からDockerイメージが配布されているのでそれを使います。
awsクレデンシャルの準備
適切な権限をもったAWSキーを~/.aws/credentialsにセットしておく
ディレクトリ構成
docker-compose.yml
- env_dynamodb
- Dockerfile
- env_mysql
- Dockerfile
- my.cnf
- env_php
- Dockerfile
- php.ini
docker-compose.yml
docker-compose.yml
version: '3.8'
services:
web:
image: php_aws_cli_sdk:1.0
build: ./env_php
container_name: 'env_php'
ports:
- 8080:80
working_dir: '/work'
volumes:
- "$HOME/.aws:/root/.aws"
- ./env_php/php.ini:/usr/local/etc/php/php.ini
- ../../examples:/work
networks:
- php_aws_cli_net
dynamodb:
image: dynamodb-local:1.0
build: ./env_dynamodb
container_name: 'env_dynamodb'
expose:
- "8000"
networks:
- php_aws_cli_net
mysql:
image: mysql:1.0
build: ./env_mysql
container_name: 'env_mysql'
working_dir: '/work'
expose:
- "3306"
environment:
- TZ=Asia/Tokyo
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=my_db
- MYSQL_USER=my_user
- MYSQL_PASSWORD=my
volumes:
- ./:/work
- ./database:/var/lib/mysql
- ./env_mysql/init:/docker-entrypoint-initdb.d
networks:
- php_aws_cli_net
networks:
php_aws_cli_net:
driver: bridge
Dockerfile
env_dynamodb/Dockerfile
FROM amazon/dynamodb-local:latest
ENTRYPOINT ["java","-jar","DynamoDBLocal.jar","-sharedDb"]
env_mysql/Dockerfile
FROM mysql:8.0
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf
env_php/Dockerfile
FROM php:7.3.17-apache
# composerのインストール
COPY /usr/bin/composer /usr/bin/composer
# パッケージのインストール
RUN apt-get update && apt-get install -y \
tzdata \
zip \
unzip \
less \
# && pecl install xdebug \
&& docker-php-ext-install pdo_mysql \
&& rm -rf /var/lib/apt/lists/*
# AWS CLIのインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
# AWS SDKのインストール
# RUN composer require aws/aws-sdk-php
RUN curl "https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip" -o "awssdkphp.zip"
RUN unzip awssdkphp.zip -d /tmp
# タイムゾーンを設定する環境変数
ENV TZ=Asia/Tokyo
php.iniとmy.cnf
php.ini
[Date]
date.timezone = Asia/Tokyo
[mbstring]
mbstring.language = Japanese
my.cnf
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
loose-local-infile=1
[client]
default-character-set=utf8mb4
loose-local-infile=1
コンテナ起動方法
docker-compose up -d --build
docker exec -it env_php bash
実行方法
例)DynamoDB-localをつかう
※{myprofile}の部分は自分のプロファイルを記載する
aws dynamodb list-tables --endpoint-url http://dynamodb:8000 --profile {myprofile}
終了方法
docker-compose stop
docker-compose rm
docker image ls(削除するIMAGE IDを確認)
docker image rm -f <IMAGE ID>
Discussion