[Docker] named volume, bind mount, network, docker-compose

[Docker] named volume, bind mount, network, docker-compose

728x90

named volume 사용해서 DB데이터 유지하기

named volume 이란?

docker에서 유지되는 데이터를 관리해야 할 때 편리하게 이름으로 사용할 수 있게 만들어둔 volume 이다.

1. mongodb를 docker로 띄운다

docker run --name mongo_db -p 27017:27017 -d mongo

2. volume을 생성한다

docker volume create memo

3. mongodb에 named volume을 연결한다. application을 mongodb를 사용하여 연결하는 코드로 업데이트 해야한다.

docker run -p 27017:27017 -v memo:/data/db mongo

volume을 docker container에 연결하기

docker bind mount 란?

내가 원하는 volume을 docker container 내의 volume에 연결하는 기능이다. 코드가 수정될 때마다 image를 생성하는 것이 비효율적이므로 이것을 사용한다.

bind mount를 사용하여 application을 실행한다

# 형식 docker run -v {host_path}:{container_path} # 실제 코드 docker run -v "$(pwd)/templates:/templates" -p 80:5000 wellshsdocker-memo:version2

docker에서 여러 개의 container 연결하기

docker network 란?

Docker container는 분리된 filesystem과 네트워크를 가진다. 따로 설정이 없으면 filesystem과 network 통신이 불가능! network를 통해서 docker container끼리 통신을 하게 만들 수 있다

1. docker network를 생성한다

docker network create memo

2. mongodb를 network에 연결한다

docker run -d -p 24017:24017 --network memo --network-alias mongo mongo

3. app.py의 db link를 수정한다

client = MongoClient('mongo', 27017) # localhost -> mongo로 변경

4. 새로운 이미지를 생성한다

docker build -t simple-memo-app:version3 .

5. application과 network를 연결한다

docker run -p 5000:5000 --network memo simple-memo-app:version3

docker-compose 알아보기

docker-compose 란?

여러 컨테이너를 편리하게 실행하기 위해서 만들어둔 도구이다. YAML 파일을 통해 container를 실행하는데 필요한 옵션을 정의할 수 있다. docker-compose는 named volume과 bind mount를 모두 지원한다. 따라서 위처럼 따로 연결하지 않고 YAML 파일에 정의만 해주면 된다. 같은 YAML 파일에 정의된 모든 container는 같은 network를 사용한다.

1. YAML 파일을 생성한다

version: "3.9" # 스키마 버전 # container의 정의 services: # application flask: build: # 이미지를 빌드하여 사용한다는 의미 context: . volumes: # bind mount - ./templates:/templates ports: - "5000:5000" # DB mongo: image: mongo:latest volumes: # named volume - mongo:/data/db/ ports: - "27017:27017" # named volume volumes: mongo:

2. docker-compose로 container를 띄운다

docker-compose up -d

728x90

from http://soohyun6879.tistory.com/244 by ccl(A) rewrite - 2021-12-27 18:26:38