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:3306
EC2インスタンスへのデプロイ
以下のような流れで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-user
EC2インスタンスへの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-compose
dockerを使用してコンテナを立ち上げる
開発環境のリソースもしくはイメージを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)