Network/Docker

[Network | Docker] 데이터베이스 외부 원격 접속

이주여이 2024. 7. 3. 15:08

게시글 작성 기준으로 현재는 호스트 PC에서 접속했지만 이후 외부에서 원격으로 접속해야 한다면 공유기에서 포트 포워딩을 해주면 될 것 같다. 🐳🌊

1. 테스트용 컨테이너 생성

> docker run -d \ # 백그라운드 실행
> --name mysql \ # 컨테이너 이름
> -p 3308:3306 \ # 포트 매핑(외부에서 3308 포트로 들어오면 내부 3306 포트로 매핑된다)
> -e MYSQL_ROOT_PASSWORD=${password } \ # root 비밀번호 지정
> -e MYSQL_DATABASE=test \ # 테스트용 데이터베이스 생성
> mysql:5.7 # 이미지

2. 외부 접속 허용 설정

> docker ps -a
> docker exec -it mysql /bin/bash # 위에서 만들었던 컨테이너의 쉘에 접속
> mysql -u root -p # 컨테이너 내에서 root 계정으로 mysql에 로그인
> grant all privileges on *.* to '${계정명 }'@'%';
> flush privileges;
  • grant all privileges on *.* - 모든 데이터베이스와 모든 테이블에 대해 모든 권한을 부여
  • to '${계정명 }'@'%' - 특정 계정이 모든 호스트에서 접속 가능하도록 설정

 

데이터도 한번 넣어보자.

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

mysql> use test;
Database changed
mysql> create table test_tbl ( \
    -> id int unsigned auto_increment primary key, \
    -> name varchar(30) not null \
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> insert test_tbl(name) values('lee juyoung');
Query OK, 1 row affected (0.02 sec)

mysql> select * from test_tbl;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | lee juyoung |
+----+-------------+
1 row in set (0.00 sec)

3. 접속 테스트

호스트 PC에서 mysql workbench를 통해 접속 테스트를 진행한다. hostname은 가상 서버의 ip이며 port는 컨테이너 생성 시 컨테이너 내부 mysql 포트와 매핑한 포트 번호이다. 그리고 username과 password는 docker에서 mysql 이미지로 컨테이너 만들 때 사용했던 username과 password를 사용하면 된다.

 

컨테이너 내에서 mysql 접속 후 만들었던 테이블과 데이터가 출력되는 것을 확인할 수 있다!