🐳

DockerでPHPとAWS CLIとDynamoDBが使える環境を作成する

2022/10/18に公開

前回の記事にさらに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 --from=composer:latest /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