Docker

EC2인스턴스에서 Docker로 실행 중인 MySQL 데이터베이스와 MySQL Workbench 연동하는 법

king_hd 2024. 7. 7. 22:01

개요

ec2에서 docker로 mysql 데이터베이스를 관리하는데 데이베이스를 시각화하고 싶었다.

 

본문

1. EC2 인스턴스에서 MySQL Docker 컨테이너 포트 확인

먼저, EC2 인스턴스에서 MySQL Docker 컨테이너가 어떤 포트에서 동작하는지 확인해야 한다. 이 정보는 docker-compose.yml 파일에서 mysql 서비스의 포트 설정을 확인

예를 들어, docker-compose.yml 파일에서 MySQL 서비스의 포트가 3307:3306으로 설정되어 있다면, MySQL 서비스는 호스트의 3307 포트로 바인딩되어 외부에서 접근할 수 있다. 여기서 3307은 호스트(즉, EC2 인스턴스)의 포트이며, 3306은 Docker 컨테이너 내부 MySQL 포트다.

 

2. MySQL Workbench 설치

MySQL Workbench를 설치하고 실행합니다. 설치는 공식 웹사이트(https://dev.mysql.com/downloads/workbench/)에서 다운로드 받을 수 있다. 설치 후 MySQL Workbench를 실행

 

3. 새 연결 설정

MySQL Workbench를 실행한 후, 다음과 같은 단계로 새로운 연결을 설정

  • MySQL Connections 창에서 (+) 아이콘을 클릭하여 새로운 연결을 생성
  • Connection Name: 연결에 대한 이름을 입력 예를 들어, "EC2 MySQL Docker"와 같은 이름을 사용할 수 있다.
  • Connection Method: Standard TCP/IP over SSH를 선택합니다.
  • SSH 접속 설정:
    • SSH Hostname: EC2 인스턴스의 공인 IP 주소(퍼블릭 주소)를 입력.
    • SSH Username: EC2 인스턴스에 접속할 SSH 사용자 이름을 입력.
    • SSH Password/Key File: SSH 인증에 필요한 비밀번호 또는 키 파일을 입력. (인스턴스 생성시 발급받은 pem 경로로 설정)
  • MySQL 접속 설정:
    • MySQL Hostname: localhost 또는 Docker 컨테이너가 바인딩된 EC2 인스턴스의 IP 주소를 입력.
    • MySQL Server Port: Docker 컨테이너에서 MySQL이 사용하는 포트를 입력 예를 들어, 예시에서는 3307을 입력할 수 있다.
    • Username: MySQL 데이터베이스에 연결할 사용자 이름을 입력
    • Password: 사용자의 비밀번호를 입력
    • Default Schema: 사용하고자 하는 데이터베이스 기본 스키마 입력
  • Test Connection: 모든 설정을 입력한 후에는 Test Connection 버튼을 클릭하여 연결이 제대로 되는지 테스트
  • OK: 테스트가 성공적으로 완료되면 OK 버튼을 클릭하여 연결을 저장



#docker-compose.yml

services:
  back:
    build: ./back
    container_name: reactchat-back
    ports:
      - '3095:3095'
    environment:
      DB_HOST: ${DB_HOST}
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_DATABASE: ${DB_DATABASE}
      CLIENT_DEV_URL: ${CLIENT_DEV_URL}
      CLIENT_PROD_URL: ${CLIENT_PROD_URL}
      COOKIE_SECRET: ${COOKIE_SECRET}
      JWT_SECRET: ${JWT_SECRET}
      DB_PORT: ${DB_PORT}
      PORT: ${PORT}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      AWS_REGION: ${AWS_REGION}
      AWS_BUCKET_NAME: ${AWS_BUCKET_NAME}
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: ${DB_DATABASE}
    ports:
      - '3307:3306'
    volumes:
      - mysql_data:/var/lib/mysql

  nginx:
    image: nginx:alpine
    ports:
      - '443:443'
    volumes:
      - ./back/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /etc/letsencrypt:/etc/letsencrypt
    depends_on:
      - back

  front:
    build: ./front
    container_name: reactchat-front
    image: kingheedo/reactchat-front:latest
    ports:
      - '443:443'
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt  # SSL 인증서 공유
      - /var/lib/letsencrypt:/var/lib/letsencrypt  # SSL 인증서 저장소 공유

volumes:
  mysql_data:
    driver: local # 볼륨 드라이버 설정