Docker - Network

INHEES·2024년 12월 31일

금일은 Docker 의 네트워크와 저장소에 대해 알아보겠습니다.
실습 내용은 이미지로 첨부하겠습니다.


목차

  • Docker Network
  • Multi Container

Docker Network

Docker Container 는 격리 된 환경에서 작동하기 때문에 다른 Container 과는 통신이 불가능하다.

Docker Network 구조

  • veth : 가상 ethnet, 독립적인 ip address
  • lo : docker 루프백 ip

Docker Network 종류
Bridge Network

  • 하나의 host 컴퓨터 내에서 여러 컨테이너들이 서로 통신 가능

Host Network

  • host 컴퓨터와 동일한 네트워크에서 컨테이너를 기동
  • 포트 포워딩 없이 내부 애플리케이션 사용
  • 호스트 pc 와 컨테이너 내부의 ip address 가 동일하다는(같은 네트워크에 존재) 큰 차이점이 존재한다.
  • host 와 container 의 port 충돌에 유의해야한다.

None Network

  • 네트워크를 사용하지 않음, IO 네트워크만 사용하며 외부와 단절
  • 컨테이너와 연결하기 위해 Overlay Network 사용

Overlay Network

  • 여러 호스트에 분산되어 컨테이너 실행 가능
  • Multi Host Network 이며 위의 Network 들은 Sigle Host Network 이다.

Docker Network 명령어

명령어설명
docker network lsDocker Network 목록 보기
docker network inspect <NETWORK_NAME>Docker Network 상세 보기
docker network create <NETWORK_NAME>Docker Network 생성
docker network rm <NETWORK_NAME>Docker Network 삭제
docker network connect <NETWORK_NAME> 실행 중인 Container를 Docker Network에 추가
docker network disconnect <NETWORK_NAME> Docker Network에 추가된 Container를 삭제

Docker Network 지정 가능한 명령어입니다.

docker network create --driver bridge <NETWORK_NAME> 

docker run -it --name my-container --network <NETWORK_NAME> ubuntu:16.04

아래의 그림은 terminal 에서 birdge 네트워크의 정보이며 해당 실행중인 컨테이너도 확인 가능하다.

Docker Network 생성하기

실습 하기에 앞서 해당 container, network 를 삭제할때 아래의 명령어를 사용하면 쉽게 제거가 가능하다(단 실행중인 container, 할당된 container 가 있는 network 는 제외)

docker system prune

Mysql DB Client(Host pc) + Mysql DB Server (Docker)

아래의 명령어를 실행후 Mysql Workbench 를 활용하여 MySQL 클라이언트에서 MariaDB 컨테이너에 접근해 보겠습니다.

docker run -d -p 13306:3306 -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true --name mariadb1 mariadb:latest

다음은 톰캣 서버에서 호스트 pc 에 설치되어있는 톰캣 애플리케이션에서 mariaDB 를 실행해보겠습니다.

  • host pc 에 tomcat 서버를 구동하기 위해서는 jdk 가 필요합니다.

  • springboot framwork 로 작성된 backend 애플리케이션의 jar 파일을 구동 시켜보겠습니다.

  • backend 애플리케이션의 포트번호는 8088 이며 application.yml 에 datasource 정보를 입력해주어야 한다.

실행 명령어

docker network create --driver bridge my-network

docker run -d -p 13306:3306 --network my-network \
      -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true \
      -e MARIADB_DATABASE=mydb \
      --name my-mariadb edowon0623/my-mariadb:1.0

java -jar catalog-service-mariadb-1.0.jar

실행 결과
workbench 에서 mydb 데이터 베이스의 catalog 테이블이 생성된것을 볼 수 있다.

Multi Container

해당 실습은 웹 3계층 시스템 아키텍처로 구성해보겠습니다.
front server + backend server + database

2개의 컨테이너 (web, db) 에 독립적인 docker network 할당하여 구성해보겠습니다.

아래의 명령어는 앞서 생성한 my-network 와 --name 옵션을 사용하여 hostname 을 지정해주며 컨테이너의 이름을 가지고 접속을 시도하도록 하여 동적으로 ip 가 바뀌어도 찾을 수 있도록 지정해준다.

host pc 에서 컨테이너에 접근할때는 3306으로 접근해준다.

springboot 애플리케이션 이미지를 가져와서 실행해준다.

 docker run -d -p 8088:8088 --network my-network \
       -e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb" \
       --name catalog-service edowon0623/catalog-service:mariadb-demo

해당 명령어로 container 를 확인 가능합니다.

  docker network inspect my-network 

참고자료
https://www.inflearn.com/course/devops-docker-%EA%B0%80%EC%83%81%ED%99%94-%EA%B8%B0%EC%88%A0/dashboard

profile
이유를 찾아보자

0개의 댓글