[클라우드컴퓨팅] 3-2. 가상화 네트워크
1. 네트워크 개요
네트워크
- 네트워크는 컴퓨터끼리 대화하도록 연결하는 통로
- Docker에서는 네트워크를 사용해 컨테이너 간 데이터를 주고받도록 설정 가능
2. Docker 네트워크 종류
Bridge 네트워크 : 기본 연결 다리
- Docker에서 자동으로 제공하는 기본 네트워크
- 컨테이너끼리는 쉽게 연결되지만, 외부 세계와는 직접 연결되지 않음
- 사용 예 : 개발 환경에서 서로 데이터를 주고받는 컨테이너를 테스트할 때 유용
Host 네트워크 : 직접 연결
- 컨테이너가 컴퓨터(호스트)의 네트워크를 그대로 사용
- 네트워크 설정 단순하고 속도가 빠름, 보안 면에서 제한적일 수 있음
- 사용 예 : 성능이 중요한 웹 서버를 실행할 때 적합
Custom 네트워크 : 내가 만드는 다리
- 사용자가 직접 docker network create 명령어를 통해 원하는 네트워크를 만듦
- 컨테이너끼리의 연결 방식과 외부와의 연결 방식을 세부적으로 설정할 수 있음
- 사용 예 : 여러 컨테이너로 구성된 웹 애플리케이션에서, 데이터베이스와 웹 서버가 특정한 방식으로만 통신하고 싶을때
3. Docker 컨테이너 네트워크 실습
- Container1 생성
- 첫 번째 컨테이너를 생성하여 네트워크 실습을 시작함 - Container2 생성
- 두 번째 컨테이너를 생성하여 통신할 준비를 함 - 메시지 전송
- Container1에서 Container2로 메시지 전송 - 메시지 수신
- Container2가 전송된 메시지를 성공적으로 수신함 - 컨테이너 삭제
- 실습이 완료된 후 모든 컨테이너를 삭제함 - 네트워크 삭제
- 마지막으로 생성했던 네트워크를 삭제함
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를 입력함