[Docker] 도커 컴포즈(Doker Compose)

류재성's avatar
Jul 19, 2024
[Docker] 도커 컴포즈(Doker Compose)

1. 도커 컴포즈(Doker Compose) 란?

💡
Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구이다. 이를 통해 개발자들은 하나의 명령어로 여러 컨테이너를 손쉽게 시작, 종료 및 관리할 수 있다.
 

2. DB 설정

notion image
 
이렇게 패키지를 설정한다.
 
ex08/db/Dockerfile
FROM mysql COPY init.sql /docker-entrypoint-initdb.d/init.sql ENV MYSQL_USER=ssar ENV MYSQL_PASSWORD=ssar1234 ENV MYSQL_ROOT_PASSWORD=root1234 ENV MYSQL_DATABASE=blogdb CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] EXPOSE 3306
 
ex08/db/init.sql
use blogdb; CREATE TABLE IF NOT EXISTS user_tb ( id integer auto_increment, created_at timestamp, email varchar(20) not null, password varchar(60) not null, username varchar(20) not null unique, profile varchar(100), primary key (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS board_tb ( id integer auto_increment, content varchar(10000), created_at timestamp, title varchar(100) not null, user_id integer, primary key (id), constraint fk_board_user_id foreign key (user_id) references user_tb (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS reply_tb ( id integer auto_increment, comment varchar(100) not null, created_at timestamp, board_id integer, user_id integer, primary key (id), constraint fk_reply_board_id foreign key (board_id) references board_tb (id), constraint fk_reply_user_id foreign key (user_id) references user_tb (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; FLUSH PRIVILEGES;
 

3. 서버 설정

ex08/server/Dockerfile
FROM openjdk:11-jdk-slim RUN apt-get update RUN apt-get install -y git WORKDIR /app COPY ./entrypoint.sh ./entrypoint.sh RUN ["chmod", "+x", "entrypoint.sh"] ENTRYPOINT ["/bin/bash", "./entrypoint.sh"]
 
ex08/server/entrypoint.sh
git clone https://github.com/busanuv/blog-last.git cd blog-last chmod +x gradlew ./gradlew build chmod +x build/libs/*.jar java -jar -Dspring.profiles.active=docker build/libs/*.jar
 
 
 

4. DB 연결

 
notion image
 
이미지를 생성한다.
 
notion image
 
컨테이너를 생성한다. 3308 포트로 요청이 들어오면 3306 으로 연결된다.
 
notion image
 
터미널 모드로 진입한다.
 
notion image
 
mysql 버전을 확인한다.
 
notion image
 
mysql -u root -p // mysql에 진입한다.
💡
mysql -u root -p 를 통해 mysql 에 연결한다.
notion image
show databases; // 현재 존재하는 데이터베이스의 목록을 표시한다.
 
database 를 확인한다.
 
notion image
use blogdb; // blogdb 를 사용한다.
 
notion image
 
user테이블의 스키마를 확인할 수 있다.
 
notion image
 
빠져나온다.
 

5. 도커 컴포즈 실행

 
💡
docker-compose.yml 파일은 Docker Compose를 사용하여 멀티 컨테이너 애플리케이션을 정의하는 구성 파일입니다. 이 파일을 통해 여러 Docker 컨테이너를 정의하고, 이들 간의 의존성과 설정을 지정할 수 있습니다.
docker-compose.yml
version: '3' services: db: build: context: ./db ports: - 3306:3306 restart: always server: build: context: ./server ports: - 8080:8080 restart: always depends_on: - db environment: RDS_HOSTNAME: db RDS_PORT: 3306 RDS_USERNAME: ssar RDS_PASSWORD: ssar1234 RDS_DB_NAME: blogdb
 
💡
도커 컴포즈 명령어 docker-compose up : docker-compose.yml 파일에 정의된 모든 서비스를 시작한다. docker-compose down : 실행 중인 모든 서비스를 중지하고 컨테이너, 네트워크, 볼륨을 제거한다. docker-compose build : docker-compose.yml 파일에 정의된 이미지를 빌드한다. docker-compose logs : 실행 중인 모든 서비스의 로그를 출력한다. docker-compose exec 서미스명 커맨드(bash 같은) : 실행 중인 컨테이너에서 명령어를 실행한다.
 
 
notion image
docker-compose up
 
명령어를 통해 docker-compose.yml 을 실행한다.
 
notion image
 
DB 도 정상적으로 작동된다.
 
notion image
 
git clone 된 스프링 서버가 정상적으로 실행된다.
 

6. MySQL 워크벤치 확인

 
notion image
 
워크벤치에서 새로운 커넥트를 생성한다. 포트 번호는 컨테이너를 실행 시 적용한 3308 포트를 넣는다. 비밀번호는 ROOT 비밀번호를 넣었다.
notion image
 
 
notion image
 
mysql 에서도 정상적으로 테이블을 확인할 수 있다.
Share article

{CODE-RYU};