내 프로젝트 컨테이너 기반 서비스 만들기

소만이·2024년 2월 9일
post-thumbnail

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

1. 위 사진처럼 docker-compose.yml 파일을 생성한다.

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

이 일련의 과정을 단축시킬 수 있다!!

0개의 댓글