AWS EC2インスタンスにDockerを使用したデプロイについて
システム開発部 森岡です。
今回はAWSの資格も取得したということで、AWS関連の投稿となります。
経緯
なぜAWSのEC2インスタンスにDockerを使用してデプロイしようと思ったかですが、開発環境を作成するのにDockerを使用しているので本番環境にもそのままデプロイできたらと考えたためです。
Dockerを使用してAWSへデプロイするにはECS(Elastic Container Service)がありますが、今回はEC2を使用してデプロイしてみようと思います。
デプロイするプログラムについて
デプロイするプログラムの構成については以下の通りです。
- Laravel
 - MySQL
 - Nginx
 
Dockerの構成
Laravelの導入などの詳しい説明は省略しますが、Dockerの構成は以下のようになっています。
version: '3'
volumes:
  vendor-store:
  node_modules-store:
services:
  app:
    container_name: app
    build: ./docker/app
    volumes:
      - ./myapp/:/var/www
    depends_on:
      - db
  websv:
    image: nginx
    container_name: websv
    ports:
      - 80:80
    volumes:
      - ./myapp/:/var/www
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
      - db
  db:
    image: mysql:latest
    platform: linux/amd64
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: myapp
      MYSQL_USER: myapp
      MYSQL_PASSWORD: myapp
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306EC2インスタンスへのデプロイ
以下のような流れでEC2インスタンへデプロイを行なっています。
- EC2インスタンスの作成
 - EC2インスタンスへのdockerインストール
 - EC2インスタンスへのdocker-composeのインストール
 - dockerを使用してコンテナを立ち上げる
 
EC2インスタンスの作成
こちらについては様々なところで説明されているため割愛します。
今回は以下のようなインスタンスを作成しました。
- AMI:Amazon Linux 2
 
- CPU:t2.micro
 - ストレージ:30GB
 
EC2インスタンスへのdockerインストール
EC2インスタンスへSSHを使用してログインし、以下のコマンドを入力しEC2インスタンスへdockerをインストールします。
sudo yum install -y docker次に以下のコマンドを入力し、dockerを立ち上げます。
sudo service docker start次のコマンドでログインユーザーをdockerグループに入れます。
sudo usermod -a -G docker ec2-userEC2インスタンスへのdocker-composeのインストール
以下のコマンドを入力し、docker-composeをインストールします。
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-composedockerを使用してコンテナを立ち上げる
開発環境のリソースもしくはイメージをEC2インスタンスへコピーし、以下の通りコンテナを立ち上げます。
cd myapp               # アプリケーションルートへ移動
docker build           # dockerイメージのビルド
docker compose up -d   # dockerコンテナの立ち上げ.envやデータベースの初期設定を行い、80番ポートを開放すると以下の通りLaravelの初期画面が表示されます。

終わりに
今回は余り内容は濃くありませんでしたが、AWS関連の投稿でした。
AWSは簡単にリソースが手に入りサクッと環境が作れてしまうので助かりますね。(お金はかかりますが。。。)
次回はECSを使用したデプロイについて書いていこうと思っています。
弊社では Laravel やRuby on Rails を使用してウェブシステムの構築を得意としております。
弊社にお仕事を依頼したいお客様がいらっしゃいましたら、以下のフォームもしくはメールにてお気軽にお問い合わせ下さい。
システム開発部 森岡(morioka_tatsuaki@computer-tb.co.jp)
