실습)Docker Compose파일을 이용한 웹 애플리케이션 구동하기

이정훈·2024년 9월 2일

Docker

목록 보기
33/34

이전 방법에서는 이미지를 빌드하고 해당 이미지를 통해 두 개의 컨테이너를 실행하고 연결하면서 웹 애플리케이션 실행하였습니다.
지금 당장은 두 개의 컨테이너만 있기 때문에 개별적으로 실행하고 연결하였지만 더 많은 컨테이너가 존재한다면 귀찮을 뿐만 아니라 실수를 해서 다시 컨테이너를 실행하는 일을 반복할 수도 있습니다.
이때는 Docker-compose파일을 만들면 됩니다.
docker-compose파일은 여러 컨테이너를 정의하고 해당 파일을 통해 정의된 모든 컨테이너를 실행하게 해줍니다.

이전과 같이 PostgreSQL과 nodeAPI를 연결할 것입니다.
그전에 docker-compose를 작성하는 것을 도와주는 사이트를 알아봅시다.
composerize에 들어가봅시다.
해당 사이트에 들어가면 아래와 같이 나올 것입니다.

docker run ~~ 명령어를 docker-compose.yml파일에 맞는 명령어 형식으로 바꿔주는 사이트입니다.

이전에 실행했던 PostgreSQL컨테이너 명령어를 넣으면 아래와 같이 뜹니다.

nodeAPI컨테이너를 실행하는 명령어도 넣어봅시다.

이제 이 두개를 합치면 되는데
공통된 것을 하나로 묶고 나머지는 지워주면 아래와 같이 됩니다.

name: docker-compose test
services:
    postgres:
        container_name: postgres-db
        environment:
            - POSTGRES_PASSWORD=test1234@
        volumes:
            - postgres-volume:/var/lib/postgresql/data
        ports:
            - 8001:5432
        image: postgres:15.1-alpine
    my-node-app:
        ports:
            - 3000:3000
        environment:
            - DATABASE_URL=postgres://postgres:test1234%40@postgres-db:5432/postgres
        networks:
            - my-network
        container_name: node-app
        image: my-node-app
volumes:
    postgres-volume:
        external: true
        name: postgres-volume
networks:
    my-network:
        external: true
        name: my-network

여기서 수정이 필요한데
my-node-app은 postgres에 의존적입니다.
왜냐하면 my-node-app은 웹서버인데 데이터베이스를 필요로 하기 때문에 데이터베이스가 먼저 존재해야하며 이 데이터에비스가 postgres이기 때문입니다.
그렇기 때문에 depends-on을 통해 postgres가 완성된 이후 my-node-app이 실행되게 만들어야 합니다.

그리고 연결을 위해서는 두 컨테이너를 같은 네트워크에 넣어야 하기 때문에 postgres를 my-network에 추가해줘야 합니다.

아래와 같이 바뀝니다.

name: docker-compose test
services:
    postgres:
        container_name: postgres
        environment:
            - POSTGRES_PASSWORD=test1234@
        volumes:
            - postgres-volume:/var/lib/postgresql/data
        image: postgres:15.1-alpine
        networks: # 추가
            - my-network
    my-node-app:
        ports:
            - 3000:3000
        environment:
            - DATABASE_URL=postgres://postgres:test1234%40@postgres-db:5432/postgres
        networks:
            - my-network
        container_name: node-app
        image: my-node-app
        depends_on: # 추가
            - postgres
volumes:
    postgres-volume:
        external: true
        name: postgres-volume
networks:
    my-network:
        external: true
        name: my-network

이제 실행해 봅시다.
docker compose up 명령어를 입력하면 됩니다.

docker compose up

주의할 점은 docker compose파일이 있는 디렉터리에서 실행해야 한다는 것입니다.

실행이 완료되었다면 localhost:3000으로 들어가봅시다.

정상적으로 작동합니다.

profile
기록으로 흔적을 남깁니다.

0개의 댓글