학교 공부/클라우드컴퓨팅

[클라우드컴퓨팅] 3-2. 가상화 네트워크

KimNang 2024. 11. 25. 23:58

1. 네트워크 개요

네트워크

- 네트워크는 컴퓨터끼리 대화하도록 연결하는 통로

- Docker에서는 네트워크를 사용해 컨테이너 간 데이터를 주고받도록 설정 가능

2. Docker 네트워크 종류

Bridge 네트워크 : 기본 연결 다리

- Docker에서 자동으로 제공하는 기본 네트워크

- 컨테이너끼리는 쉽게 연결되지만, 외부 세계와는 직접 연결되지 않음

- 사용 예 : 개발 환경에서 서로 데이터를 주고받는 컨테이너를 테스트할 때 유용

Host 네트워크 : 직접 연결

- 컨테이너가 컴퓨터(호스트)의 네트워크를 그대로 사용

- 네트워크 설정 단순하고 속도가 빠름, 보안 면에서 제한적일 수 있음

- 사용 예 : 성능이 중요한 웹 서버를 실행할 때 적합

Custom 네트워크 : 내가 만드는 다리

- 사용자가 직접 docker network create 명령어를 통해 원하는 네트워크를 만듦

- 컨테이너끼리의 연결 방식과 외부와의 연결 방식을 세부적으로 설정할 수 있음

- 사용 예 : 여러 컨테이너로 구성된 웹 애플리케이션에서, 데이터베이스와 웹 서버가 특정한 방식으로만 통신하고 싶을때

 

3. Docker 컨테이너 네트워크 실습

  1. Container1 생성
    - 첫 번째 컨테이너를 생성하여 네트워크 실습을 시작함
  2. Container2 생성
    - 두 번째 컨테이너를 생성하여 통신할 준비를 함
  3. 메시지 전송
    - Container1에서 Container2로 메시지 전송
  4. 메시지 수신
    - Container2가 전송된 메시지를 성공적으로 수신함
  5. 컨테이너 삭제
    - 실습이 완료된 후 모든 컨테이너를 삭제함
  6. 네트워크 삭제
    - 마지막으로 생성했던 네트워크를 삭제함
Docker 실행

- Docker Desktop 아이콘 더블클릭하여 실행

- 왼쪽 하단의 'Engine running' 메시지를 확인 (기다린 후에도 나오지 않으면 설치 실패)

- 명령 프롬프트 검색 후 '관리자 권한으로 실행' 클릭

container1이라고 이름 붙인 컨테이너 생성

docker run -it --name container1 ubuntu

  • docker run
    - 새로운 컨테이너 만들기
  • -it 옵션
    - 대화형 모드로 진입, 직접 주방에서 작업할 수 있음
  • --name container1
    - 컨테이너의 이름을 container1로 지정
  • ubuntu
    - ubuntu 설계도를 참조해서 컨테이너를 만듦

네트워크 도구 설치

- 네트워크 설치에 필요한 프로그램 설치

apt update && apt install -y iputils-ping iproute2 netcat-openbsd

  • apt update
    - 컨테이너 안의 소프트웨어 목록을 최신 상태로 업데이트함
  • &&
    - 앞의 명령이 성공하면 뒤의 명령을 실행하라는 뜻
  • apt install -y iputils-ping iproute2 netcat-openbsd
    - 네트워크 상태를 확인하는 데 필요한 도구를 설치함
  • -y
    - 설치 과정 중 "설치하겠습니까?"라는 질문을 자동으로 "Yes"로 응답함

Windows로 돌아가 container2 설치

- Windows로 돌아가기 : Ctrl + P -> Ctrl + Q

- 그 후 위의 과정으로 container2를 생성하고, 네트워크 도구를 설치함

네트워크 생성

- windows에서 컨테이너 네트워크를 생성함

docker network create my_network

  • docker network create
    - 사용자 정의 네트워크를 생성
  • my_network
    - 네트워크 이름을 my_network로 설정함

 

네트워크 생성

- container를 새 네트워크에 연결

docker network connect my_network container

  • docker network connect
    - 컨테이너를 특정 네트워크에 연결함
  • my_network
    - 연결할 네트워크 이름
  • container
    - 연결할 컨테이너 이름

container1에서 container2로 메시지 전송

- container1에서 container2로 메시지를 전송

실행 중인 컨테이너 조회 & 컨테이너로 돌아가기
  • 실행 중인 컨테이너 조회
    docker ps

  • Container로 돌아가기
    - Windows에서 현재 실행 중인 컨테이너로 돌아감
    docker attach [container ID]
아이피 확인

- 컨테이너의 IP 확인

ip addr

  • ip addr
    - 컨테이너에 할당된 네트워크 주소(IP 주소)를 보여줌

container1에서 텍스트 파일 생성

- container1에서 testfile.txt 파일이 생성됨

echo "Hello I am container1" > testfile.txt

  • echo
    - 뒤에 적은 텍스트를 화면에 출력하거나 파일에 저장함
  • "Hello I am container1"
    - 저장할 텍스트
  • testfile.txt
    - testfile.txt라는 이름의 파일에 텍스트를 저장함
container1에서 데이터 전송

- container1에서 container2로 testfile.txt의 내용 전송

nc -l -p 1234 < testfile.txt

  • nc
    - Netcat 명령어로 데이터를 주고받을 수 있음
  • -l
    - 데이터를 전송
  • -p 1234
    - 1234번 포트를 사용하겠다는 뜻 (번호 임의로 정하기)
  • < testfile.txt
    - testfile.txt 파일의 내용을 전송하겠다는 뜻 
container2에서 데이터 수신받기

- 새로운 명령프롬프트를 관리자 권한으로 실행하여 container2에 접속한다

docker attach [컨테이너2 ID]

 

nc [container의 IP] 1234 < receivedfile.txt

  • nc
    - Netcat 명령어로 데이터를 수신함
  • [container의 IP]
    - 컨테이너의 IP 주소를 입력함
  • 1234
    - container1에서 사용한 포트 번호를 동일하게 입력
  • > receivedfile.txt
    - 받은 데이터를 receivedfile.txt라는 파일로 저장
  • ctrl+c를 입력해서 메시지를 파일로 저장되도록 함

 

실행 중인 모든 컨테이너 종료

- Window PowerShell에서 실행 중인 모든 컨테이너 종료하고 삭제함

- Win + X를 눌러 빠른 링크 메뉴를 열고 A를 눌러 Windows PowerShell (관리자) 실행

docker ps -q | ForEach-Object {docker stop $_}

  • docker ps -q
    - 실행 중인 모든 컨테이너 ID를 출력함
  • ForEach-Object  {docker stop $_}
    - 각 컨테이너 ID에 대해 docker stop 명령을 실행함
모든 컨테이너 삭제

docker ps -q | ForEach-Object {docker rm $_}

  • docker ps -q
    - 실행 중인 모든 컨테이너 ID를 출력함
  • $_
    - 명령어의 출력을 인자로 전달하는 역할
  • ForEach-Object  {docker stop $_}
    - 각 컨테이너 ID에 대해 docker stop 명령을 실행함
네트워크 삭제

docker network rm my_network

  • docker network
    - 도커의 네트워크 관련 작업을 수행할 때 사용하는 기본 명령어
  • rm
    - 지정된 네트워크를 삭제하겠다는 뜻
  • my_network
    - 삭제하려는 네트워크의 이름 또는 ID를 입력함