Docker에서 mysql 적용
도커는 미리 설치해뒀다는 가정 하에 mySql 실습을 해보려고 합니다.
윈도우 기준 wsl2가 아닌 powerShell 터미널에서 진행합니다. wsl에서는 오류가 나더라구요.
먼저 docker -v을 통해 깔아둔 도커의 버전 확인부터 해봅시다.
Docker version 26.0.0, build 2ae903e
제 경우 학습을 하며 깔아둔 도커 버전이 뜨는 걸 볼 수 있습니다.
버전이 나오지 않는다면 도커가 설치되어 있지 않은 것이니 설치부터 시작해주시면 됩니다.
🚩MySql 이미지 pull 해오기
docker pull mysql
가장 먼저 docker pull 명령어를 사용하여 mysql 로 등록된 이미지를 가져오게 됩니다. 도커를 본격적으로 다루어보기 위해 실습 대상은 mysql로 정했습니다.
아래와 같이 GUI를 통해 확인해도 mysql 이미지가 등록된 것을 볼 수 있습니다.
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를 입력해줍니다. 컨테이너 외부로 다시 나오게 됩니다.