[프로젝트 관리 심화] Docker / Docker Compose

왕감자·2025년 3월 4일

2025 내일배움캠프

목록 보기
36/39

Docker

  • volume : containter의 폴더와 pc의 폴더를 바인딩

  • 호스트 포트 - 컨테이너 포트 매핑


  • 컨테이너 내부 접속 명령어
    docker exec -it 컨테이너아이디 /bin/bash

  • Docker Network 명령어
    • 네트워크 생성 : docker network create mynetwork
    • 네트워크 목록 : docker network ls
    • 네트워크 삭제 : docker nework rm mynetwork

  • Docker Volume 명령어
    • 볼륨 생성 : docker volume create myvolme
    • 볼륨 목록 : docker volume ls
    • 볼륨 삭제 : docker volume rm myvolume

볼륨 실습

  1. 바인딩 할 호스트 디렉터리 생성
# /User/username/Dev/database 폴더 생성
mkdir -p ~/Dev/database 
cd ~/Dev/database
  1. 컨테이너 실행 (마지막에 이미지명 쓰면 이미지 pull 안 해도 됨)
docker run -d --name postgres-sample \
-p 5433:5432 \ # 호스트5433 + 컨테이너5432
-e POSTGRES_USER=admin1 \
-e POSTGRES_PASSWORD=admin2 \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /Users/t2024-m0206/Dev/database/sample1:/var/lib/postgresql/data:z \
postgres
# Users/t2024-m0206/Dev/database/sample1 - 로컬 바인딩 폴더
# sample1 생성

🤔 똑같은 컨테이너 이름으로 컨테이너를 실행 한다면?

Conflict. The container name "/postgres-sample" is already in use by container~
포트 할당 안 된 상태로 이름에 1 붙여서 일단 만들어짐


  1. 호스트 디렉토리 확인
ls -al
cd sample1
ls # pgdata
cd pgdata/
ls


  1. 컨테이너 내부 접속해서 똑같은 파일 있는지 확인
docker exec -it 95e /bin/bash
ls
cd /var/lib/postgresql/data/pgdata
ls

같은 파일~!



도커 컨테이너가 같은 네트워크에 있으면 도커 컨테이너의 이름으로 호출할 수 있음
ex) service-a에서 service-b 호출

#service-a application.properties
service.b.url=http://service-b:8080

실습

service-a 에서 service-b 호출

PORT

  • service-a 18080:8080
  • service-b 18081:8080

Docker 사용

# 1. 네트워크 생성
docker network create my-network

# 2. 프로젝트 빌드 (Gradle 빌드 도구를 사용하여 프로젝트 정리 후, JAR 파일 생성)
./gradlew clean bootJar

# 3. 이미지 생성 (각 디렉토리에서)
docker build -t img-service-a .
docker build -t img-service-b .

# 4. 컨테이너 생성
docker run -d --name service-a \
 --network my-network \
 -p 18080:8080 \
 img-service-a

docker run -d --name service-b \
 --network my-network \
 -p 18081:8080 \
 img-service-b

http://localhost:18080/hi
접속해서 service-a가 service-b를 호출하는지 확인


Docker Compose 사용

# 1. 기존 컨테이너 모두 중지 후 삭제
docker stop 컨테이너아이디
docker rm 컨테이너아이디

# 중지를 안하고 바로 삭제 - 위험
docker rm -f 컨테이너아이디

# 2. docker-compose.yml파일 생성
vi docker-compose.yml

# 3. Docker Compose 실행
docker compose up -d

http://localhost:18080/hi
접속해서 service-a가 service-b를 호출하는지 확인

💡 Docker Compose를 사용하여 서비스를 실행하면, Docker Compose는 기본적으로 새 브릿지네트워크를 생성함
   네트워크 이름: directoryname_default

0개의 댓글