AWS LightsailでMySQL環境を最小構成で構築する(後編)

前編では、AWS LightsailでUbuntuの最小構成インスタンスを作成し、スワップの追加や日本語ロケールの設定までを行いました。後編では、DockerとMySQLコンテナのセットアップ、接続確認、トラブル対応までを解説します。

ステップ①:DockerとDocker Composeのインストール

LightsailのUbuntuはDocker非搭載のため、まずDocker本体とCompose(v1)をインストールします。

sudo apt install docker.io docker-compose

最新版のdocker-compose(v2)をインストールしなくても、本記事の内容は動作します。v2を入れた場合は docker compose というようにスペース付きでコマンドを実行してください。

ステップ②:MySQLコンテナ用ディレクトリと構成ファイルの準備

任意のディレクトリ(例:mysql-env)を作成し、その中に docker-compose.yml ファイルを作成します。

以下のコマンドでエディタを開き、内容を手入力してください。
インデントを必ずつけてください。入力後は Ctrl + XYEnter で保存できます。

mkdir ~/mysql-env
cd ~/mysql-env
nano docker-compose.yml

設定例:

version: '3.8'
services:
  mysql:
    image: mysql:8
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ****
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

****部分は任意で変更してください。
※ 本記事の設定は学習用のサンプルです。本番環境ではパスワード変更などセキュリティ対策を十分に行ってください。

ステップ③:コンテナの起動と確認

docker-compose up -d

起動状況の確認:

docker ps

STATUSの項目がUP~と表示されていたら起動完了です。
MySQLに接続してみます:

docker exec -it mysql mysql -uroot -p****

プロンプト(mysql>)が出れば接続成功です。
****ここは作成したパスワードです。

MySQL接続画面
MySQLにSSHに接続完了画面

ステップ④:トラブル対応と補足

◻︎yamlの構文エラー(インデントや文字化け)

コピー&ペーストではインデントや改行が崩れて yaml.parser.ParserError が出ることがあります。手入力がお勧めです。

◻︎MySQLコンテナが起動するが接続できない

この症状は、実は メモリ不足が原因でMySQLが内部でクラッシュしているケースがあります。特にLightsail最小構成(512MB)では起こりやすいです。

次のようなログが繰り返されていたら、メモリ不足の可能性大です:

Initializing database files
Killed
Can't connect to local MySQL server...

この場合、スワップ追加で解消することがあります。

◻︎スワップを追加しても消えてしまう

再起動後にスワップが消えていた場合、/etc/fstab への記述がない可能性があります。以下のように追記してください:

/swapfile none swap sw 0 0

追記後、再起動して sudo swapon --show で有効化を確認します。

まとめ

AWS Lightsailの最小構成でDocker+MySQL環境を構築する一連の手順を紹介しました。

  • Lightsailでの構築は低コストで始めやすい
  • Dockerで環境を簡潔に構築・削除可能
  • yamlの記述エラーやメモリ不足に注意
  • スワップは永続化しておくと安心

開発環境や学習目的であれば、Lightsail+Dockerは非常に便利な構成です。ぜひお試しください。

MySQLの試運転
バージョン確認や一時テーブル作成

▼ 前編はこちら:
LightsailでDocker+MySQL環境を最小構成で構築する(前編)