: Host 파일시스템 내의 도커 볼륨 영역(/var/lib/docker/volumes/)을 Docker가 관리 및 사용하고 이 영역을 수정하면 볼륨과 연결된 컨테이너들에게도 수정사항이 적용이 된다. Docker가 아닌 다른 Process는 해당 영역 접근이 불가능
도커 볼륨 영역(/var/lib/docker/volumes/)으로 관리를 할 수 있지만, Host pc의 아무 디렉터리나 지정해서 관리할 수도 있습니다.
도커 볼륨 연결 run을 할 때 -v 옵션을 사용하여 연결해줍니다.
ex) docker run -itd -v /test:/usr/local/apache2/htdocs --name h1 httpd
=> 도커 볼륨 영역에 /test 디렉터리를 생성 후 httpd 이미지로 만든 컨테이너의 /usr/local/apache2/htdocs 디렉터리와 연결해준다.
아래 연습문제를 통해 자세히 알아보겠습니다.
ex) 1. 연습문제
1. httpd 이미지를 이용해서 h1 실행
2. port=60080 외부에 호스트
3. 도커가 관리하는 volume html을 컨테이너의 htdocs 디렉토리와 연결합니다.
4. 도커가 관리하는 볼륨 html에 index.html 파일의 존재를 확인합니다.
5. host쪽의 index.html 파일을 변경하여 아래와 같이 출력되게 합니다.
DOCKER-MANAGEMENT-VOLUME-본인 이니셜
6. httpd image를 이용해서 h2를 실행하면서 host의 html 볼륨을 컨테이너의 htdocs와 연결했을 경우 출력되는 페이즈를 확인 port는 61080 외부에 호스트
1. 가상머신 /html 디렉토리 생성 후 index.html 작성
2. httpd를 실행하는 h1 container를 생성하면서 /usr/local/apache2/htdocs 디렉토리와 연결
3. nginx를 실행하는 n1 container를 생성하면서 /usr/share/nginx/html과 연결한다.
4. n1, h1은 동일한 페이지 서비스
5. 가상머신의 index.html파일을 변경하면 변경화면 출력여부 확인
결과 코드
mkdir /html
vi /html/index.html
docker run -itd -p 60001:80 -v /html:/usr/local/apache2/htdocs --name h1 httpd
docker run -itd -p 60002:80 -v /html:/usr/share/nginx/html --name n1 nginx
Docker Network
도커 네트워크는 위와 같은 그림으로 구성이 되어있습니다.
도커는 컨테이너를 생성할 때마다 자동으로 내부 IP를 할당해줍니다.
컨테이너를 시작할 때 마다 각 컨테이너에 veth(Virtual Ethernet)이라는 네트워크 인터페이스를 생성이 되고, veth 인터페이스와 docker0를 통해 외부와 연결을 할 수 있습니다.
컨테이너를 생성하면 기본적으로 docker0 브리지를 통해 외부와 통신할 수 있는 환경을 사용할 수 있지만, 사용자의 선택에 따라 여러 네트워크 드라이버를 사용할 수 있습니다.
Docker에서 사용하는 네트워크 드라이브는 크게 3가지로 나뉩니다.
Host
Bridge
None
Host 네트워크
네트워크를 호스트 네트워크로 설정하면 호스트의 네트워크 환경을 사용
별도로 네트워크를 생성할 필요 없이 docker run --net host로 설정을 해주면 호스트 네트워크를 사용
Bridge 네트워크
container가 사용하는 Switch와 같은 역할, host의 docker0와 동일
같은 bridge라면 container는 동일한 네트워크에 존재
일반적으로 docker run 할 때 네트워크를 지정해주지 않으면 기본 값으로 생성되는 네트워크