목차
개요
튜토리얼을 다 따라왔다면 큰 문제없이 따라서 할 수 있을것이고 이해 또한 할 수 있을 것이다.
나같은 경우에는 spring 프로젝트에 추후 mysql을 RDS에 올려 사용할거라서 j2가 아닌 1. mysql 환경을 쓰고싶었고
같은 경로의 DB를 사용하는 2. 또 다른 서비스 시스템이 존재했기에 도커로 mySql 구축이 필요했다.
또한 나중에 RDS가 아니라 일반 서버 EC2등에 올릴때 MySQL의 설정을 미리 도커파일에 작성해두고 도커의 장점인 즉시배포를 통해 빠르게 사용 가능하고 또한 원하는시점으로의 백업도 유용하다.
(Update 0627)*현재 compose v2 버전에서는 명세가 조금 바뀌었지만 아래의 코드로도 작동이 가능하다.
docker ComposeV2 migration
https://docs.docker.com/compose/migrate/
또한 docker Desktop 에서도 원하는 이미지를 찾아서 deploy를 통해 생성이 가능하지만 classic한 docker-compose 명령어를 사용할 예정이다.
준비할 프로그램들
도커 파일을 편집하고 추가할 IDE
옵션1) 컨테이너 상태와 추가 제거 재부팅 등을 편하게 할 수 있는 Docker Desktop
옵션2) MySQL의 상태와 DB관리를 GUI로 적용 가능한 MySQLWorkBench
설치가 끝났다면 도커 파일부터 작성해보자
도커 compose 파일 작성하기
튜토리얼에서 보았다 싶이 도커 컨테이너를 사용하기 위해서는 해당 컨테이너를 설명하는 일종의 설명서가 필요하다.
원하는 위치에 docker 폴더를 만들어주고 그 안에 docker-compose.yml 파일을 생성한다.
MySQL은 아래와 같은 설정을 통해 docker-compose.yml 파일을 작성할 수 있다.
version: "3"
services:
db:
image: mysql:8.0
platform: linux/x86_64
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: mysqldb
MYSQL_USER: nstgic
MYSQL_PASSWORD: 1234
TZ: Asia/Seoul
volumes:
- ./db/mysql/data:/var/lib/mysql
- ./db/mysql/config:/etc/mysql/conf.d
- ./db/mysql/init:/docker-entrypoint-initdb.d
docker hub 에서 원하는 프로그램의 최신 버전을 가져온다. 혹은 원하는 버전
services:
db:
image: mysql:8.0 // 위에 있던 version과 image를 맞춰준다.
platform: linux/x86_64 // 리눅스 기반 도커 환경에서 실행
restart: always // 오류 발생시 재시작 여부 or 첫 부팅시 자동 실행 여부
ports:
- "3306:3306" // mySQL로의 인바운드 규칙
environment:
MYSQL_ROOT_PASSWORD: 1234 // MySQL 접속시 사용하게될 루트 PW
MYSQL_DATABASE: mysqldb // 생성할 DB 이름
MYSQL_USER: nstgic // 굳이 적지 않아도되지만 자신의 아이디
MYSQL_PASSWORD: 1234 // 그리고 비밀번호
TZ: Asia/Seoul //TimeZone 설정 나중에 DB에 시간 관련 데이터를 입력할때를 대비해서 미리 입력해놓으면 좋다
volumes: // 볼륨설정 (외부나 특정 장소에 mount하는 명령어)
- ./db/mysql/data:/var/lib/mysql /
- ./db/mysql/config:/etc/mysql/conf.d
- ./db/mysql/init:/docker-entrypoint-initdb.d
좀 자세히 보고싶으면 아래를 참조하자 (추천)
또한 위의 이러한 volumes 폴더인 ./db/mysql/init 를 만들어주고 해당 폴더 내에 init.sql 을 만들어 준 후에 아래 코드를 입력해주자
CREATE DATABASE test default CHARACTER SET UTF8;
SHOW DATABASES;
도커 컨테이너 생성하기
터미널에서 위에서 생성했던 ./docker 위치로 이동하여 아래와 같은 명령어를 실행한다.
docker-compose -p mysqldb up -d
docker-compose -p [설정한 DB이름] up -d
그럼 아래와 같이 성공적으로 도커 컨테이너가 생성되고 실행되는것이 보인다.
만약 docker demon 관련된 오류가 뜬다? 아래 포스팅을 참조하자
2023.01.09 - [Docker] - [ERROR해결] Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Docker desktop를 설치했다면 실행중인 것을 확인 할 수 있다.
또한 Docker desktop에서 지원해주는 터미널에서 DDL을 이용해 현재 DB 구성 상태를 확인 할 수 있다.
해당 명령어는 아래와 같다
mysql -u chos -p mysqldb
mysql -u (유저명 옵션) [ 유저명 ] -p [ 실행한 DB이름 ] + 이후 다음행에 유저 pw을 입력해준다.
이후에 MySQL 명령어인 SHOW로 존재하는 DB 목록을 뽑으면 아래와 같다.
SHOW DATABASES;
도커 설정파일에 세팅해두었던 db이름인 mysqldb가 나타났다! 성공적으로 빌드를 했다.
하지만 항상 SHOW 명령어를 칠수는 없는 노릇이니 간단한 GUI를 지원하는 MySQL WorkBench를 Docker 위에 생성된 MySQL과 연결해보자
MySQL WorkBench 연결하기
MySQLWorkBench를 실행하고 메인에 있는 + 를 눌러서 추가할 준비를 하자
Connection Name : 원하는 이름 할당
Method : TCP/IP 방식
Hostname : local host IP 할당 = 127.0.0.1
Username : docker-compose의 MYSQL_USERPassword : docker-compose의MYSQL_PASSWORD
Default Schema: docker-compose의 MYSQL_DATABASE
Connection Test를 한다.
OK를 눌러 생성을 한다.
이후에 생성된 항목탭에 들어가게된다면
내부를 쉽게 확인 가능하고 심지어 자주 사용하는 SQL DDL 등을 저장하거나 불러와서 사용할 수도 있다.
마무리
다음 포스팅에서는 구체적으로 docker-compose 코드를 분석해보자
'Docker' 카테고리의 다른 글
IntelliJ 위에서 Docker deploy하기 (0) | 2023.06.30 |
---|---|
도커로 MySQL 실행 - DockerCompose 파일 뜯어보기 (0) | 2023.04.05 |
튜토리얼(6) 멀티 컨테이너(Multi container apps) (0) | 2023.01.22 |
튜토리얼(5) 바인드 마운트(Bind mount)로 소스 코드 업데이트 (0) | 2023.01.21 |
튜토리얼(4) 볼륨 마운트(Volume mount)로 Persist DB관리 (0) | 2023.01.21 |