Docker 네트워크 호스트 명령 사용

David Mbochi Njonge 2023년6월20일
  1. Nginx 프로젝트 생성
  2. 기본 네트워크 드라이버에서 컨테이너 실행
  3. 호스트 네트워크에서 컨테이너 실행
  4. 결론
Docker 네트워크 호스트 명령 사용

Docker 컨테이너는 Docker 설치 중에 생성된 네트워크 드라이버를 활용하여 작동합니다. 사용 가능한 기본 드라이버에는 브리지호스트 네트워크가 포함됩니다.

네트워크를 지정하지 않고 컨테이너를 생성하면 bridge 네트워크에 추가되며 host 네트워크 또는 사용자 지정 네트워크에 network 명령을 추가하려면 --network 명령을 사용합니다. .

이 튜토리얼에서는 --network 명령을 사용하여 호스트 네트워크에 컨테이너를 추가하는 방법을 배웁니다. 또한 이 명령을 사용하여 네트워크를 지정하지 않으면 컨테이너가 기본 네트워크에 추가되는 방법도 알아봅니다.

Nginx 프로젝트 생성

WebStorm IDEA를 열고 파일 > 새로 만들기 > 프로젝트를 선택합니다. 열리는 창에서 빈 프로젝트를 선택하고 프로젝트 이름을 제목 없음에서 docker-network-host로 변경하거나 원하는 이름을 사용하십시오.

마지막으로 만들기 버튼을 눌러 프로젝트를 생성합니다.

현재 폴더에 index.html이라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Welcome to docker networking !</h1>
</body>
</html>

이 파일에서는 컨테이너에서 실행 중인 애플리케이션에 액세스할 때 제목을 표시하는 간단한 웹 페이지를 만들었습니다. 이는 컨테이너가 Nginx 애플리케이션을 실행하고 있는지 확인하는 데 도움이 됩니다.

이미지 정의

Dockerfile이라는 파일을 만들고 다음 지침을 복사하여 파일에 붙여넣습니다. 일반적으로 이 이름의 파일을 사용하여 기존 이미지에서 사용자 지정 이미지를 만듭니다.

FROM nginx:alpine
ADD . /usr/share/nginx/html
  1. FROM - 후속 지침을 사용하여 사용자 정의 이미지를 생성할 기본 이미지를 설정합니다.
  2. ADD - 현재 폴더의 파일 및 폴더를 이미지 파일 시스템 대상 /usr/share/nginx/html에 복사합니다.

이미지 구축

위에서 정의한 Dockerfile을 사용하여 사용자 지정 이미지를 빌드합니다. 키보드 단축키 ALT+F12를 사용하여 새 터미널 창을 열고 이 명령을 사용하여 이미지를 빌드합니다.

~/WebstormProjects/docker-network-host$ docker build --tag docker-network-host:latest .

이 명령은 Dockerfile을 순차적으로 실행하여 태그가 있는 이미지를 생성하며, 아래와 같이 터미널 창에서 실행되는 각 명령을 볼 수 있습니다.

=> [1/2] FROM docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d               0.1s
 => => resolve docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d               0.1s
 => CACHED [2/2] ADD . /usr/share/nginx/html

기본 네트워크 드라이버에서 컨테이너 실행

기본 네트워크에서 애플리케이션의 컨테이너를 실행하려면 터미널 창에서 아래 명령을 실행합니다. 이 컨테이너는 bridge 네트워크에 추가됩니다.

~/WebstormProjects/docker-network-host$ docker run --name docker-network-bridge-test -d -p 8000:80 docker-network-host:latest

이 명령은 컨테이너의 포트 80에서 수신하고 호스트에서 포트 8000을 노출하는 docker-network-bridge-test라는 컨테이너를 실행합니다. 이 컨테이너가 bridge 네트워크에 추가되었는지 확인하려면 아래 명령을 실행하여 bridge 네트워크를 검사합니다.

~/WebstormProjects/docker-network-host$ docker network inspect bridge

출력:

[
    {
        "Name": "bridge",
        "Id": "45773c7633cf28baa742ceca9c054a8dd6b4ea609dd9944d7ae12bdb57e86bcd",
        "Created": "2022-10-06T07:53:45.935633743Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "5e452da9b047ce94ff23b4841d1cb3358f34b037ef566c2f12a9eb57012a5f85": {
                "Name": "docker-network-bridge-test",
                "EndpointID": "d3491eb0c518d91be71b170e8ca0a077e07781bffbe20f3e1a1fd415eef9c288",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

반환된 JSON에서 Containers 속성에는 docker-network-bridge-test라는 컨테이너가 있으며 MacAddressIPv4Address가 할당됩니다. 이것은 이 섹션의 시작 부분에서 생성된 것과 동일한 컨테이너입니다.

브라우저에서 이 애플리케이션을 제공하려면 localhost:8000(http://localhost:8000/)에 대한 요청을 발행하고 Welcome to docker networking ! 텍스트가 포함된 제목을 반환하는지 확인하십시오.

호스트 네트워크에서 컨테이너 실행

호스트 네트워크라는 용어는 호스트 네트워크가 컨테이너 네트워킹을 컨테이너화할 수 없기 때문에 컨테이너가 호스트 시스템의 네트워크에서 실행됨을 의미합니다. 호스트 네트워크에서 컨테이너를 실행하려면 터미널 창에서 다음 명령을 실행합니다.

~/WebstormProjects/docker-network-host$ docker run --rm -d --network host --name docker-network-host-test docker-network-host:latest

이 명령은 host 값과 함께 --network 명령을 사용하여 호스트 네트워크에서 docker-network-host-test라는 컨테이너를 실행합니다. 이 컨테이너가 호스트 네트워크에 추가되었는지 확인하려면 터미널 창에서 다음 명령을 실행합니다.

~/WebstormProjects/docker-network-host$ docker network inspect host

출력:

[
    {
        "Name": "host",
        "Id": "4ce9d3806cd88f9d9ea446272f4338f7b1f5e7098d4d0bc2a11090c1759d1880",
        "Created": "2022-09-19T07:51:50.247290701Z",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "22d15c7eee861ec7fdfd22936c30dfe1d17b2dde52ada93256f3e30943a3ed80": {
                "Name": "docker-network-host-test",
                "EndpointID": "7bd01907c8b86a881b86ae9e9c8ad8c1d3aa9f0583adebb7d41ae15bd565fabe",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

반환된 JSON에서 Containers 속성에는 docker-network-host-test라는 이름의 컨테이너가 있으며 이 경우 컨테이너는 호스트 네트워크. 이것은 이 섹션의 시작 부분에서 생성된 것과 동일한 컨테이너입니다.

브라우저에서 이 애플리케이션을 제공하려면 localhost:80(http://localhost:80/)에 대한 요청을 발행하고 Welcome to docker networking ! 텍스트가 포함된 제목을 반환하는지 확인합니다. 그러나 요청을 수락할 수 있도록 호스트 네트워크의 포트 80이 열려 있는지 확인하십시오.

결론

이 튜토리얼에서는 기본 네트워크 드라이버 bridgehost 네트워크 드라이버 모두에서 컨테이너를 실행하는 방법을 배웠습니다. --network 명령을 사용하여 기본 네트워크가 아닌 다른 네트워크에 컨테이너를 추가합니다.

애플리케이션이 새 네트워크에서 작동하는지 확인하려면 사용된 포트가 연결을 위해 열려 있고 다른 프로세스가 해당 포트를 사용하고 있지 않은지 확인하십시오.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub