
프로젝트를 도커를 이용해 올리려면 여러개의 컨테이너가 필요한데,
매번 도커파일을 생성해 컨테이너 하나 하나 만들기가 번거로우니
도커 컴포즈 파일을 이용해 한번에 여러개의 컨테이너를 올리려고 한다!

version 을 설정하고,
컨테이너를 만들 서비스들을 설정한다.
나는 mysql db 와 그걸 백업해줄 backup 그리고 프로젝트 컨테이너를 만들 것이다.

mysql 기반으로 프로젝트 컨테이너를 생성할 것이기 때문에
depends_on 에 mysql을 입력해준다.
build 란 현재 경로에 있는 dockerfile로 이미지를 만든 걸로 빌드하겠다는 의미이다.
중요한 개인정보를 담아놓은 env파일을 먼저 만들고,
env_file 에 현재 경로에 있는 .env형식인 파일을 찾으라고 명시해준다.

여기서 volumes: 는
일단 프로젝트 내에 bak 이란 디렉토리를 생성 후,
volumes: - ./bak:/var/lib/backup 이라고 명시해놓으면
이 컨테이너 안에 var/lib/backup 이라는 폴더가 생길텐데 그 안에 있는 데이터들을 /bak이라는 폴더와 연결을 해서 동기화를 해주겠다는 의미이다.
*여기서 volumes 는 저장소와 같은 의미이다.
command: 에 명시되어있는 내용은
bash 파일을 열어서 명령을 실행하겠다는 것이고
mysqldump이라는 백업툴을 이용해 /var/lib/backup 파일에
날짜.sql 형식으로 파일을 만들겠다는 뜻이다.
docker-compose -p 컴포즈이름 up
아마 이대로 실행을 한다면 mysql에 접근할 수 없다는 에러가 뜰 것이다.
mysql 에 접속해 데이터베이스를 생성 후, 사용자에게 권한을 부여해줘야한다.
docker exec -it mysql_db bash
mysql_db 컨테이너 안에 있는 bash에 접속한 후,
mysql -u root -p
를 입력해 해당 root의 비밀번호를 입력해 mysql에 접속한다.
create database 데이터베이스이름;
데이터베이스를 생성한 후,
create '사용자이름'@'%' IDENTIFIED BY '사용자비밀번호';
grant all privileges on *.* to '사용자이름'@'%' with grant option;
해당 사용자에게 권한을 부여하면 된다!
docker-compose 파일을 수정할 때마다 삭제하고 다시 생성하는 것보다
이 과정을 sh파일로 작성을 해 한번에 실행하고자 한다!
docker.compose.start.sh 파일을 만들어
#!/bin/bash --> 해시뱅 or 셔뱅이라고 불리는 구문. 실행될 명령 인터프리터를 지정하는 역할
즉, 운영체제에게 해당 스크립트를 실행할 때 사용할 프로그램을 알려줌
해당 스크립트를 실행할 때 Bash 셸을 사용하도록 지정한 구문인 것.
docker-compose down
docker-compose -p 컴포즈이름 up --build -d
이 일련의 과정을 단축시킬 수 있다!!