DockerCompose란?

개미개미개·2025년 1월 14일

DevOps

목록 보기
5/7
post-thumbnail

DockerCompose란 무엇인가

DockerCompose란 여러개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성하여 하나의 묶음으로 관리할 수 있게 도와주는 툴이다.

DockerCompose를 사용하는 이유

  1. 여러개의 컨테이너를 관리하는데 용이하다.
    여러개의 컨테이너로 이루어진 복잡한 애플리케이션을 한번에 관리할 수 있게 해준다.
    여러 컨테이너들을 하나의 환경에서 실행하고 관리하는 데 도움이 된다.

  2. 복잡한 명령어로 실행시키던걸 간소화 시킬 수 있다.
    이전에 MySQL 이미지를 컨테이너로 실행시킬 때는 아래와 같은 명령어로 실행시켰다.

$ docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /Users/lee/Desktop/Study/Develop/docker-mysql/mysql_data:/var/lib/mysql mysql

DockerCompose를 사용하면 위와 같이 컨테이너를 실행시킬때마다 이렇게 안하고
단순히 docker compose up 명령어로 실행시킬 수 있다.


DockerCompse CLI 명령어

docker compose up -d : compose.yml 파일을 기반으로 백그라운드에서 실행

docker compose ps : compose.yml로 정의된 컨테이너 중 실행 중인 컨테이너만 보여줌

docker compose ps -a : compose.yml로 정의된 컨테이너를 전부 보여줌

docker compose logs : compose.yml로 정의된 컨테이너들의 로그들을 보여줌

docker compose up --build : 이미지를 다시 빌드해서 컨테이너를 실행시켜야 할 때 사용

docker compose pull : compose.yml에서 정의된 image를 다운받거나 업데이트 할 경우 사용


DockerCompose로 Nginx 실행시켜보기

그냥 docker 명령어로 실행을 시킨다면 아래처럼 실행을 시킬것이다.

$ docker run --name webserver -d -p 80:80 nginx

이거를 DockerCompose로 띄우기 위해서는 compose.yml 파일이 필요한데 작성법은 아래와 같다.

services:
  my-web-server:
    container_name: web-server
    image: nginx
    ports:
      - 80:80

위의 yml 파일을 설명해보겠다.

  • Services
    DockerCompose에서는 하나의 컨테이너를 Service 라고 부른다.
    그래서 아래 적힐 여러 Service 들을 적기 전에 써주는 명령어다.
  • my-web-server
    my-web-server라고 적힌 부분은 Service에 대한 이름을 지어주는거고 원하는 이름을 적으면 된다.
  • container_name
    위와 마찬가지로 아래 적힐 이미지들을 기반으로 컨테이너를 만들 때 이름을 web-server라고 짓겠다 는 의미이다.

그 후 아래의 imageport는 생각하는대로 어떤 베이스 이미지를 사용할거고 어떤 포트로 매핑할건지를 뜻한다.

이렇게 생성된 compose.yml 이 있는 디렉토리에서 docker compose up 을 하면 아래 그림과 같이 실행된다.

만약 백그라운드로 실행시키고 싶다면 docker compose up -d 라고 입력하면 된다.

DockerCompose로 실행된 이미지들을 내리고 싶다면 docker compose down을 하면 된다.


DockerCompose로 MySQL 실행시켜보기

이번엔 MySQL을 실행시켜본다고 하자. 기존에 우리는 아래와 같이 실행시켰다.

$ docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /Users/lee/Desktop/Study/Develop/docker-mysql/mysql_data:/var/lib/mysql mysql

이 긴 명령어를 compose.yml로 바꾸면 다음과 같다.

services:
	my-db:
    	image: mysql
        environment:
        	MYSQL_ROOT_PASSWORD: 1234
        volumes:
        	- ./mysql_data:/var/lib/mysql
        ports:
        	- 3306:3306

여기서 바뀐 점은 DockerVolume을 설정할 때 절대 경로가 아닌 상대 경로로 작성하는 것만 잘 기억해두면 될 것 같다.


DockerCompose로 Spring Boot 실행시켜보기

이번엔 Spring Boot 이다. 아래와 같이 yml 파일을 작성하면 된다.

services:
	my-server:
    	build: .
        ports:
        	- 8080:8080

여기서 build. 은 현재 경로의 Dockerfile로 생성된 이미지를 기반으로 컨테이너를 띄운다는 뜻이다.

profile
개미는 오늘도 일을 합니다.

0개의 댓글