1. 사용자 정의 네트워크를 사용하는 방법
설명:
- Docker에서 사용자 정의 네트워크를 생성하여 여러 컨테이너를 동일한 네트워크에 배치하는 방법입니다. 이를 통해 컨테이너 간의 통신을 쉽게 설정할 수 있다.
- 이 방법은 특히 여러 컨테이너가 서로 상호작용해야 하는 환경에서 유용하다.
단계:
1. 사용자 정의 네트워크 생성:
sudo docker network create my_network
2. MySQL 컨테이너 실행:
sudo docker run -d --network my_network --name mysql_container -e MYSQL_ROOT_PASSWORD=root mysql:latest
3. 애플리케이션 컨테이너 실행:
sudo docker run -d --network my_network -p 5002:5002 app
4. 애플리케이션의 데이터베이스 연결 설정:
db_config = { 'host': 'mysql_container',
'user': 'root',
'password':'root',
'database': 'your_database' }
장점:
- 컨테이너 간의 이름 기반 통신이 가능하여 설정이 간단하고, 네트워크 격리를 통해 보안이 강화된다.
단점:
- Docker 네트워크에 대한 이해가 필요합니다.
2. 호스트의 IP 주소를 사용하는 방법
설명:
- MySQL 서버가 호스트 시스템에서 실행 중일 때, 애플리케이션이 호스트의 IP 주소를 사용하여 MySQL 서버와 연결하는 방법이다.
단계:
1.호스트의 IP 주소 확인:
hostname -I
2. 애플리케이션의 데이터베이스 연결 설정:
db_config = { 'host': '<호스트_IP>',
'user': 'root',
'password': 'root',
'database': 'your_database' }
장점:
- Docker와 Docker 외부의 서비스 간 연결이 간단하다.
단점:
- 호스트 IP 주소가 변경되면 설정을 다시 해야 한다.
3. Docker Compose 사용
설명:
- Docker Compose를 사용하여 여러 컨테이너를 정의하고 관리하는 방법입니다. docker-compose.yml 파일을 통해 서비스 설정을 코드로 정의할 수 있다.
단계:
1. docker-compose.yml 파일 작성:
version: '3'
services:
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- my_network
app:
image: app
ports:
- "5002:5002"
networks:
- my_network
depends_on:
- db
networks:
my_network:
2.Docker Compose로 컨테이너 실행:
sudo docker-compose up -d
3.애플리케이션에서 MySQL에 연결할 때 db를 호스트 이름으로 사용:
db_config = { 'host': 'db',
'user': 'root',
'password': 'root',
'database': 'your_database' }
장점:
- 모든 서비스 설정을 한 파일로 관리할 수 있어 일관성이 높다.
- 서비스 간 의존성을 명확히 할 수 있으며, 스케일링과 서비스 관리가 용이하다.
단점:
- Docker Compose에 대한 기본적인 이해가 필요하다.
처음 Docker를 사용할 때 '호스트 IP를 사용하는 방식'으로 사용했는데 계속 오류가 떠서 해결방법을 찾다가 Docker 네트워킹 방식이 여러 가지 있다는 것을 알게 되었다. 그중에 docker-compose 방식을 많이 사용한다고 하여, docker-compose 방식을 사용하여 오류를 조금씩 수정하여 프로젝트를 진행하였다.
'Infra > Docker' 카테고리의 다른 글
[Docker] 도커 한글 깨짐(sql) (0) | 2024.09.02 |
---|