도커

Docker 알아보기 - 3

황동리 2024. 1. 3. 20:54
반응형

도커 볼륨이란?

: 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. docker run -itd -v /html:/usr/local/apache2/htdocs -p 60080:80 --name h1
2. vi /html/index.html
	<html><body><h1>DOCKER_MANAGEMENT-VOLUME-본인 이니셜</h1></body></html>
3. docker exec -it h1 cat /usr/local/apache2/htdocs/index.html

ex) 2. 연습문제

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가지로 나뉩니다.

  1. Host
  2. Bridge
  3. None

Host 네트워크

  • 네트워크를 호스트 네트워크로 설정하면 호스트의 네트워크 환경을 사용
  • 별도로 네트워크를 생성할 필요 없이 docker run --net host로 설정을 해주면 호스트 네트워크를 사용

Bridge 네트워크

  • container가 사용하는 Switch와 같은 역할, host의 docker0와 동일
  • 같은 bridge라면 container는 동일한 네트워크에 존재
  • 일반적으로 docker run 할 때 네트워크를 지정해주지 않으면 기본 값으로 생성되는 네트워크

None 네트워크

  • 어떠한 Network도 할당하지 않음

docker network 명령어

생성

docker network create [option] <NETWORK>
	ex) docker network create subnet 10.10.0.0/24 --gateway 10.10.0.254 babo
    	=> 10.10.0.0 대역의 babo라는 이름의 bridge를 생성한다.

삭제

docker network rm <NETWORK>
	ex) docker network rm babo
    ** babo 네트워크와 연결된 도커 컨테이너 중단부터 해야 네트워크 삭제 가능

도커 네트워크 목록 확인

docker network ls

컨테이너와 연결된 도커 네트워크 해제

docker network disconnect [OPTION] <NETWORK> <Container>
	ex) docker network disconnect -f babo a1
    	=> a1 컨테이너에 babo라는 네트워크 연결 해제

컨테이너 실행 시 네트워크 연결

docker run --net (host Or none Or 사용자 지정 bridge)

ex) 3. 연습문제
10.0.0.12 번 서버에 m1 컨테이너는 Host 네트워크를 사용
10.0.0.12 번 서버에 m2 컨테이너는 Bridge 네트워크를 사용 (port=63306)

10.0.0.11 번 서버에 w1 컨테이너는 Host 네트워크를 사용
10.0.0.11 번 서버에 w2 컨테이너는 Bridge 네트워크를 사용

위와 같은 구성으로 서버 구성

HOST Network 사용할 때

2번 서버
docker run -itd --net host -e MYSQL_ROOT_PASSWORD=It12345! -e MYSQL_DATABASE=wordpress -e MYSQL_PASSWORD=It12345! --name m1 mysql:5.7
firewall-cmd --add-port=3306/tcp

1번 서버
docker run -itd --net host -e WORDPRESS_DB_HOST=10.0.0.12 -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USRE=root -e WORDPRESS_DB_PASSWORD=It12345! --name w1 wordpress:5.6
firewall-cmd --add-port=80/tcp

Bridge Network 사용할 때

2번 서버
docker run -itd -e MYSQL_ROOT_PASSWORD=It12345! -e MYSQL_DATABASE=wordpress -e MYSQL_PASSWORD=It12345! -p 63306:3306 --name m2 mysql:5.7

1번 서버
docker run -itd -e WORDPRESS_DB_HOST=10.0.0.12:63306 -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USRE=root -e WORDPRESS_DB_PASSWORD=It12345! --name w2 wordpress:5.6

출처
https://captcha.tistory.com/70

반응형

'도커' 카테고리의 다른 글

Ubuntu 20.04 Docker 설치 방법  (0) 2024.03.08
Docker 알아보기 - 4  (1) 2024.01.04
Docker 알아보기 - 2  (1) 2024.01.02
Docker 알아보기 - 1  (1) 2024.01.01
컨테이너란?  (0) 2023.12.26