My __ 노트

[Docker] 네트워크 종류 및 사용방법 본문

Docker

[Docker] 네트워크 종류 및 사용방법

블루빔 2023. 11. 15. 19:30

Single host networking은 bridge, host, none 네트워크 드라이버가 있으며 
Multi host networking은 overlay 네트워크 드라이버가 있는데 오케이스트레이션에서 많이 사용됩니다. 

아래 간단하게 네트워크 목록 조회 및 사용자 정의 네트워크 생성 & 지정에 대해 기재해 보려고 합니다. 

목차
▶ 네트워크 목록 조회 
▶ network 옵션 - 미지정
▶ network 옵션 - 사용자 정의 네트워크 지정

 

▶ 네트워크 목록 조회 

docker network ls
----------------------------------------------
NETWORK ID     NAME          DRIVER    SCOPE
22d98b37ccb2   bridge        bridge    local
288ec8ea8122   host          host      local
50b5c8a8a504   mon_default   bridge    local    ===> 컨테이너 실행 시 네트워크 설정 없으면 기본으로 생성되는 네트워크 
fe69226fd28a   none          null      local

 

none 네트워크 : 네트워크 설정이 필요 없는 컨테이너 생성 시 사용됩니다. 

docker run -it --net none ubuntu:focal

 

host 네트워크 : 호스트 네트워크 사용이 필요할 때 사용하며 포트 포워딩을 하지 않아도 바로 외부에서 접속이 가능합니다. 

docker run -d --network=host grafana/grafana

 

bridge 네트워크 : default bridge 네트워크가 있고 사용자 정의 네트워크가 있습니다. 
[ 사용자 정의 네트워크 생성 예시 ]

# 이름이 test 인 bridge 네트워크 생성 
docker network create --driver=bridge test

# 위에서 생성한 test 네트워크를 사용하여 nginx 컨테이너를 설정
docker run -d --network=test --net-alias=hello nginx

 

network 옵션 - 미지정

작업 디렉터리가 다른 환경에서 컨테이너를 올리면 네트워크 항목도 계속해서 추가되는 것을 확인할 수 있습니다. 

 

network 옵션 - 사용자 정의 네트워크 지정

compose.yml 파일에서 네트워크 default 설정에 기존 네트워크 네임 작성하여 지정할 수 있습니다. 

version: '3.8'

services:
    stackdriver-export:
        container_name: test-gcp-mon01
        image: gcp-stackdrive-export-img
        restart: unless-stopped
        volumes:
            - ./keyfile:/keyfile
        environment:
            GOOGLE_APPLICATION_CREDENTIALS: "/keyfile/service_account.json"
        ports:
            - "10001:9255"
        user: root
        command:
             "--google.project-id=프로젝트id
              --monitoring.metrics-type-prefixes='compute.googleapis.com/instance/cpu/utilization,agent.googleapis.com/disk/percent_used,agent.googleapis.com/memory/percent_used'"
networks:
    default:
        external: true
        name: mon_default

🚨 에러 발생 : WARN[0000] network default: network.external.name is deprecated. Please set network.name with external: true

🔍 원인 분석 : 확인해 보면 실제로 지정하려는 네트워크에 컨테이너가 올라갔으므로 이슈 사항은 아니나 해당 문구가 발생하지 않게 하려면 external: true를 추가하면 됩니다. 

### before ###
networks:
    default:
        external:
            name: mon_default
------------------------------------
#### 아래와 같이 설정하면 해당 문구 발생하지 않음 ### 
networks:
    default:
        external: true
        name: mon_default