Docker&Container

Docker&Container - Network 2. 컨테이너간 통신

hminor 2024. 12. 15. 12:30
반응형

컨테이너간 통신

  • 네트워크 생성
    • 터미널
      • docker network create 작명
      • ex) docker network create mynet1
      • 명령어
        • docker network: 모든 명령어 조회
        • docker network ls: 실행 중인 네트워크
    • 터미널에 컨테이너 넣기
      • 실행 중인 컨테이너를 넣는 방법도 있지만
      • 이미지 생성 시 해당 네트워크에 바로 넣는 방법을 배우고자 함 (더 편리)
        • 터미널
          • docker run -d -p 포트 —network 네트워크 —name 작명 실행이미지:태그
          • ex) docker run -d -p 80:80 —network mynet1 —name nginx-container nginx:1 (nginx)
          • ex) docker run -d -p 8080:8080 —network mynet1 —name server-container nodeserver:v1 (server)
      • 입력하게 되면 두 개의 컨테이너가 생성되고
        • 특정 컨테이너 클릭 후 inspect에 들어가서 Networks에 들어가면
          • 연결되어 있는지와 할당된 IP 주소 등 확인 가능
  • 서로 다른 컨테이너 간 통신 확인
    • 현재 nginx의 가상 주소는 172.18.0.2 이고
    • server의 가상 주소는 172.18.0.3 이기에
    • nginx에서 server로 접속 가능한 지 확인해보기 (172.18.0.3로 접속해보기)
      • nginx 컨테이너에서 Exec에서 아래와 같이 코드 작성해보기
      curl 172.18.0.3:8080
      
      • 숫자로 접속하기 번거롭고 어렵다면 —name으로 작성한 것으로 접속 가능
        • DNS 기능이 내부적으로 작동되고 있기에 가능
      curl server-container:8080
      
      • 그리고 좀 더 정확하게 입력을 하고자면, network 이름도 함께 작성하기
      curl server-container.mynet:8080
      
  • 다만
    • 여전히 nginx 서버(컨테이너1,80)로 접속 하더라도, server(컨테이너2,8080)으로 전달이 안됨
    • 이유는 myconfig1.conf에 그냥 localhost:8080으로 이동하라고만 입력했기에
    • 그래서 웹서버컨테이너IP:8080으로 보내라고 코드 수정하기
      • 또는 DNS으로 —name으로 작성한 컨테이너 이름으로 하기
      • config를 수정 후 터미널에서 다시 아래 명령어를 입력하여 다시 빌드하기
      docker build -t nginx:1 ./nginx
      
      • 코드 해석(잊어버려서)
        • ./nginx 폴더에 있는 dockerfile을 빌드
        • -t는 태그를 옵션으로 작성할 것이다는 의미
        • 그래서 nginx이름으로 태그를 1로 설정하여 빌드
    • 여기서 중요한 것은 컨테이너를 실행할 때(run)
      • 웹 서버가 실행된 이후 서버를 실행하기
      • 또한 기존 실행 코드는 다음과 같이 수정할 수 있음
        • 왜냐하면 이젠 nginx를 실행하면 웹서버로 이동하도록 설정했기 때문.
        // 기존
        docker run -d -p 8080:8080 --network mynet1 --name server-container n
        odeserver:v1
        
        docker run -d -p 80:80 --network mynet1 --name nginx-container nginx:
        1
        
        // 변경
        docker run -d --network mynet1 --name server-container nodeserver:v1
        
        docker run -d -p 80:80 --network mynet1 --name nginx-container nginx:1
        
  • 그리고
    • 네트워크를 생성하게 되면 모드가 bridge가 기본적으로 설정되어짐
    • 이를 host 모드로 변경하면, 나의 실제 컴퓨터 자원을 사용할 수 있음
      • 다만 일반적으로 굳이 이렇게까지 변경할 필요는 없다고 함.
      • 그리고 변경하게 되면 보안적으로 더욱 유의해야함.