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
FROM
- 후속 지침을 사용하여 사용자 정의 이미지를 생성할 기본 이미지를 설정합니다.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
라는 컨테이너가 있으며 MacAddress
및 IPv4Address
가 할당됩니다. 이것은 이 섹션의 시작 부분에서 생성된 것과 동일한 컨테이너입니다.
브라우저에서 이 애플리케이션을 제공하려면 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
이 열려 있는지 확인하십시오.
결론
이 튜토리얼에서는 기본 네트워크 드라이버 bridge
및 host
네트워크 드라이버 모두에서 컨테이너를 실행하는 방법을 배웠습니다. --network
명령을 사용하여 기본 네트워크가 아닌 다른 네트워크에 컨테이너를 추가합니다.
애플리케이션이 새 네트워크에서 작동하는지 확인하려면 사용된 포트가 연결을 위해 열려 있고 다른 프로세스가 해당 포트를 사용하고 있지 않은지 확인하십시오.
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