Chapter04: Network

hahic·2022년 6월 7일
0

Docker

목록 보기
4/7
post-thumbnail

Goal

  • Network 종류
  • Network로 여러 Container 연결하는 방법

Network Type

  • WWW 통신
    : HTTP 요청을 다른 웹사이트나 웹 API로 전송하는 방법
  • Container에서 로컬 호스트 머신으로 통신
  • Container간 통신

📙 WWW 통신

  • 특별한 설정이나 코드 변경이 필요하지 않음

📙 Container에서 로컬 호스트 머신으로 통신

[ 잘못된 케이스 ]

mongoose.connect(
  'mongodb://localhost:27017/swfavorites',
  { useNewUrlParser: true },
  (err) => {
    if (err) {
      console.log(err);
    } else {
      app.listen(3000);
    }
  }
);

[ 올바른 케이스 ]

mongoose.connect(
  'mongodb://host.docker.internal:27017/swfavorites',
  { useNewUrlParser: true },
  (err) => {
    if (err) {
      console.log(err);
    } else {
      app.listen(3000);
    }
  }
);

📙 Container간 통신

  • Docker Network 기능을 사용하지 않는 경우

    1. Container mongodb 생성
      docker run -d --name mongodb mongo
    2. 코드 변경
      mongoose.connect(
        'mongodb://172.17.0.2:27017/swfavorites',
        { useNewUrlParser: true },
        (err) => {
          if (err) {
            console.log(err);
          } else {
            app.listen(3000);
          }
        }
      );
    3. Image App 빌드 & 실행
      docker build -t favorites-node .
      docker run --name favorites -d --rm -p 4000:3000 favorites-node
  • Docker Network 기능을 사용하는 경우
    Volume과 달리, Network는 자동으로 생성되지 않음

    해당 기능 덕분에,
    다중 Container은 동일한 네트워크에 존재 가능하게 됨

    1. Network 생성
      docker network create favorites-net
    2. 생성한 Network와 연결된 Container mongodb 생성
      docker run -d --name mongodb --network favorites-net mongo
    3. 코드 변경
      mongoose.connect(
        'mongodb://mongodb:27017/swfavorites',
        { useNewUrlParser: true },
        (err) => {
          if (err) {
            console.log(err);
          } else {
            app.listen(3000);
          }
        }
      );
    4. Image App 빌드 & 실행
      docker build -t favorites-node .
      docker run --name favorites -d --rm -p 4000:3000 --network favorites-net favorites-node

기타

💭 docker run -p 옵션

  • Container 간의 연결이 있다면 port를 게시할 필요가 없음
    • Container Network 내부에서 모든 Container가 서로 자유롭게 통신 가능
    • Container Network 내부에서 Container Name으로 통신
  • port 노출은 로컬 호스트 머신이나 Container 외부에서 Container에 연결하려는 경우에만 필요

Docker 명령어

  • docker container prune
  • docker network create [network name]
profile
👩‍💻 Junior Backend Developer

0개의 댓글