0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

dockerとSQLについて

Last updated at Posted at 2023-08-03

Dockerについて少し勉強したので、軽くまとめました。(自分用)

dockerとは?

Dockerは、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームである。 Dockerはコンテナ仮想化を用いたOSレベルの仮想化によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする。

  • Dockerを使って作った仮想環境はコンテナと呼ばれる。
コマンドと操作

Dockerコンテナの作成・起動・停止のために使用するコマンド

  • docker create (新しいDockerコンテナを作成する)
  • docker start (作成済みのDockerコンテナの起動)
  • docker run (新しいDockerコンテナを作成&起動する)
  • docker stop (作成済みのDockerコンテナを停止する)
  • docker rm (作成済みのDockerコンテナを削除する)

環境構築

  • 初めにディレクトリを作成することから始める。ファイルを作成後、(例)docker-compose.yml と作成。
version: '3.1'

services:

  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    platform: linux/x86_64
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - 3308:3306
volumes:
  mysql_data:

Image from Gyazo

※上手く作成できれば、鯨さんのマークが付いている。

コンテナを起動す

コンテナを起動するには docker-compose.yml ファイルがあるディレクトリで下記コマンドを叩くとコンテナが作成される。

$ docker compose up

Image from Gyazo

※上手く作れたらOK

コンテナが消えるのは下記コマンドを叩く。

$ docker compose down

SQLに接続する

docker compose up -d && docker compose exec db bash

→と叩くと、#が表示される為、下記コマンドを叩く。

mysql -u root -p 

すると、パスワードを要求される。PW:exampleと打てばOK

※全体的には下記のような感じ。

docker compose up -d && docker compose exec db bash
[+] Running 1/0
  Container sql_basic-db-1  Running                                                 0.0s 
bash-4.2# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.43 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

また、SQLから抜けるにはexitで抜ける。

  • MySQL サーバーホスト上のデータベースを一覧表示するコマンド
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.03 sec)

mysql> 

データベースの作成方法

SQLの場合→sample_study というDBを作る。

mysql> create database sample_study;
Query OK, 1 row affected (0.16 sec)

railsの場合

$ rails db:create

show databasesで見ると、sample_study が入っている。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample_study       |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

データベースの選択方法

mysql> use runteq_study
Database changed

※railsではどのデータベースを使うかは自動で選択される。

テーブルの作成方法

  • テーブルの確認
mysql> show tables;
Empty set (0.02 sec)
  • テーブルの設定
mysql> CREATE TABLE user(
    id INT(11) AUTO_INCREMENT NOT NULL, 
    first_name VARCHAR(30) NOT NULL,
    last_name VARCHAR(30) NOT NULL,
    PRIMARY KEY (id));

Query OK, 0 rows affected (0.02 sec)
  • 設定された後の表示
show tables;
+------------------------+
| Tables_in_sample_study |
+------------------------+
| user                   |
+------------------------+
1 row in set (0.00 sec)

railsの場合はこのように作成。

$ rails g model user first_name:string last_name:string
$ rails db:migrate

テーブルにレコードを追加する方法

mysql> insert into user (first_name, last_name) values ('dyson', 'saito');
Query OK, 1 row affected (0.00 sec)
  • テーブルを確認
mysql> select * from user;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | dyson      | saito     |
+----+------------+-----------+
1 rows in set (0.00 sec)

railsでのテーブル追加

user = User.new(first_name: 'dyson', last_name: 'saito')
user.save

whereで絞り込む

mysql> select * from board where user_id = 1;
+----+-------+------------------+---------+
| id | title | body             | user_id |
+----+-------+------------------+---------+
|  1 | hoge  | hogehogehogehoge |       1 |
|  2 | fuga  | fugafugafugafuga |       1 |
+----+-------+------------------+---------+
2 rows in set (0.03 sec)

railsの場合

Board.where(user_id: 1)

order について

ASC・・・昇順(小さいもの順)
DESC・・・降順(大きいもの順)

mysql> select * from board order by title desc;
+----+-------+------------------+---------+
| id | title | body             | user_id |
+----+-------+------------------+---------+
|  1 | hoge  | hogehogehogehoge |       1 |
|  2 | fuga  | fugafugafugafuga |       1 |
|  3 | bar   | barbarbarbar     |       2 |
+----+-------+------------------+---------+
3 rows in set (0.01 sec)

railsの場合

Board.all.order(title: :asc)

update(変更)方法について

  • 変更前
mysql> select * from user;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | dyson      | saito     |
|  2 | hisaju     | kikumoto  |
|  3 | takako     | omoshiro  |
+----+------------+-----------+
3 rows in set (0.00 sec)

変更する

mysql> update user set first_name="daichi" where id = 1;
  • 変更後
mysql> select * from user;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | daichi     | saito     |
|  2 | hisaju     | kikumoto  |
|  3 | takako     | omoshiro  |
+----+------------+-----------+
3 rows in set (0.00 sec)

→first id にdaichiと変更されている。

user.update(first_name: 'daichi') # userはidが1のユーザーという前提

delete(削除)について

  • レコードを削除する。
mysql> delete from user where id = 3;

id 3のtakakoが削除される。

  • 変更前
mysql> select * from user;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | daichi     | saito     |
|  2 | hisaju     | kikumoto  |
|  3 | takako     | omoshiro  |
+----+------------+-----------+
3 rows in set (0.00 sec)
  • 変更後
mysql> select * from user;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | daichi     | saito     |
|  2 | hisaju     | kikumoto  |
+----+------------+-----------+
2 rows in set (0.00 sec)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?