본문 바로가기
카테고리 없음

[새싹 금천 5기] Docker Volume, network 설정 (이노그리드_기업맟춤형 클라우드 인재 양성 캠프)

by z00h 2025. 6. 19.

 

Docker 에서 데이터 관리법 3가지

1. Volume

  • Docker가 관리하는 디스크 저장소
  • 데이터를 호스트의 디스크에 저장하지만, Docker 전용 공간에서 따로 관리됨
  • 일반적으로 데이터 보존이 필요한 경우에 사용
  • 가장 자주 쓰임

 

2. Bind Mount

  • 호스트의 디렉토리(폴더)를 그대로 연결
  • Docker 외부에 있는 원하는 경로를 컨테이너와 공유할 수 있음
  • 개발 시 소스 코드 자동 반영 등 실시간 연결에 유용

bash

docker run -v /host/path:/app mycontainer

 

3. tmpfs Mount

  • 메모리에만 저장 (디스크 X)
  • 컨테이너가 꺼지면 데이터는 사라짐
  • 임시 파일이나 보안 데이터 저장에 사용
bash

docker run --tmpfs /app/tmp mycontainer

 

 

 

방식
저장 위치
특징
주로 쓰는 상황
Volume
Docker 관리 영역
안전하고 Docker가 관리
일반적인 데이터 저장
Bind Mount
Host 디렉토리
실시간 연동, 호스트 직접 접근
개발 환경, 로깅
tmpfs Mount
메모리
휘발성, 빠름, 보안성 좋음
임시 데이터, 민감한 정보 저장

 

 

 

Volume

  • 볼륨 생성
  • 생성한 볼륨을 사용하는 컨테이너 실행
  • 동일한 볼륨을 사용하는 컨테이너를 추가로 실행
  • myvolume 저장 위치 확인 명령어

 

bind mount

  • Mysql 이미지를 이용해서 데이터베이스 컨테이너를 실행

C:\Users\joo97> docker container run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -v c:\docker\mysql_data:/var/lib/mysql mysql:5.7

 

e MYSQL_ROOT_PASSWORD=password

→ 컨테이너 실행에 필요한 환경변수를 설정, root 사용자 패스워드를 설정한다.

 

-e MYSQL_DATABASE=wordpress

→ 데이터베이스 이름을 설정

 

-v c:\docker\mysql_data:/var/lib/mysql

→ -v 호스트경로:컨테이너내부경로(mysql 설정정보와 데이터를 저장하는 곳)

→ -v 다음 경로가 나오면 bind mount, 호스트 경로를 컨테이너 내부 경로와 연결한다.

 

mysql:5.7

→ 컨테이너 실행에 사용할 이미지 docker.io/library/mysql:5.7

위 명령어 실행시 로컬 c:\docker\mysql_data 경로에 mysql 설정정보 및 데이터가 생성된다.

 

 

 

  • 워드프레스(wordpress) 이미지를 이용해서 웹 애플리케이션 컨테이너를 실행

--link wordpressdb:mysql

→ 연결할컨테이너:별칭

 

e WORDPRESS_DB_NAME=wordpress

→ MySQL 데이터베이스에서 사용할 DB의 이름

 

e WORDPRESS_DB_USER=root

→ DB 접속에 사용할 사용자 명

 

e WORDPRESS_DB_PASSWORD=password

→ 패스워드

 

p 80

→ 가용한 호스트의 임의 포트와 컨테이너 내부의 80 포트를 연결

 

wordpress

→ 컨테이너 실행에 사용할 이미지

 

 

 

  • 컨테이너 실행 확인

 

 

 

 

  • 브라우저로 1089포트에서 wordpress 접속 확인

 

 

 

 

 

도커 네트워크

 

 

네트워크 생성

C:\Users\joo97>docker network create --driver=bridge web-network

→ 이름이 web-network인 bridge 드라이버 네트워크 생성

 

네트워크 상세 정보 확인

C:\Users\joo97> docker network inspect web-network

 

 

네트워크 상세 정보 확인

C:\Users\joo97> docker network inspect web-network

 

 

컨테이너 생성

C:\Users\joo97> docker container run -itd --name myweb ubuntu

→ 네트워크를 지정하지 않고 생성했기때문에 디폴트로 bridge 네트워크에 연결됨

 

 

생성한 컨테이너에 web-network 네트워크 연결

C:\Users\joo97> docker network connect web-network myweb

 

 

컨테이너의 네트워크 연결확인

C:\Users\joo97> docker container inspect myweb

→ 확인시 디폴트(bridge)와 web-network가 함께 연결된 상태로 뜬다.

 

 

 

네트워크 삭제

네트워크 연결된 컨테이너를 분리(제거) 후 네트워크 삭제

docker network disconnect web-network myweb (네트워크 분리)

docker network rm web-network (네트워크 삭제)

 

 

 

 

  • 컨테이너 실행시 네트워크 부여

네트워크 생성

C:\Users\joo97> docker network create --driver bridge mybridgenetwork

 

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

C:\Users\joo97>docker container run -itd --name myweb2 --net mybridgenetwork ubuntu

 

 

 

 

  • 연결이 잘 되었는지 확인

C:\Users\joo97> docker container inspect myweb2

 

 

 

네트워크 컨테이너간 통신

기본 브리지 네트워크 (bridge)

  • 컨테이너 실행 시 네트워크를 지정하지 않으면 기본 bridge 를 사용한다.
bash

docker container run -itd --name ubuntu-default-a ubuntu
docker container run -itd --name ubuntu-default-b ubuntu

# IP로 ping 가능
ping 172.17.0.3

# 이름으로 ping 불가
ping ubuntu-default-b  # Name or service not known

 

 

 

 

사용자 정의 브리지 네트워크

  • 사용자 정의 네트워크에서는 내부적으로는 같은 network-a 끼리 통신이 되지만, 기본 브리지 네트워크와 연결은 되어있지 않아 통신이 안된다.
bash

docker network create --driver bridge network-a
docker container run -itd --name ubuntu-network-a --network network-a ubuntu
docker container run -itd --name ubuntu-network-b --network network-a ubuntu

 

 

 

 

-link 옵션: 기본 네트워크에서도 별칭을 통한 통신 가능

bash

docker container run -itd --name ubuntu-default-c --link ubuntu-default-a:ubuntu-a ubuntu

/etc/hosts 파일에 연결된 컨테이너 정보가 자동 등록된다.

link 옵션으로 컨테이너 실행시 컨테이너 이름과 별칭을 사용해서 연결이 가능하다.

root@75599dbdbae6:/# ping ubuntu-default-a -c 3 ← 연결 가능

root@75599dbdbae6:/# ping ubuntu-a -c 3 ← 연결 가능

ubuntu-default-c 컨테이너를 network-a 네트워크에 연결하여, 같은 네트워크에 있는 ubuntu-network-a 에 접속

 

 

 

1. 초기 상태: ubuntu-default-c의 네트워크 정보 확인

bash

docker container inspect ubuntu-default-c
  • 기본적으로 bridge 네트워크에 연결중
  • IP: 172.17.0.4
  • Gateway: 172.17.0.1
  • network-a에는 아직 연결되지 않음

 

 

 

2. ubuntu-default-c를 network-a에 연결

bash
docker network connect network-a ubuntu-default-c

 

 

 

3. 연결 확인 방법 두가지

방법 1. ubuntu-default-c의 네트워크 정보 재확인

bash

docker container inspect ubuntu-default-c
  • bridge와 network-a 둘 다 연결됨
  • network-a에서의 IP: 172.19.0.4
  • Gateway: 172.19.0.1

 

 

 

방법 2. network-a 네트워크 정보 확인

bash

docker network inspect network-a
  • 3개의 컨테이너가 네트워크에 연결됨:

 

 

 

통신 성공 확인

bash

docker container exec -it ubuntu-default-c /bin/bash
ping 172.19.0.2 -c 3

 

ubuntu-default-c → ubuntu-network-a 연결 성공