티스토리 뷰

CI&CD

Docker - Mysql 설치 방법

realizers 2022. 2. 24. 14:01
728x90
반응형

이번에는 docker에서 mysql을 설정하는 방법을 알아보겠습니다.

 

 

 

Docker 설치
# 1.yum 패키지 업데이트 업그레이드 vi 설치
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vim
 
# 2.Docker & Docker Registry 설치
sudo curl -s https://get.docker.com/ | sudo sh

# 3.docker start
sudo service docker start

# 4.ec2-user 계정에 docker 실행 권한을 부여합니다.
sudo usermod -a -G docker $USER

 

Docker 버전 확인
docker --version

 

Mysql Docker 이미지 다운로드
  • -아래 명령어를 통해 MySQL 8.0.28 태그 이미지를 다운로드한다.
    태그에는 MySQL 버전을 명시하며. 만약 태그에 버전을 명시하지 않으면, 최신 버전인 latest를 가져옵니다.
docker pull mysql:8.0.28

 

Mysql Docker 이미지 다운로드시 실행 권한이 없어 오류가 발생하는 경우
  • docker group에 해당 유저를 추가해줘야합니다.
  • 보통 docker group이 생겼을거지만 sudo groupadd docker 명령어를 통해 한번 더 확인을 해줍니다.
  • sudo usermod -aG docker $USER 명령어를 입력하여 해당 유저를 추가해줍니다.
  • newgrp docker 명령어를 입력하여 적용이 완료됩니다. 또는 로그아웃 후 다시 로그인해도 됩니다.

 

Docker 이미지 확인
docker images

 

Docker Mysql 컨테이너 생성 및 실행
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 --name mysql-container -v /home/mysql/:/var/lib/mysql mysql:8.0.28 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-allowed-packet=1073741824
  • -d : 백그라운드에서 실행
  • -p : 3306:3306 한것은 포트 포워딩, 실제 내 서버로 들어온 3306 포트는 도커의 3306 포트로 보내겠다는 의미
  • -e : mysql을 도커로 실행할 때 반드시 있어야 하는 옵션 중 하나, root 의 패스워드를 지정
  • --name : 컨테이너의 이름을 설정, 이 부분을 설정하지 않는다면 랜덤하게 설정됨
  • -v : 내 서버와 mysql 서버의 특정 폴더를 공유하겠다는 의미인데, 이 부분이 필요한 이유는 db 데이터를 컨테이너가 삭제되어도 보존하기 위해서 설정하는 것
  • mysql:8.0.28 : docker images 했을 경우 repository와 tag명
  • --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci : 한글 출력을 위한 인코딩

 

Docker 컨테이너 목록 출력
docker ps -a

 

Mysql 컨테이너 bash shell 접속
  • docker exec 명령을 사용하여 docker 컨테이너에 접근한 다음 MySQL에 로그인합니다.
docker exec -it mysql-container bash

 

Mysql 서버 접속
  • MYSQL_ROOT_PASSWORD ={비밀번호}

 

외부에서 Mysql에 접근할 수 있도록 Mysql 컨테이너 내부에 사용자 생성 후 권한 부여
# 테스트를 위한 데이터 베이스 생성
create database sasu;

# 생성한 데이터 베이스 조회
show databases;

# 이름 : kdg , password : "12345"인 user를 생성해줍니다
CREATE USER 'kdg'@'%' IDENTIFIED BY '12345';

# 외부에서 접속 할 수 있도록 권한을 부여하도록 합니다.
GRANT ALL PRIVILEGES ON *.* TO 'kdg'@'%';

# 변경된 권한을 적용합니다.
flush privileges;

 

Aws Ec2 보안 그룹 인바운드 설정
  • 인바운드란 EC2 인스턴스로 들어오는 트래픽에 대한 규칙입니다. 쉽게 설명하면 특정 프로토콜, 포트를 탑재한 차량이 시내로 접근할 수 있도록하는 보안 장치에 대한 설명입니다.
  • 3306 포트를 열어줍니다.

 

인스턴스 ping 테스트
  • Aws Ec2의 인스턴스의 탄련적 아이피 및 퍼블릭 IPv4의 주소를 입력하면 됩니다.
  • ex) ping 123.12.56.123

 

Mysql 접속
  • 현재는 ssh가 아닌 기본 tcp로 접속가능하기 때문에 tcp로 설정합니다
  • Server Host는 탄력적 아이피의 주소 또는 퍼블릭 IPv4의 주소를 입력하면 됩니다.
  • username은 위에서 만든 유저명과 해당 비밀번호를 입력하면 됩니다.

728x90
반응형