개발 ON
  • [Network | Docker] 데이터베이스 외부 원격 접속
    2024년 07월 03일 15시 08분 51초에 업로드 된 글입니다.
    작성자: 이주여이

    게시글 작성 기준으로 현재는 호스트 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 접속 후 만들었던 테이블과 데이터가 출력되는 것을 확인할 수 있다!

    댓글