글쓰는 개발자

도커 MySQL 설치 본문

Development/IT 튜토리얼

도커 MySQL 설치

세가사 2024. 4. 13. 20:34
반응형

도커 설치가 완료되었다면 이번에는 도커에 MySQL을 설치해보자.

 

 

윈도우 도커(Docker) 설치

도커의 필요성 개발환경 구성을 위해서는 생각보다 많은 프로그램을 설치해 두어야 한다. 가장 대표적인 예로 mysql, mongo DB같은 데이터 저장소와 rabbitMQ, Kafka등 메시지 큐, redis 같은 캐시 서버 등

gran007.tistory.com

 

cmd 창 혹은 PowerShell을 켠다.

 

docker가 제대로 동작하는지 확인하기 위해 docker -v 명령어로 버전정보를 확인한다.

도커는 실제로 동작하는 컨테이너를 생성하기 전에 해당 프로그램의 이미지를 다운받아야 한다.

 

이미지를 인스톨 파일 컨테이너를 설치된 프로그램 생각하면 이해하기 편하다.

 

1. Docker 이미지 다운로드

다음 명령으로 mysql 이미지를 다운받는다.

docker pull mysql

 

사용가능한 이미지들은 다음 명령으로 확인할수 있다.

docker images

 

2. Docker 컨테이너 실행

이제 실제로 다운받은 이미지를 사용해 동작하는 컨테이너를 만들자. mysql 컨테이너를 만들기 위해서는 컨테이너 이름과 MYSQL에서 사용할 루트 비번, 포트번호 등등을 추가해준다.

3306:3306은 컨테이너 내부의 3306 포트를 현재 컴퓨터의 3306 포트에 연결해주는 것이다. 만약에 여러개의 mysql 컨테이너를 만든다면 컨테이너 내부의 mysql은 3306으로 유지하면서 외부 포트를 3306, 3307 이런식으로 하나씩 늘려가면 포트 충돌을 피할수 있다.

docker run --name <컨테이너명> -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mysql:latest

 

 

현재 실행중인 컨테이너는 ps 명령어로 확인 가능하다.

docker ps -a

 

docker에 mysql 설치가 완료되었다. 생성된 컨테이너와 그 동작여부는 도커의 윈도우 프로그램을 통해서도 확인 및 관리 가능하다.

 

3. Docker 컨테이너 접속

MySQL은 도커의 컨테이너 내부에서 실행되고 있기 때문에 이에 접속하기 위해서는 docker의 컨테이너 내부로 접속을 해야 한다.

docker exec -it <컨테이너명> bash

 

MySQL을 docker에 설치하고 접속하는 방법을 알아보았다. 하지만 MySQL을 docker 내부에 설치해버리면 저장소의 위치도 docker 내부에 가상공간에 들어가기 때문에 컨테이너가 삭제될 때 mysql에 DB 저장소 데이터도 모두 삭제된다.

 

따라서 mysql을 도커 내부에 설치할대는 volume 옵션을 통해 DB 저장소는 외부로 빼고 그 외 실행프로그램만 도커 내부에서 실행하는 방법이 선호된다. 현재 컨테이너를 제거하고 mysql을 재설치 해보자.

 

4. Docker 컨테이너 삭제

컨테이너를 삭제하기 이전에 동작중인 컨테이너를 중단시켜야 한다.

docker stop <컨테이너명>

 

컨테이너를 삭제하기 위해서는 해당 컨테이너의 id를 알아야 한다. ps 명령을 통해 컨테이너의 id를 확인할수 있다.

docker ps

rm 명령을 통해 중단된 도커 컨테이너를 제거한다.

docker rm <컨테이너 ID>

 

5. Docker 컨테이너 재설치

아까처럼 docker run 명령을 통해 mysql을 설치해도 되지만 옵션이 늘어날수록 해당 명령어가 복잡해지고 명령어를 사용하면 이를 보관해서 여러번 실행할수 있는 방법이 없기 때문에 이번에는 docker-compose를 사용해 mysql을 설치해 보겠다.

 

docker-compose는 설치할 도커 컨테이너의 옵션과 종류등을 적어둘수 있는 컨피그 파일로 여러개의 이미지를 사용한 하나의 환경을 구축하는데도 유리하다.

 

docker-compose.yml 파일을 생성해서 컨테이너에 필요한 정보들을 기입한다.

version: "1"
services:
  db:
    image: mysql:latest
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: <루트 패스워드>
      MYSQL_DATABASE: <데이터베이스명>
      MYSQL_USER: <사용자명>
      MYSQL_PASSWORD: <사용자의 패스워드>
      TZ: Asia/Seoul
    volumes:
      - ./db/mysql/data:/var/lib/mysql

 

여기서 주목할 점은 volumes 옵션이다.

컨테이너 내부의 /var/lib/mysql 이라는 폴더를 현재 PC의 ./db/mysql/data 폴더에 볼륨 마운트 시키는 것으로 해당 컨테이너가 제거되더라도 내 PC의 마운트 된 DB 정보가 남기때문에 얼마든지 컨테이너를 지웠다 재설치해도 DB에 저장된 데이터가 날아가지 않는다.

 

docker-compose의 경우 한번 만들어 두면 재사용이 가능하며 docker-compose 명령으로 컨테이너를 생성 및 실행 시킬수 있다.

docker-compose -p <프로젝트명> up -d

 

docker-compose를 사용하면 여러개의 이미지를 하나의 프로젝트로 구성해주기 때문에 -p옵션으로 해당 프로젝트의 프로젝트명을 설정할 수 있다. 

 

7. Docker 컨테이너 접속

커맨트화면에서 docker exec 명령어를 통해서 DB에 접속할수도 있지만 docker desktop에 해당 컨테이너를 선택해 ...에 open in terminal 버튼을 선택하면 바로 해당 컨테이너에 접속할 수 있다.

 

반응형

'Development > IT 튜토리얼' 카테고리의 다른 글

[nextjs] App Router 다국어 지원 i18n next-intl  (0) 2024.07.30
윈도우 도커(Docker) 설치  (0) 2024.04.13