728x90
Docker 격리 정의 시 : 단일 / 다중 이미지 정의
하나의 OS 위 다양한 컨테이너를 조합하여 어플리케이션 구동 가능
- 어플리케이션 = 컨테이너 조합 (컨테이너는 격리된 공간에서 프로세스가 동작하는 기술)
- 단일 컨테이너 어플리케이션 관리: Dockerfile 통한 단일 이미지 구성 및 구동
- 다중 컨테이너 어플리케이션 관리: Docker-Compose 통한 다수 이미지 구성 및 구동
Docker Compose 내 다중 컨테이너 사이에서의 network
도커 안에서 컨테이너끼리 network 통신하기 위해 (1) User-defined Bridge, (2) Hostname 2가지가 있음.
docker-compose.yml 파일 내 `ports:` 옵션만 준 경우 Spring 에서 MySQL 사용시 어떤 포트 사용?
도커에서 기본으로 제공되는 Docker Bridge Network 사용 시 Automatic DNS Resolution 미제공
아래 옵션을 통해 Bridge 에 대한 추가 설정을 해주면 해결이 된다.
1. User-defined Bridge 방법
도커가 자동 제공해주는 Automatic DNS Resolution 사용
- 가장 먼저 Bridge 네트워크를 정의하고 (User-defined)
- x-network가 도커 내에서 사용하는 user-defined network
networks:
x-network:
driver: bridge
- 그 다음에 해당 브릿지 네트워크를 공유하여 사용하고자하는 컨테이너에 연결한다.
- 도커 내에 생성된 user-defined netword에서 포트를 사용하겠다
version: "3"
services:
postgres:
container_name: postgres_host
image: postgres:15
ports:
- 5432:5432
networks:
- x-network
environment:
POSTGRES_DB: tutorial
POSTGRES_USER: "user"
POSTGRES_PASSWORD: "!@#"
docker_tutorial:
build: .
ports:
- 8080:8080
networks:
- x-network
environment:
# export SPRING_PROFILE=develop
# SPRING_PROFILE: ${SPRING_PROFILE}
SPRING_PROFILE: ${SPRING_PROFILE}
depends_on:
- postgres
2. Hostname 방법
명시적으로 DNS 내 컨테이너의 hostname 등록하기
- 1번 방법보다 훨씬 단순한데, 그냥 각 컨테이너마다 hostname 정의하면 DNS 설정이 된다.
version: "3"
services:
postgres:
container_name: postgres_host
hostname: postgres_host #각 컨테이너마다 hostname 정의
image: postgres:15
ports:
- 5432:5432
environment:
POSTGRES_DB: tutorial
POSTGRES_USER: "user"
POSTGRES_PASSWORD: "!@#"
docker_tutorial:
build: .
ports:
- 8080:8080
environment:
# export SPRING_PROFILE=develop
# SPRING_PROFILE: ${SPRING_PROFILE}
SPRING_PROFILE: ${SPRING_PROFILE}
depends_on:
- postgres
728x90
'ASAC 웹 풀스택 > DevOps' 카테고리의 다른 글
[Github Action] Github Action 동작 원리 및 워크플로 파일 이해하기 (0) | 2024.10.29 |
---|---|
[Docker] best practices (1) | 2024.10.24 |
[Docker] Docker Workflow (1) | 2024.10.19 |
[Docker] Github Action으로 CI/CD - CD (1) | 2024.10.17 |
[Docker] Docker 사용하는 이유 (0) | 2024.10.16 |