#はじめに
ローカル環境/本番環境(EC2)の其々でコンテナを起動させた際のデータベース閲覧方法と
環境による閲覧方法の違いがあるのか気になったので、調べてみました。
#環境
- Rails:5.0.7
- MySQL:5.6
- Docker:19.03.8
- EC2(AMI):Amazon Linux AMI
#ソースコード
Dockerfile
FROM ruby:2.5.1
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /app
RUN mkdir -p tmp/sockets
docker-compose.yml
version: '2'
services:
db:
image: mysql:5.6
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: password
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- mysql-data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
app:
build:
context: .
command: bundle exec puma -C config/puma.rb
volumes:
- .:/app
- public-data:/app/public
- tmp-data:/app/tmp
- log-data:/app/log
depends_on:
- db
depends_on:
- web
web:
build:
context: containers/nginx
volumes:
- public-data:/app/public
- tmp-data:/app/tmp
ports:
- 80:80
#データベース接続
ローカル、EC2共通
#起動中のコンテナ名確認
docker-compose ps
#DBコンテナに入る
docker exec -it DBコンテナNAME bash
#mysqlへ接続(パスワードはdocker-compose.ymlに記載したもの)
mysql -u root -p
Enter password:
EC2
#DBコンテナのPORT確認
docker ps
#確認結果(例)
0.0.0.0:3306->3306/tcp
#mysqlへ接続(パスワードはdocker-compose.ymlに記載したもの)
mysql -h 0.0.0.0 -P 3306 -u root -p
Enter password:
#データベースの中身閲覧
ターミナル
#データベース接続
mysql -u root -p
#どんなデータベースがあるか
show databases;
#使用したいデータベースに切り替え
use データベ-ス名;
#テーブル一覧
show tables;
#テーブルの構造確認
describe テーブル名複数系;
#テーブルの中身確認
select * from テーブル名複数系;
#おわりに
今回ローカルとEC2でそれぞれ起動したコンテナにどのような違いがあるのか、データベースの観点から調べてみました。間違ってる点があれば指摘していただけると幸いです。
同じポート3306で起動しているはずが、ローカルではmysql -h 0.0.0.0 -P 3306 -u root -pのコマンドが効かなかったので引き続き調査します。。
#参考URL
https://qiita.com/hayabusa3703/items/9893a53c21ddc3c2403a
https://qiita.com/hot_study_man/items/4e129dacb7c3cab4b568