Etc

Docker에서 mysql 적용

꼬드리 2024. 5. 30. 11:21

도커는 미리 설치해뒀다는 가정 하에 mySql 실습을 해보려고 합니다.

윈도우 기준 wsl2가 아닌 powerShell 터미널에서 진행합니다. wsl에서는 오류가 나더라구요.

 

먼저 docker -v을 통해 깔아둔 도커의 버전 확인부터 해봅시다.

Docker version 26.0.0, build 2ae903e

제 경우 학습을 하며 깔아둔 도커 버전이 뜨는 걸 볼 수 있습니다.

버전이 나오지 않는다면 도커가 설치되어 있지 않은 것이니 설치부터 시작해주시면 됩니다. 

 

 

🚩MySql 이미지 pull 해오기

docker pull mysql

pull 명령어를 사용하여, mysql을 가져옵니다.

가장 먼저 docker pull 명령어를 사용하여 mysql 로 등록된 이미지를 가져오게 됩니다. 도커를 본격적으로 다루어보기 위해 실습 대상은 mysql로 정했습니다.

아래와 같이 GUI를 통해 확인해도 mysql 이미지가 등록된 것을 볼 수 있습니다.

GUI로 확인해보면, mysql 이미지가 설치된 것을 볼 수 있습니다. httpd는 이전에 깔아둔 이미지네요.

 

GUI가 설치되어 있지 않다면, 터미널에서 docker images 명령어를 사용하여 현재 깔린 이미지를 확인할 수 있습니다.

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    e9387c13ed83   3 weeks ago   578MB
httpd        latest    67c2fc9e3d84   7 weeks ago   147MB

 

 

🚩mysql 이미지 기반으로 컨테이너 생성 뒤 실행하기

이제 불러온 이미지를 기반으로 새로운 컨테이너를 만들어 보겠습니다. 컨테이너의 이름은 mysql-container01로 지어보고, 포트는 3001번을 사용합니다. 또 Root Password 설정을 통해 원하는대로 비밀번호를 정해줍니다.

이 비밀번호는 이후 해당 컨테이너에 접근할 때에 사용하니 반드시 기억해주세요.

 docker run --name mysql-container01 -e MYSQL_ROOT_PASSWORD=1111 -d -p 3001:3001 mysql:latest

 

이제 도커의 컨테이너를 확인해보면 실행 중인 mysql-container01번을 찾을 수 있습니다.

 

 

💡컨테이너 비밀번호를 잊어버렸을 시  docker exec [컨테이너명] env 를 통해 비밀번호를 볼 수 있습니다.

PS C:\Users\> docker exec mysql-container01 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=19a05d686827
MYSQL_ROOT_PASSWORD=1111
GOSU_VERSION=1.17
MYSQL_MAJOR=8.4
MYSQL_VERSION=8.4.0-1.el9
MYSQL_SHELL_VERSION=8.4.0-1.el9
HOME=/root

 

 

 

🚩생성한 mysql 컨테이너 내부로 진입하기

# docker exec -it <컨테이너명> bash
docker exec -it mysql-container01 bash

 

exec 명령어로 컨테이너에 접속합니다. 이후 아래 명령어로 mysql에 접속하게 됩니다.

bash-5.1# mysql -u root -p

 

enter password라고 뜨는데 컨테이너 생성 시 적었던 비밀번호를 적어주면 됩니다.

성공적으로 하단과 같이 mysql> 이 등장하게 되면 내부 컨테이너로 접근이 완료된 것입니다.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, 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>

 

🚩mysql 가볍게 다루어보기!

이전에 mysql을 따로 다뤄본 경험이 없어, 마침 도커를 공부하며 가볍게 데이터를 추가해보기로 했습니다.

mysql에서는 기본적으로 데이터를 생성할 때 명령어 뒤에 반드시 ;를 붙입니다. 

 

  • show databases; 전체 데이터베이스를 조회합니다. 
  • use [데이터 베이스 이름]; 데이터 베이스를 사용합니다.
  • show tables; 데이터 베이스의 테이블 목록을 조회합니다.
  • select * from [테이블 이름]; 테이블의 내용을 전체 조회합니다.
  • CREATE DATABASE [데이터베이스명]; 데이터베이스를 새로 생성합니다.
  • alter과 insert를 사용하여 열을 생성하거나, 내부 데이터를 추가합니다.
//예시 1) show databases;로 전체 데이터베이스를 확인한다.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)


//예시 2) CREATE 데이터베이스로 animals라는 데이터베이스를 생성한다.
mysql> CREATE DATABASE animals;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| animals            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

//예시 3) use로 animals 데이터베이스를 사용한다.
mysql> use animals;
Database changed

//예시 4) create table animaltype (id int not null, primary key(id));
// animaltype이라는 table과 속성을 지정한다.

//예시 5) show tables; 
+-------------------+
| Tables_in_animals |
+-------------------+
| animaltype        |
+-------------------+
1 row in set (0.00 sec)

//예시 6) desc animaltype; 만든 테이블 내부를 확인한다.
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   | PRI | NULL    |       |
+-------+------+------+-----+---------+-------+

//예시 7) 테이블의 내부 데이터를 채워준다.
// alter을 사용해 20자까지 문자가 들어갈 수 있는 type 이라는 열을 만든다.
// 추가로 다른 열을 
mysql> alter table animaltype add type varchar(20) default null;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

//예시 8) insert를 통해 해당 타입에 해당하는 자료를 삽입할 수 있다.
mysql> insert into animaltype (id, type)
    -> value (1, 'Lion');
    
//Lion이라는 데이터가 삽입되었다.
mysql> select *
    -> from animaltype;
+----+------+
| id | type |
+----+------+
|  1 | Lion |
+----+------+

 

mysql을 종료하고 싶다면 exit 명령어를 사용합니다. 

해당 컨테이너를 아예 종료하고 외부로 나가기 위해선 다시 exit를 입력해줍니다. 컨테이너 외부로 다시 나오게 됩니다.

최종적으로 컨테이너 바깥으로 나오게 된다.