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:
※上手く作成できれば、鯨さんのマークが付いている。
コンテナを起動す
コンテナを起動するには docker-compose.yml ファイルがあるディレクトリで下記コマンドを叩くとコンテナが作成される。
$ docker compose up
※上手く作れたら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)