Docker 볼륨
1. 문제점
- Docker image는 읽기 전용이며 컨테이너 변경사항은 별도로 저장하여 컨테이너의 정보를 보존함.
- 단점은 컨테이너가 삭제되면 컨테이너 계층에 저장된 정보는 삭제되며 복구가 불가능 함.
- 이러한 문제를 방지하기 위해 컨테이너 데이터를 영속적으로 활용하는 방법을 다음 세가지로 제시함.
- 호스트와 볼륨공유
- 볼륨 컨테이너 활용
- 도커가 관리하는 볼륨 생성
2. 호스트 볼륨 공유
- 다음 스크립트를 통해 호스트 볼륨을 공유한 컨테이너를 실행
docker run -d --name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \
mysql:5.7
Info Notice
find: ‘/var/lib/mysql/’: Permission denied
chown: changing ownership of ‘/var/lib/mysql/’: Permission denied
호스트 볼륨 마운트의 경우 위와 같은 에러가 발생하는 경우가 있음. 원인은 SELinux때문으로
조치방법은 SELinux 조치하기를 참고함.
- 실행 예제
3. 볼륨 컨테이너
- -v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유
docker run -it \
--name volumes_form_container \
--volumes-from wordpress_hostvolume \
ubuntu:14.04
- 실행 예제
4. 도커 볼륨
- 도커 자체에서 제공하는 볼륨 기능을 활용하여 데이터를 보존
- 실습 예제
5. 도커 네트워크
- 도커는 컨테이너 생성 시 내부에 IP(172.17.0.x)를 순차적으로 할당함.
- 컨테이너 내부에서 ifconfig로 검색하면 eth0로 확인 가능
root@4d0a781a2b45:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
...
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
...
- 컨테이너 내부의 eth0는 실제 외부와 통신을 할 수 없고 호스트와 연결점이 있어야 함.
- 컨테이너 생성시 호스트는 veth…를 자동으로 생성하고 컨테이너 내부의 eth0와 자동으로 매핑 됨.
- 최종적으로 veth…는 docker0 브리지와 바인딩되고 docker0는 호스트의 eth0과 바인딩되어 최종 외부와 통신을 하게 됨.
6. 네트워크 드라이버
- 도커는 기본적으로 docker0 브리지와 외부 통신이 가능하지만 네트워크 드라이버를 사용하여 외부 통신이 가능함.
- 네트워크 드라이버
- 브리지(bridge)
- 호스트(host)
- 논(none)
- 컨테이너(container)
- 오버레이(overlay)
- third-party(weave, flannel, openswitch)
6.1 브리지
- 사용자 정의 브리지
- docker0와 같이 사용자가 정의한 브리지로 외부와 통신
- 세부 설정
docker network create --driver=bridge \
--subnet=172.72.0.0./16 \
--ip-range=172.72.0.0./24 \
--gateway=172.72.0.1 \
my_custom_network
6.2 호스트
- 호스트 네트워크 환경을 그대로 사용
- 별도의 포트 포워딩 없이 바로 서비스
docker run -it --name network_host \
--net host \
ubuntu:14.04
6.3 None
- 네트워크를 사용하지 않고 외부와 연결이 단절
docker run -it --name network_none \
--net none \
ubuntu:14.04
6.4 컨테이너
- 다른 컨테이너의 네트워크 환경을 공유
#컨테이너 생성
docker run -it -d --name network_container_1 ubuntu:14.04
#생성된 컨테이너 네트워크 공유
docker run -it -d --name network_container_2 \
--net container:network_container_1 \
ubuntu:14.04
7. –net-alias
- –net-alias 옵션을 통해 네트워크 상의 여러 컨테이너에 접근할 수 있음
- 마치 L4 Switch에 DNS 이름을 호출하면 Round Robin으로 각 호스트를 호출하는 것과 같은효과를 얻음
댓글남기기