본문 바로가기
컴퓨터 활용/노년에 즐기는 코딩

Docker Compose에서 서비스 이름과 컨테이너 이름의 차이

by easyfly 2025. 8. 27.
반응형

Docker Compose에서 서비스 이름과 컨테이너 이름의 차이 이해하기

도커(Docker)를 활용하다 보면 비슷하게 보이지만 다른 개념 때문에 혼란이 생길 때가 있습니다. 바로 서비스 이름(service name)컨테이너 이름(container name) 입니다. 이 둘은 실제 사용 환경에서 명령어 입력 방식에도 차이를 만들기 때문에 정확히 구분해 두는 것이 중요합니다.


1. 서비스 이름(Service Name)이란?

서비스 이름은 docker-compose.yml 파일의 services: 블록에서 정의된 이름을 말합니다. 예를 들어 다음과 같은 docker-compose.yml이 있다고 합시다.

version: "3"

services:
  web:                  # ← 서비스 이름
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db

  db:                   # ← 서비스 이름
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: example

여기서 webdb 가 서비스 이름입니다.

서비스 이름은 docker compose exec, docker compose logs, docker compose up 같은 명령어에서 식별자로 사용됩니다.

docker compose exec web bash        # web 서비스 컨테이너에 접속
docker compose logs db              # db 서비스 로그 확인

즉, 서비스 이름은 Compose 환경에서의 논리적 이름이라고 이해하면 됩니다.


2. 컨테이너 이름(Container Name)이란?

컨테이너 이름은 실제로 실행된 컨테이너에 붙여진 고유 이름을 말합니다.
docker ps 명령으로 실행 중인 컨테이너를 보면 확인할 수 있습니다.

$ docker ps
CONTAINER ID   IMAGE              COMMAND                  STATUS   PORTS                    NAMES
91bf4ecf7bf0   simadang-docker-web "python manage.py run…" Up      0.0.0.0:8000->8000/tcp   simadang_web
c33cfb669e0    mysql:8            "docker-entrypoint.s…"  Up      3306/tcp                 lab_db

위 예시에서 보이는 simadang_web, lab_db 등이 컨테이너 이름입니다.

이 이름은 보통 <프로젝트명>_<서비스명>_<번호> 형식으로 자동 생성됩니다.

  • simadang_web → 프로젝트명: simadang, 서비스명: web
  • lab_db → 프로젝트명: lab, 서비스명: db

컨테이너 이름은 docker exec 같은 도커 기본 명령어를 사용할 때 필요합니다.

docker exec -it simadang_web bash    # 컨테이너 이름으로 직접 접속

3. 서비스 이름 vs 컨테이너 이름

구분 서비스 이름(Service Name) 컨테이너 이름(Container Name)
정의 위치 docker-compose.yml 의 services: 항목 실제 실행된 컨테이너 인스턴스
쓰임새 docker compose 계열 명령에서 사용 docker 기본 명령에서 사용
예시 web, db simadang_web, lab_db
특징 논리적 이름(설정 기준) 물리적 이름(실행된 결과)

4. 왜 혼동이 생기는가?

  • docker compose exec web bash 와 같이 서비스 이름을 써야 하는데, lab_web 같은 컨테이너 이름을 넣어서 오류가 나는 경우가 있습니다.
  • 반대로 docker exec -it 명령에서는 서비스 이름이 아니라 컨테이너 이름을 넣어야 합니다.

즉, 어떤 명령어를 쓰느냐에 따라 사용해야 하는 이름이 달라진다는 점을 기억해야 합니다.


5. 정리

  • 서비스 이름: docker-compose.yml 안에서 정의되는 이름, Compose 전용 명령(docker compose exec, docker compose logs)에 사용됨.
  • 컨테이너 이름: 실제 실행된 컨테이너의 이름, 도커 기본 명령(docker exec, docker ps)에 사용됨.
  • 둘은 유사하지만 역할이 다르므로 상황에 맞게 구분해야 한다.

👉 결론: docker compose 계열 명령은 서비스 이름을, docker 기본 명령은 컨테이너 이름을 사용합니다.

 

 

반응형

댓글