Shell Script 문법 정리
Title: Bash Shell Script 문법 정리 Author: DongDongE Tags: Programming Release: 2021.02.08 [Shell
Docker 컨테이너 끼리 통신 및 네트워크 관리를 위해 옵션을 한번 알아보도록 하겠습니다.
docker network <명령어>
dongdonge@dongdonge$ sudo docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect 도커 컨테이너를 도커 네트워크에 연결시
create 도커 네트워크 생성
disconnect 연결된 도커 컨테이너 네트워크 연결 해제
inspect 도커 네트워크 상세 정보 확인
ls 네트워크의 구성 정보를 목록으로 확인
prune 사용하지 않는 모든 도커 네트워크 제거
rm 도커 네트워크 제거
Run 'docker network COMMAND --help' for more information on a command.
위 명령을 살펴보면, 7개의 명령어로 구분이 되어 있습니당.
Docker Network의 목록을 확인하기 위해 사용할 수 있습니다.
docker network ls <옵션>
또는docker network list <옵션>
sudo docker network ls --help
Usage: docker network ls [OPTIONS]
List networks
Aliases:
ls, list
Options:
-f, --filter filter Provide filter values (e.g. 'driver=bridge')
--format string Pretty-print networks using a Go template
--no-trunc Do not truncate the output
-q, --quiet Only display network IDs
dongdonge@dongdonge$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
b074e320f8c0 bridge bridge local
039243296d3c host host local
d2842d865a78 none null local
출력된 결과를 보면 "bridge", "host", "none" 세 개의 네트워크를 확인 할 수 있습니다.
Docker 설치를 하게 되면 기본적으로 위 세 개의 네트워크로 구성되어 있습니다.
또한 컨테이너 생성시 별도로 네트워크를 지정하지 않으면 기본적으로 bridge network로 연결됩니당.
Docker Network 생성시 사용됩니다.
docker network create <옵션> 네트워크
dongdonge@dongdonge$ sudo docker network create --help
Usage: docker network create [OPTIONS] NETWORK
Create a network
Options:
--attachable Enable manual container attachment
--aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver
(default map[])
--config-from string The network from which copying the configuration
--config-only Create a configuration only network
-d, --driver string 네트워크 관리하는 드라이브 (default "bridge")
--gateway strings IPv4 or IPv6 Gateway for the master subnet
--ingress Create swarm routing-mesh network
--internal Restrict external access to the network
--ip-range strings 컨테이너에 IP 할당 범위
--ipam-driver string IP Address Management Driver (default "default")
--ipam-opt map Set IPAM driver specific options (default map[])
--ipv6 Enable IPv6 networking
--label list 네트워크 메타 데이터 설정
-o, --opt map Set driver specific options (default map[])
--scope string Control the network's scope
--subnet strings CIDR형 네트워크 서브
dongdonge@dongdonge$ sudo docker network create --driver=bridge tmp_network
c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832
위 명령으로 네트워크는 브릿지 모드를 사용하고, 네트워크명은 "tmp_network"로 지정 하였다.
dongdonge@dongdonge$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
b074e320f8c0 bridge bridge local
039243296d3c host host local
d2842d865a78 none null local
c605f4737695 tmp_network bridge local
생성된 Docker Network 리스트를 확인해보면, 방금 생성한 "tmp_network" 이름으로 "c605f4737695" 네트워크 아이디가 할당되었다.
Docker Container를 도커 네트워크에 연결할 때 connect 명령어를 사용합니다.
docker network connect <옵션> 네트워크 컨테이너명
dongdonge@dongdonge$ sudo docker network connect --help
Usage: docker network connect [OPTIONS] NETWORK CONTAINER
Connect a container to a network
Options:
--alias strings 컨테이너에 네트워크 별칭 추가
--ip string IPv4 설정
--ip6 string IPv6 설정
--link list 다른 컨테이너에 링크 연결
--link-local-ip strings 컨테이너에 링크 로컬 주소 추가
먼저 컨테이너에 네트워크 연결하기전 Default로 어떤 설정이 되어 있는지 확인후 Connect 해보겠습니당.
dongdonge@dongdonge$ sudo docker inspect dongdonge_tttt
[
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b074e320f8c0c30deffd8af0860a6ef861794f9ae669b12b492984d8962685dc",
"EndpointID": "4e8fa41f6d34cfd40c7644e2664166128d82f68470baba2205bffb0f5b33b34e",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
]
출력된 결과를 살펴보면, 네트워크 Driver가 "Bridge"로 설정되어 있습니다.
dongdonge@dongdonge$ sudo docker network connect tmp_network dongdonge_tttt
"dongdonge_tttt"라는 컨테이너를 "tmp_network" 도커 네트워크에 연결합니다. 연결 후
동일한 네트워크상에 존재하는 다른 컨테이너와 네트워크 통신을 할 수 있습니다.
dongdonge@dongdonge$ sudo docker inspect dongdonge_tttt
"DriverOpts": null
},
"tmp_network": {
"IPAMConfig": {},
"Links": null,
"Aliases": [
"6d0fc332cc2e"
],
"NetworkID": "c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832",
"EndpointID": "cd7d8ad691e3060055d9c7ab3c2b6e3d4cdf51994d957bf37332b4788b98c77f",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02",
"DriverOpts": null
}
}
"tmp_network"으로 도커 네트워크에 소속된걸 확인할 수 있습니다.
반면, Docker Container를 생성하면서 네트워크를 변경하고자 한다면 아래 옵션을 추가하시면 됩니다.
dongdonge@dongdonge$ sudo docker run -itd --name=test --net=tmp_network nginx
51921c2ba2e2e2c6c5468bd99789ecdd9dc12e59c3a0d9340a6ee9ff06f35189
Docker run --name으로 "test" 라는 컨테이너명을 생성하고, --net= 옵션으로 네트워크를 방금 생성한 "tmp_network"로 설정합니다. 이미지는 테스트를 위해 "nginx" Docker Image를 기반으로 하였습니다.
생성후 컨테이너를 확인해보면 아래와 같이 "tmp_network"로 설정된걸 볼 수 있습니다.
dongdonge@dongdonge$ sudo docker inspect test
"Networks": {
"tmp_network": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"51921c2ba2e2"
],
"NetworkID": "c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832",
"EndpointID": "a972048f96c9f73204ba93b505c37a9c348e61445221bc7c0934a3ade5968ce7",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:03",
"DriverOpts": null
}
}
마찬가지로 해당 컨테이너가 "tmp_network"로 연결된걸 확인할 수 있습니다.
Docker 네트워크 연결 해제시 disconnect 명령어를 사용하여 네트워크 연결을 해제합니다.
docker network disconnect <옵션> 네트워크명 컨테이너명
dongdonge@dongdonge$ sudo docker network disconnect --help
Usage: docker network disconnect [OPTIONS] NETWORK CONTAINER
Disconnect a container from a network
Options:
-f, --force 네크워크 연결된 컨테이너 강제로 연결 해제
dongdonge@dongdonge$ sudo docker network disconnect tmp_network test
위 명령어 처럼 disconnect를 입력한다면 정상적으로 도커 컨테이너가 네트워크 연결을 해제 합니다.
Docker Network의 상세 정보 및 연결된 컨테이너 정보를 확인할 때 사용됩니다.
docker network inspect <옵션> 네트워크명
dongdonge@dongdonge$ sudo docker network inspect --help
Usage: docker network inspect [OPTIONS] NETWORK [NETWORK...]
Display detailed information on one or more networks
Options:
-f, --format string Format the output using the given Go template
-v, --verbose Verbose output for diagnostics
dongdonge@dongdonge$ sudo docker network inspect tmp_network
[
{
"Name": "tmp_network",
"Id": "c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832",
"Created": "2019-07-01T01:57:51.540146281+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"6d0fc332cc2e55ac81a325950317864c361ec22cf6bebd2108a0c544a0366b37": {
"Name": "dongdonge_tttt",
"EndpointID": "cd7d8ad691e3060055d9c7ab3c2b6e3d4cdf51994d957bf37332b4788b98c77f",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
"tmp_network" Docker Network의 상세 정보를 확인할 수 있다.
해당 네트워크의 Driver명, 네트워크 대역, 현재 네트워크에 연결된 도커명, 연결된 아이피 정보 등등 알 수 있습니다.
만약 Docker Network를 삭제 한다면 아래 명령어를 입력하시면 됩니다.
dongdonge@dongdonge$ sudo docker network rm tmp_network
tmp_network
docker network rm <네트워크명>
만약 제거가 되지 않는다면, 해당 네트워크에 연결된 컨테이너를 해제해야 합니다.