Home Docker, volume, network
Post
Cancel

Docker, volume, network

도커 볼륨

  • 도커 내부에 볼륨을 설정하여 관리

  • docker volume coreate --name myvolme
    • 볼륨 생성.
  • docker volume ls
    • 볼륨 확인
  • docker run -d -p 3307:3307 -v my_sql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password --name mysql mysql:latest --port=3307
    • docker -v my_sql:/var/lib/mysql : my_mysql 볼륨에 컨테이너의 /var/lib/mysql 파일이 저장됨
      • 컨테이너가 삭제 되어도 해당 볼륨은 살아남아 영속성 유지.


도커 네트워크 구조

  • 도커 컨테이너 생성시 컨테이너에는 eth0, lo네크워크 인터페이스가 구성됨
    • eth0 : 리눅스 기반 시스템에서 첫번째 이더넷 네크워크 인터페이스를 가르킴.
      • 공인 IP또는 내부 IP가 할당되어 실제로 외부와 통신할 수 있음.
    • 컨테이너의 eth 는 호스트의 veth와 연결되어 있어 docker브리지와 바인딩 되어 외부와 통신 가능
  • lo : 컴퓨터 자체와 통실할때 사용되는 인터페이스, 로컬 시스템에만 작동하는 서비스


  • 도커 네트워크 기능

  • 컨테이너 생성시 기본적으로 docker0브리지를 통해 외부와 통신 가능한 환경 사용 가능.

    • docker network ls : 도커에서 사용 가능한 네트워크 확인


1
2
3
4
NETWORK ID     NAME      DRIVER    SCOPE
9181642e15dd   bridge    bridge    local
43b3706303d2   host      host      local
a93bb115e19c   none      null      local


  • bridge : 컨테이너를 생성할때 자동으로 연결되는 docker0브리지를 활용
    • 172.17.0.x IP대역을 컨테이너에 순차적으로 할당.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PS E:\docker_project> docker network inspect bridge
[
    {
...
        "IPAM": {
...
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
...
        "Containers": {
            "58abd701dfd6c6c04fdd3a449d4166347453a2dd6fa68f59b6fb3585e7daba8f": {
                "Name": "mysql",
                "EndpointID": "9d452bcc5044a4ea20abadfed55165cadd638870ee015f084872b3f1f9812577",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
...
    }
]


bridge network

  • docker0이 아닌 사용자 정의 브리지를 새로 생성해 각 컨테이너에 연결하는 네트워크
    • 연결된 브리지를 통해 외부와 통신할 수 있다.
  • docker network create --driver bridge mybridge
    • 새로운 브리지 타입의 네트워크 생성 가능.


1
2
3
4
PS E:\docker_project> docker network create --driver bridge mybridge
e9adb35a87260a269e5793b919d9fd90e284ab61e92f89870b96baecb0de7bff
PS E:\docker_project> docker network ls
e9adb35a8726   mybridge   bridge    local


  • docker run -it --rm --net mybridge --name bridge ubuntu:14.04
    • 내가 만든 브릿지로 컨테이너 생성 및 연결
  • ubuntu접속 후 ifconfig 확인


1
2
3
4
5
6
7
eth0      Link encap:Ethernet  HWaddr 02:42:ac:12:00:02
          inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0
            ....

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
            ...
  • mybridge확인
1
2
3
4
"Name": "bridge",
"EndpointID": "1a8942c1d5d6ef186f11bd900acd5f5d2d11616307feafdeff48f1317ea98d2c",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",


  • 172.18 대역의 내부 ip 생성확인

  • docker network connect mybridge container_name
    • 컨테이너에 네크워크 연결
  • docker network disconnect mybridge container_name
    • 컨테이너에 네크워크 연결 해제


  • 호스트 네트워크

  • 호스트의 네트워크 환경을 그대로 사용할 수 있음.

    • --net host


  • 논 네트워크

  • 아무런 네트워크도 사용하지 않음.

    • --net none


  • 컨테이너 네트워크

  • 다른 컨테이너의 네트워크 환경 설정을 그대로 사용함

    • --net container:container_name


브리지 네트워크 alias

  • mybridge를 사용하는 3개의 컨테이너를 생성할때에 --net-alias설정
    • docker run -it -d --name network_alias_container1 --net mybridge --net-alias alicek106 ubuntu:14.04
    • docker run -it -d --name network_alias_container2 --net mybridge --net-alias alicek106 ubuntu:14.04
    • docker run -it -d --name network_alias_container3 --net mybridge --net-alias alicek106 ubuntu:14.04
  • 이후 ping요청을 보내는 컨테이너 생성후 ping -c 1 alicek106 명령어 실행시켜 ping전송시 응답 메세지 확인


image


  • 매번 다른 IP로 응답이 오는데 이거 round-robin방식으로 오는것.
  • --link 컨테이너의 IP가 변경되어도 컨테이너를 찾을 수 있게 DNS에 의해 자동으로 관리해주는 옵션.
This post is licensed under CC BY 4.0 by the author.