1. docker network
- 정의
- Docker 컨테이너 간의 통신을 관리하고 격리하기 위한 기능
- 필요성
- 아래 예시와 같이, 다수의 컨테이너로 구성된 웹서비스 실행하면 서로 네트워크 연결이 되지 않아 서비스가 실행되지 않음
- docker network 기능을 사용하면, 이를 해결할 수 있음
2. 실습 예시 - voting application
- https://github.com/dockersamples/example-voting-app
- Docker에서 제공해주는 예시 프로그램
- 총 5개의 컨테이너로 구성되어 있으며, 고양이와 개 중 하나를 골라 투표를 하면 결과를 보여주는 앱
- 매뉴얼하게 하나씩 빌드해보기 - 이 경우, 각 컴포넌트간의 네트워크 연결이 안됨!
- 이미지 빌드
- docker build -t vote ./vote
- docker build -t result ./result
- docker build -t worker ./worker
- docker images # 확인
- 이미지 실행
- docker run -d --name=redis redis
- docker run -d -e POSTGRES_PASSWORD=pawword --name=db postgres
- docker run -d --name=vote -p 5001:80 vote
- docker run -d --name=result -p 5002:80 result
- docker run -d --name=worker worker
- 네트워크 관련 이슈 확인
- vote로 로그인해, iputils-ping 설치 후 ping 명령으로 redis 호스트 이름이 연결되는지 확인
- $ ping redis
- ping: cannot resolve redis: Unknown host
- vote로 로그인해, iputils-ping 설치 후 ping 명령으로 redis 호스트 이름이 연결되는지 확인
- 이미지 빌드
- network 기능 사용 - 네트워크 이슈를 해결
- network를 하나 만들고, 모든 컨테이너들을 이 네트워크 안으로 지정 (*연결 상황에 따라 별개의 네트워크를 만들어 사용할 수도 있음)
- docker network create
- docker network create mynetwork
- docker run -d --name=redis --network mynetwork redis
- docker run -d --name=db -e POSTGRES_PASSWORD=password --network mynetwork postgres
- docker run -d --name=vote -p 5001:80 --network mynetwork vote
- docker run -d --name=result -p 5002:80 --network mynetwork result
- docker run -d --name=worker --network mynetwork worker
- 네트워크 관련 이슈 확인
- vote로 로그인해, iputils-ping 설치 후 ping 명령으로 redis 호스트 이름이 연결되는지 확인
- $ ping redis
- PING redis ... (성공)
- vote로 로그인해, iputils-ping 설치 후 ping 명령으로 redis 호스트 이름이 연결되는지 확인
[출처] 데이터 엔지니어링 데브코스
'data engineering > docker' 카테고리의 다른 글
[Docker] Clean up (0) | 2024.05.30 |
---|---|
[Docker] Volume (0) | 2024.05.29 |
[Docker] 명령어 사전 (0) | 2024.05.29 |
[Docker] Docker & Github (0) | 2024.05.29 |
[Docker] Port forwarding(=Port mapping) (0) | 2024.05.29 |