도커 볼륨
도커 내부에 볼륨을 설정하여 관리
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
전송시 응답 메세지 확인
- 매번 다른
IP
로 응답이 오는데 이거round-robin
방식으로 오는것. --link
컨테이너의IP
가 변경되어도 컨테이너를 찾을 수 있게 DNS에 의해 자동으로 관리해주는 옵션.