클라우드/Docker

[Docker-Compose] 여러 Docker 컨테이너를 한꺼번에 관리하기

D269 2023. 6. 29. 13:39
728x90

 

 

 

docker-compose 설정

이제 docker-compose로 만들어진 컨테이너들을 하나로 묶어서 실행해보자.

PostgreSQL은 이미 만들어진 이미지를 그대로 사용할 것이기 때문에 별도의 dockerfile은 필요없다.

 

프로젝트 폴더에 docker-compose.yml 파일을 생성한다.

version: "3"	# docker-compose 버전
services:	# 서비스 목록
  frontend:	# 서비스 이름
    build:	# 이미지 Build 옵션
      context: ./frontend	# Build될 프로젝트가 위치한 경로
      dockerfile: dockerfile	# 프로젝트 폴더의 dockerfile 이름

    container_name: frontend	# 컨테이너 이름

    ports:	# host와 공유할 포트 목록
      - 3000:3000	# host:container

    depends_on:	# 아래의 서비스들이 모두 시작된 이후에 이 서비스를 시작
      - backend	# backend 서비스가 시작될 때 까지 기다림

  backend:
    build:
      context: ./backend
      dockerfile: dockerfile

    container_name: backend
    ports:
      - 80:8080
    environment:	# 환경변수 설정
      - SPRING_DATASOURCE_URL=jdbc:postgresql://database:5432/postgres
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=postgres

    depends_on:
      - database	# database 서비스가 시작될 때 까지 기다림

  database:
    image: postgres:latest	# postgres 이미지 사용
    environment:	# 환경변수 설정
      - POSTGRES_USERNAME=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:	# host와 container가 공유할 디렉터리 지정
      - ./postgres:/var/lib/postgresql/data:rw	# host의 postgres 폴더를 컨테이너의 /var/lib/postgresql/data와 공유하고, 읽기/쓰기가 가능하도록 설정

 

이제 아래의 명령어를 실행하면 docker-compose.yml 파일의 내용을 읽어들여 설정한 대로 컨테이너들을 실행시켜준다.

docker-compose up

 

실행하면 자동으로 이미지가 빌드되고 컨테이너가 실행된다.

 

아래와 같이 DB 때문에 실행되지 않았던 backend도 정상적으로 실행되는 것을 볼 수 있다.

backend                         | 2022-10-04 02:54:44.502  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
backend                         | 2022-10-04 02:54:44.543  INFO 1 --- [           main] com.example.backend.BackendApplication   : Started BackendApplication in 10.311 seconds (JVM running for 12.19)
frontend                        | Compiled successfully!
frontend                        | 
frontend                        | You can now view frontend in the browser.
frontend                        | 
frontend                        |   Local:            http://localhost:3000
frontend                        |   On Your Network:  http://172.18.0.4:3000
frontend                        | 
frontend                        | Note that the development build is not optimized.
frontend                        | To create a production build, use npm run build.
frontend                        | 
frontend                        | webpack compiled successfully
frontend                        | Compiling...
frontend                        | Compiled successfully!
frontend                        | webpack compiled successfully
backend                         | 2022-10-04 04:06:25.344  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
backend                         | 2022-10-04 04:06:25.355  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
backend                         | 2022-10-04 04:06:25.359  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms

컨테이너 동작 확인

Docker Desktop에서 컨테이너가 잘 뜨는지 확인해보자.

 

localhost에 접속하여 Backend 서버가 잘 실행됐는지 확인해보자.

 

http://localhost:3000에 접속하여 Frontend 서버가 잘 실행됐는지 확인해보자.

 

 

 

 

 

 

 

 

 

 

출처 : https://devjaewoo.tistory.com/149

728x90
반응형