본문 바로가기
AI, 논문, 데이터 분석

[Docker] [실습2] Docker 컨테이너, 네트워크

by doraemin_dev 2025. 1. 14.

Docker 컨테이너 다루기

Docker 컨테이너 관리 주요 명령

docker container run <옵션> <이미지 ID [명령] [명령인자…] > ; Dockerfile 인스트럭션 재정의

docker container run --name <컨테이너명〉〈이미지명[:태그]〉 ; 자동 이름 대신 알기 쉬운 이름으로 개발 생산성 향상

docker container run <이미지명:태그명 > ; 포그라운드 실행 (attached mode) 컨테이너 종료 - <ctrl + C>

docker container run -d〈이미지명:태그명〉 ; 백그라운드 실행 (detached mode)

docker container Is = docker ps ; '실행 중/종료된 컨테이너 목록 표시

docker container stop <컨테이네D/컨테이너명>; 실행중인 컨테이너 종료

docker container restart <컨테이네D/컨테이너명> ; 컨테이너 재시작

docker container rm [-f (실행중인 컨테이너 강제 삭제)] <컨테이네D/컨테이너명 > ; 컨테이너 파기

docker container logs -f(표준출력 내용을 계속볼 경우) <컨테이네D/컨테이너명> ; 표준 출력 연결하기

ocker container exec <옵션 > <컨테이네 D/컨테이너명 > <컨테이너에서 실행할 명령 > ; 실행중인 컨테이너에서 명령 실행

docker containercp <컨테이네D/컨테이너명:원본파일> <대상파일>; docker containercp <호스트_원본파일> <컨테이네D/컨테이너명:대상파일>; 컨테이너 끼리 또는 컨테이너와 호스트간 파일 복사

Docker container stats <옵션> <대상-컨테이너 ID…>; 컨테이너 단위로 시스템 리소스 사용 현황 확인

#0. Dockerfile 확인
#1. 도커 이미지 빌드
# docker build: docker image build의 축약형입니다.
docker image build ./firstNodeDockerApp -t firstnode-app:1.0
docker build ./guestbook -t guestbook-app # 앞서 baseimage를 가져왔기에, 시간이 더 짧게 걸린다.

#2. 이미지 확인
docker images
#1. 컨테이너 생성 및 실행
##Dockerfile 인스트럭션 재정의
# Docker Desktop 실행 후, 코드 입력
docker container run -it alpine
docker run -it alpine uname -a

#2. 컨테이너에 원하는 이름 부여하기
docker container run -d --name helloworld mcr.microsoft.com/azuredocs/aci-helloworld
docker ps

#3. 컨테이너 포그라운드 실행 (중지: ctrl + c)
# 터미널의 제어권이 넘어간다. ctrl+c로 나와야한다.
docker container run --name firstnode firstnode-app:1.0

#4. 지정 포트로 컨테이너 백그라운드 실행.
# 호스트 80으로 접속하면, localhost:3000으로 매핑.
docker container run --name guestbook-app -d -p 80:3000 guestbook-app

#5. 실행 중인 도커 컨테이너의 ID만 표시
docker container ls -q

#6. 실행 중인 도커 컨테이너 필터링 후 표시
docker container ls --filter "name=guestbook"

#7. 종료된 컨테이너 목록
docker container ls -a
docker ps -a

#8. 컨테이너 종료
docker container stop helloworld

#9. 컨테이너 재시작
docker container restart firstnode

#10. 컨테이너 파기
docker container rm <CONTAINER_ID>
# docker container rm 09fdaa77ba10

#11. 실행 중인 컨테이너에 명령 실행
docker container exec <CONTAINER_ID/CONTAINER_NAME> pwd
# docker container exec 09fdaa77ba10 pwd 
docker container exec firstnode pwd

docker container exec -it <CONTAINER_ID/CONTAINER_NAME> sh
docker container exec -it 09fdaa77ba10 sh
docker container exec -it guestbook-app bash
 mv header.ejs _header.ejs 

#12. 컨테이너에 파일 복사
# docker container cp header.ejs <CONTAINER_ID/CONTAINER_NAME>:/app/views/header.ejs
# 호스트의 파일 .\guestbook\views\header.ejs -> 컨테이너에 복사 guestbook-app:/app/views/header.ejs
docker container cp .\guestbook\views\header.ejs guestbook-app:/app/views/header.ejs

#13. 컨테이너 리소스 사용량 확인
# docker container stats <CONTAINER_ID/CONTAINER_NAME>
docker container stats guestbook-app
더보기
#1. 컨테이너 생성 및 실행
##Dockerfile 인스트럭션 재정의
# Docker Desktop 실행 후, 코드 입력
docker container run -it alpine
docker run -it alpine uname -a

#2. 컨테이너에 원하는 이름 부여하기
docker container run -d --name helloworld mcr.microsoft.com/azuredocs/aci-helloworld
docker ps

#3. 컨테이너 포그라운드 실행 (중지: ctrl + c)
# 터미널의 제어권이 넘어간다. ctrl+c로 나와야한다.
docker container run --name firstnode firstnode-app:1.0

#4. 지정 포트로 컨테이너 백그라운드 실행.
# 호스트 80으로 접속하면, localhost:3000으로 매핑.
docker container run --name guestbook-app -d -p 80:3000 guestbook-app

#5. 실행 중인 도커 컨테이너의 ID만 표시
docker container ls -q

#6. 실행 중인 도커 컨테이너 필터링 후 표시
docker container ls --filter "name=guestbook"

#7. 종료된 컨테이너 목록
docker container ls -a
docker ps -a

#8. 컨테이너 종료
docker container stop helloworld

#9. 컨테이너 재시작
docker container restart firstnode

#10. 컨테이너 파기
docker container rm <CONTAINER_ID>
# docker container rm 09fdaa77ba10

#11. 실행 중인 컨테이너에 명령 실행
docker container exec <CONTAINER_ID/CONTAINER_NAME> pwd
# docker container exec 09fdaa77ba10 pwd 
docker container exec firstnode pwd

docker container exec -it <CONTAINER_ID/CONTAINER_NAME> sh
docker container exec -it 09fdaa77ba10 sh
docker container exec -it guestbook-app bash
 mv header.ejs _header.ejs 

#12. 컨테이너에 파일 복사
# docker container cp header.ejs <CONTAINER_ID/CONTAINER_NAME>:/app/views/header.ejs
# 호스트의 파일 .\guestbook\views\header.ejs -> 컨테이너에 복사 guestbook-app:/app/views/header.ejs
docker container cp .\guestbook\views\header.ejs guestbook-app:/app/views/header.ejs

#13. 컨테이너 리소스 사용량 확인
# docker container stats <CONTAINER_ID/CONTAINER_NAME>
docker container stats guestbook-app
PS C:\lab> #1. 컨테이너 생성 및 실행 PS C:\lab> ##Dockerfile 인스트럭션 재정의 PS C:\lab> docker container run -it alpine Unable to find image 'alpine:latest' locally latest: Pulling from library/alpine 1f3e46996e29: Download complete Digest: sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099 Status: Downloaded newer image for alpine:latest / # ls bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr / # cd home /home # ls /home # cd .. / # exit PS C:\lab> docker run -it alpine uname -a Linux e069b9123b79 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 Linux PS C:\lab> #2. 컨테이너에 원하는 이름 부여하기 PS C:\lab> docker container run -d --name helloworld mcr.microsoft.com/azuredocs/aci-helloworld Unable to find image 'mcr.microsoft.com/azuredocs/aci-helloworld:latest' locally docker: Error response from daemon: failed to resolve reference "mcr.microsoft.com/azuredocs/aci-helloworld:latest": failed to do request: Head "https://mcr.microsoft.com/v2/azuredocs/aci-helloworld/manifests/latest": dialing mcr.microsoft.com:443 container via direct connection because static system has no HTTPS proxy: connecting to mcr.microsoft.com:443: dial tcp 150.171.69.10:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. See 'docker run --help'. PS C:\lab> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PS C:\lab> #3. 컨테이너 포그라운드 실행 (중지: ctrl + c) PS C:\lab> docker container run --name firstnode firstnode-app:1.0 > firstnodedockerapp@1.0.0 start /app > node ./bin/www PS C:\lab> #4. 지정 포트로 컨테이너 백그라운드 실행. PS C:\lab> docker container run --name guestbook-app -d -p 80:3000 guestbook-app 09fdaa77ba10c8280bfb8796200b8cdc6f7f9d317a89c9dbf52fe69adc6be9f3 PS C:\lab> #5. 실행 중인 도커 컨테이너의 ID만 표시 PS C:\lab> docker container ls -q 09fdaa77ba10 PS C:\lab> #6. 실행 중인 도커 컨테이너 필터링 후 표시 PS C:\lab> docker container ls --filter "name=guestbook" CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09fdaa77ba10 guestbook-app "docker-entrypoint.s…" 35 minutes ago Up 35 minutes 80/tcp, 0.0.0.0:80->3000/tcp guestbook-app PS C:\lab> #7. 종료된 컨테이너 목록 PS C:\lab> docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09fdaa77ba10 guestbook-app "docker-entrypoint.s…" 35 minutes ago Up 35 minutes 80/tcp, 0.0.0.0:80->3000/tcp guestbook-app 452d8d51a513 firstnode-app:1.0 "docker-entrypoint.s…" 37 minutes ago Exited (0) 36 minutes ago firstnode e069b9123b79 alpine "uname -a" 40 minutes ago Exited (0) 40 minutes ago trusting_banzai 2873527557ce alpine "/bin/sh" 45 minutes ago Exited (0) 44 minutes ago ecstatic_euler PS C:\lab> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09fdaa77ba10 guestbook-app "docker-entrypoint.s…" 35 minutes ago Up 35 minutes 80/tcp, 0.0.0.0:80->3000/tcp guestbook-app 452d8d51a513 firstnode-app:1.0 "docker-entrypoint.s…" 37 minutes ago Exited (0) 36 minutes ago firstnode e069b9123b79 alpine "uname -a" 40 minutes ago Exited (0) 40 minutes ago trusting_banzai 2873527557ce alpine "/bin/sh" 45 minutes ago Exited (0) 44 minutes ago ecstatic_euler PS C:\lab> #8. 컨테이너 종료 PS C:\lab> docker container stop helloworld Error response from daemon: No such container: helloworld PS C:\lab> #9. 컨테이너 재시작 PS C:\lab> docker container restart firstnode firstnode PS C:\lab> #10. 컨테이너 파기 PS C:\lab> docker container rm 09fdaa77ba10 Error response from daemon: cannot remove container "/guestbook-app": container is running: stop the container before removing or force remove PS C:\lab> #11. 실행 중인 컨테이너에 명령 실행 PS C:\lab> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09fdaa77ba10 guestbook-app "docker-entrypoint.s…" 45 minutes ago Up 45 minutes 80/tcp, 0.0.0.0:80->3000/tcp guestbook-app 452d8d51a513 firstnode-app:1.0 "docker-entrypoint.s…" 47 minutes ago Up 5 seconds 80/tcp, 3000/tcp firstnode PS C:\lab> docker container exec 09fdaa77ba10 pwd /app PS C:\lab> docker container exec firstnode pwd /app PS C:\lab> docker container exec -it 09fdaa77ba10 sh # ls Dockerfile app.js bin node_modules package-lock.json package.json public routes views # exit PS C:\lab> docker container exec -it guestbook-app bash root@09fdaa77ba10:/app# ls Dockerfile app.js bin node_modules package-lock.json package.json public routes views root@09fdaa77ba10:/app# exit exit PS C:\lab> #12. 컨테이너에 파일 복사 PS C:\lab> # docker container cp header.ejs <CONTAINER_ID/CONTAINER_NAME>:/app/views/header.ejs PS C:\lab> # 호스트의 파일 .\guestbook\views\header.ejs -> 컨테이너에 복사 guestbook-app:/app/views/header.ejs PS C:\lab> cd day4 PS C:\lab\day4> docker container cp .\guestbook\views\header.ejs guestbook-app:/app/views/header.ejs Successfully copied 2.05kB to guestbook-app:/app/views/header.ejs PS C:\lab> #13. 컨테이너 리소스 사용량 확인 PS C:\lab> # docker container stats <CONTAINER_ID/CONTAINER_NAME> PS C:\lab> docker container stats guestbook-app CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 09fdaa77ba10 guestbook-app 0.00% 49MiB / 7.66GiB 0.62% 4.49kB / 3.08kB 0B / 0B 23

 

PS C:\lab> docker container run -it alpine 을 하고 있을 때는, docker ps로 실행 중임을 확인할 수 있다.

exit하고 나오면, docker ps에서 실행중인 것이 아무것도 없음을 알 수 있다.

 

docker ps -a를 입력하면, Exited 된 것을 확인할 수 있다.


Docker 네트워크

도커의 기본 네트워크 목록; docker network Is

네트워크 종류 ; bridge, host, overlay

네트워크 만들기 ; docker network create <net-name>

네트워크 정보 확인 ; docker network inspect <net-name>

네트워크에 컨테이너 연결 ; docker network connect <net-name> <con-name> docker run -itd -name <con-name> -network <net-name> <img-name>

네트워크 연결 해제 ; docker network disconnect <net-name> <con-name>

네트워크 제거 ; docker network rm <net-name>

#1. 도커 네트워크 목록 조회
docker network ls
#기본 네트워크보다 직접 네트워크 생성 권장

#2. 네트워크 드라이버
#Docker 네트워크는 bridge, host, overlay 등 목적에 따라 다양한 종류의 네트워크 드라이버(driver) 지원.

#3. 네트워크 만들기
docker network create test-net
# -d 옵션으로 네트워크 드라이버 지정

#4. 네트워크 상세 정보 확인
docker network inspect test-net

# guestboo-app만 실행해두자.
# first node는 중지시키자. 
# docker container rm -f firstnode

#5. 네트워크에 컨테이너 연결하기
# 하나는 bridge 네트워크에, 다른 하나는 test-net에 연결

#5.1 --network 옵션을 사용하지 않은 경우 기본 bridge 네트워크에 연결
docker run -itd --name firstnode firstnode-app:1.0
docker network inspect bridge


#5.2 test-net에 연결하기
docker network connect test-net firstnode

# secondnode 노드를 하나 더 실행
docker run -itd --name secondnode --network test-net firstnode-app:1.0

docker network inspect test-net

#6. 네트워크의 컨테이너 연결 해제
docker network disconnect bridge firstnode

#7. 컨테이너간 통신
docker exec firstnode ping secondnode
# first node의 ip ; "IPv4Address": "172.18.0.2/16"
docker exec secondnode ping 172.18.0.2

#8. 네트워크 제거
docker stop firstnode secondnode
docker network rm test-net
#실행중인 컨테이너가 있는 경우 실패


#9. 네트워크 청소
#어떤 컨테이너도 연결되지 않은 네트워크 청소
# 기본 네트워크에 영향을 줄 수 있으니, 실행하지 말자.
# docker network prune
더보기
PS C:\lab> #1. 도커 네트워크 목록 조회
PS C:\lab> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
972365b8d72b   bridge    bridge    local
4ea60c26bf06   host      host      local
a624d7739c98   none      null      local
PS C:\lab> #기본 네트워크보다 직접 네트워크 생성 권장

PS C:\lab> #3. 네트워크 만들기
PS C:\lab> docker network create test-net
1c3f1dc2550dc1e8d4d37219d51f0c47a8f2ced3ff3d3cd7d4d42ff6ee6df2d1
PS C:\lab> # -d 옵션으로 네트워크 드라이버 지정
PS C:\lab> docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
972365b8d72b   bridge     bridge    local
4ea60c26bf06   host       host      local
a624d7739c98   none       null      local
1c3f1dc2550d   test-net   bridge    local

PS C:\lab> #4. 네트워크 상세 정보 확인
PS C:\lab> docker network inspect test-net
[
    {
        "Name": "test-net",
        "Id": "1c3f1dc2550dc1e8d4d37219d51f0c47a8f2ced3ff3d3cd7d4d42ff6ee6df2d1",
        "Created": "2025-01-14T02:31:00.326338397Z",
        "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": {},
        "Options": {},
        "Labels": {}
    }
]


PS C:\lab> docker ps
CONTAINER ID   IMAGE               COMMAND                   CREATED       STATUS             PORTS                          NAMES
09fdaa77ba10   guestbook-app       "docker-entrypoint.s…"   2 hours ago   Up 2 hours         80/tcp, 0.0.0.0:80->3000/tcp   guestbook-app
452d8d51a513   firstnode-app:1.0   "docker-entrypoint.s…"   2 hours ago   Up About an hour   80/tcp, 3000/tcp               firstnode

PS C:\lab> # guestboo-app만 실행해두자.
PS C:\lab> # first node는 중지시키자. 
PS C:\lab> docker container rm -f firstnode
firstnode
PS C:\lab> docker ps
CONTAINER ID   IMAGE           COMMAND                   CREATED       STATUS       PORTS                          NAMES
09fdaa77ba10   guestbook-app   "docker-entrypoint.s…"   2 hours ago   Up 2 hours   80/tcp, 0.0.0.0:80->3000/tcp   guestbook-app    


PS C:\lab> #5. 네트워크에 컨테이너 연결하기
PS C:\lab> # 하나는 bridge 네트워크에, 다른 하나는 test-net에 연결

PS C:\lab> #5.1 --network 옵션을 사용하지 않은 경우 기본 bridge 네트워크에 연결
PS C:\lab> docker run -itd --name firstnode firstnode-app:1.0
6362c7a61ffc5d7214dff7c75ea5afcb8255335069016b2ebfcd0f17a079ae76

PS C:\lab> docker ps
CONTAINER ID   IMAGE               COMMAND                   CREATED          STATUS          PORTS                          NAMES
6362c7a61ffc   firstnode-app:1.0   "docker-entrypoint.s…"   48 seconds ago   Up 48 seconds   80/tcp, 3000/tcp               firstnode
09fdaa77ba10   guestbook-app       "docker-entrypoint.s…"   2 hours ago      Up 2 hours      80/tcp, 0.0.0.0:80->3000/tcp   guestbook-app

PS C:\lab> docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "972365b8d72be6b1dcf56b3295b26cea1460ca8b9b094c4db0f5565bb0059d54",
        "Created": "2025-01-14T00:25:17.577304925Z",
        "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": {
            "09fdaa77ba10c8280bfb8796200b8cdc6f7f9d317a89c9dbf52fe69adc6be9f3": {
                "Name": "guestbook-app",
                "EndpointID": "e767f6953a1ad2fe8dde8f11780eb577ce90071c3554c3394f1951f2bf72284c",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "6362c7a61ffc5d7214dff7c75ea5afcb8255335069016b2ebfcd0f17a079ae76": {
                "Name": "firstnode",
                "EndpointID": "006cc5ca95f51eb07f389e0309adb4fba10b0f0d7958b94b7ef5b917eef7f7fb",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/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": {}
    }
]
PS C:\lab> #5.2 test-net에 연결하기
PS C:\lab> docker network connect test-net firstnode

PS C:\lab> # secondnode 노드를 하나 더 실행
PS C:\lab> docker run -itd --name secondnode --network test-net firstnode-app:1.0
77728a0ca7eb57b9b4e61357e2e8a1399d429f7c7feeba422892ce31e4a32a83

PS C:\lab> docker network inspect test-net
[
    {
        "Name": "test-net",
        "Id": "1c3f1dc2550dc1e8d4d37219d51f0c47a8f2ced3ff3d3cd7d4d42ff6ee6df2d1",
        "Created": "2025-01-14T02:31:00.326338397Z",
        "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": {
            "6362c7a61ffc5d7214dff7c75ea5afcb8255335069016b2ebfcd0f17a079ae76": {
                "Name": "firstnode",
                "EndpointID": "2f40e94c03e6f3a750239037c7e05c334251ca4d136a0457081cf68fd07a498c",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "77728a0ca7eb57b9b4e61357e2e8a1399d429f7c7feeba422892ce31e4a32a83": {
                "Name": "secondnode",
                "EndpointID": "fece8167c402d6850c46f4a42dc2c5f1af264284d7b159cd00f9d4b51d275bac",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]


PS C:\lab> #6. 네트워크의 컨테이너 연결 해제
PS C:\lab> docker network disconnect bridge firstnode

PS C:\lab> #7. 컨테이너간 통신
PS C:\lab> docker exec firstnode ping secondnode
PING secondnode (172.18.0.3) 56(84) bytes of data.
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.379 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.089 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.085 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=4 ttl=64 time=0.060 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=5 ttl=64 time=0.084 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=6 ttl=64 time=0.056 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=7 ttl=64 time=0.096 ms
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=8 ttl=64 time=0.049 ms
...
64 bytes from secondnode.test-net (172.18.0.3): icmp_seq=40 ttl=64 time=0.080 ms
context canceled


PS C:\lab> docker exec secondnode ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.087 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.077 ms
64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.074 ms
64 bytes from 172.18.0.2: icmp_seq=6 ttl=64 time=0.083 ms
64 bytes from 172.18.0.2: icmp_seq=7 ttl=64 time=0.063 ms
64 bytes from 172.18.0.2: icmp_seq=8 ttl=64 time=0.082 ms
64 bytes from 172.18.0.2: icmp_seq=9 ttl=64 time=0.086 ms
context canceled

PS C:\lab> #8. 네트워크 제거
PS C:\lab> docker stop firstnode secondnode
firstnode
secondnode
PS C:\lab> docker network rm test-net
test-net