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

Django-MySQL-Labs 프로젝트로 보는 서비스 이름과 컨테이너 이름

by easyfly 2025. 8. 28.
반응형

 

Django-MySQL-Labs 프로젝트로 보는 서비스 이름과 컨테이너 이름

도커를 공부하다 보면 "서비스 이름"과 "컨테이너 이름"을 헷갈리기 쉽습니다. 특히 Docker Compose를 사용할 때 두 개념을 정확히 구분하지 못하면 명령어 입력에서 자주 오류가 발생합니다. 이번 글에서는 제가 실습한 django-mysql-labs 프로젝트를 예시로 들어 두 이름의 관계를 정리하겠습니다.


1. docker-compose.yml 안의 서비스 정의

제가 사용한 django-mysql-labs 프로젝트의 docker-compose.yml 파일은 대략 다음과 같은 구조를 가지고 있습니다.

version: "3"

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

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

  nginx:                  # 서비스 이름 ③
    image: nginx:latest
    ports:
      - "80:80"

여기서 서비스 이름은 web, db, nginx 입니다.


2. 실제 실행된 컨테이너 이름

위 설정을 기준으로 docker compose up -d 로 실행하면, 컨테이너들이 다음처럼 생성됩니다.

$ docker ps
CONTAINER ID   IMAGE               STATUS   PORTS                  NAMES
c33cfb669e0    mysql:8             Up       3306/tcp               lab_db
91bf4ecf7bf0   django-mysql-labs   Up       0.0.0.0:8000->8000/tcp lab_web
7f2cd3aa9bc4   nginx:latest        Up       0.0.0.0:80->80/tcp     lab_nginx
  • lab_web → 서비스 이름 web 에서 만들어진 컨테이너
  • lab_db → 서비스 이름 db 에서 만들어진 컨테이너
  • lab_nginx → 서비스 이름 nginx 에서 만들어진 컨테이너

여기서 앞의 lab_ 접두어는 프로젝트 디렉터리(django-mysql-labs)에서 따온 것입니다. Docker Compose는 기본적으로 <프로젝트명>_<서비스명> 형식으로 컨테이너 이름을 생성합니다.


3. 명령어 사용 차이

(1) 서비스 이름을 쓰는 경우

docker compose 계열 명령은 서비스 이름을 사용합니다.

docker compose exec web bash          # web 서비스 컨테이너 내부 접속
docker compose logs db                # db 서비스 로그 확인
docker compose restart nginx          # nginx 서비스 재시작

여기서는 lab_web, lab_db, lab_nginx 같은 컨테이너 이름을 쓰면 안 됩니다.


(2) 컨테이너 이름을 쓰는 경우

도커 기본 명령은 컨테이너 이름을 사용합니다.

docker exec -it lab_web bash          # web 컨테이너에 접속
docker stop lab_nginx                 # nginx 컨테이너 중지
docker rm lab_db                      # db 컨테이너 삭제

즉, docker exec, docker stop, docker rm 같은 기본 도커 명령어에서는 컨테이너 이름을 직접 지정해야 합니다.


4. 한눈에 보는 비교

구분 예시 이름 언제 사용
서비스 이름 web, db, nginx docker compose exec, docker compose logs, docker compose up
컨테이너 이름 lab_web, lab_db, lab_nginx docker exec, docker stop, docker ps

5. 결론

  • 서비스 이름은 docker-compose.yml 안에서 정의되는 논리적 이름
  • 컨테이너 이름은 실제 실행된 컨테이너의 물리적 이름
  • docker compose 계열 명령은 서비스 이름을, docker 기본 명령은 컨테이너 이름을 사용

👉 이번 실습(django-mysql-labs)을 통해 알 수 있듯이, 서비스 이름은 web인데 실행된 컨테이너 이름은 lab_web이 될 수 있습니다. 이 차이를 이해하면 Compose 환경에서 훨씬 헷갈리지 않고 도커를 다룰 수 있습니다.

컨테이너와 서비스

반응형

댓글