docker-compose
는 여러 Docker 컨테이너를 정의하고 관리하는 도구로, 특히 컨테이너 간의 네트워크와 종속성을 손쉽게 설정하고 관리할 수 있도록 도와줍니다. Docker의 핵심 CLI 툴 중 하나로, 애플리케이션을 서비스 단위로 구성해 개발, 테스트, 배포를 간소화하는 데 사용됩니다.
docker-compose.yml 파일 :
컨테이너를 정의하는 설정 파일입니다.
서비스, 네트워크, 볼륨, 환경 변수 등을 선언적으로 작성합니다.
서비스(Service):
애플리케이션의 단일 구성 요소를 나타냅니다. 예를 들어, 웹 서버, 데이터베이스 등을 각각 하나의 서비스로 정의합니다.
네트워크(Network):
컨테이너 간 통신을 지원하며, 별도의 설정 없이도 동일한 Compose 프로젝트 내 컨테이너는 기본 네트워크로 연결됩니다.
볼륨(Volume):
데이터 영속성을 제공하기 위해 컨테이너와 호스트 간 데이터를 공유하는 저장소입니다
docker-compose.yml
에 정의된 서비스를 기반으로 컨테이너를 생성하고 실행합니다.
-d 옵션을 사용하면 백그라운드에서 실행합니다.
모든 컨테이너와 네트워크, 볼륨을 정리합니다(옵션에 따라 다름).
실행 중인 컨테이너 목록을 표시합니다.
서비스에 대한 이미지를 빌드합니다.
서비스의 로그를 출력합니다.
실행 중인 컨테이너 안에서 명령어를 실행합니다.
version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./code:/var/www/html
networks:
- app-network
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
volumes:
db-data:
networks:
app-network:
web: 웹 서버 서비스
빌드 명령어와 포트 매핑(8080:80), 파일 공유 디렉터리를 정의.
db: 데이터베이스 서비스
MySQL 컨테이너를 사용하며 환경 변수로 루트 비밀번호를 설정.
볼륨(db-data)을 사용해 데이터 영속성을 유지.
volumes, networks: 볼륨과 네트워크를 정의.
다중 컨테이너 애플리케이션 개발:
애플리케이션 환경 설정 자동화:
로컬 개발 및 테스트:
복잡한 배포 구성 관리:
코드로 환경 정의: YAML 파일로 애플리케이션 환경을 선언적으로 관리.
간단한 실행: 단일 명령으로 모든 서비스 시작 및 정리 가능.
포터블 환경: 동일한 구성을 어디서나 재현 가능.
유지보수 용이성: 서비스 추가/변경이 간단.
Docker Compose
는 특히 개발 환경에서 매우 강력한 도구이며, 운영 환경에서도 Docker Swarm
또는 Kubernetes
와 함께 사용 가능합니다.
ex06에 docker-compose.yml
추가
service는 MySQL을 이용할 것이며 mysql-compose-volume으로 볼륨 폴더를 지정하였다.
yml 파일을 추가하였다면 docker-compose를 실행시킨다
docker-compose up -d
DB 로그인 계정을 yml에 맞게 수정한다 (root 계정으로 로그인)
rootdb에 테이블 생성과 데이터를 기입하였다
볼륨이 생성된 것을 확인
볼륨 이름 기본값 : 폴더명_불륨명
볼륨 안에 person 테이블이 생성된 것도 확인
컨테이너, 이미지를 삭제 후 재실행 시 볼륨을 그대로 가져오는지 테스트해 볼 것이다.
컨테이너, 이미지를 삭제해도 볼륨이 그대로 남아있다.
docker-compose를 재실행하고 서버가 잘 가동된지 확인한다.
docker-compose를 재구동해도 db, 테이블, 데이터를 잘 가져옴을 확인
이번엔 폴더 경로를 호스팅 폴더로 지정하여서 볼륨 데이터를 보관할 것이다.
volumeTest
폴더 내에 저장 할 것이다.
docker-compose.yml
에서 볼륨 관련 정보를 수정한다.
※ 볼륨 지정 방법 1
volumes:
- 사용할Docker볼륨이름:/var/lib/mysql
=> '사용할 볼륨 이름'이 Docker Volumes 에 생성됨
※ 볼륨 지정 방법 2
volumes:
- 호스팅폴더경로:/var/lib/mysql
=> /var/lib/mysql의 볼륨 데이터가 호스팅 폴더에 생성되며, Docker Volumes에 생성되지 않는다.
/var/lib/mysql
은 db서버 데이터 볼륨 경로이다.데이터 디렉터리(/var/lib/mysql)
의 데이터를 호스트 시스템의 지정된 위치나 Docker 볼륨으로 매핑하게 된다.
설정을 완료하였으면 docker-compose를 재실행한다.
볼륨 데이터들이 윈도우 호스팅 폴더에 저장이 되었으므로, Docker Volumes에는 volume이 존재하지 않는다.
volumeTest폴더에 볼륨 데이터들이 생성되는 것을 확인
rootdb
에서 person2 테이블 생성 후 KIM 데이터 기입
volumeTest 폴더의 볼륨 데이터에 person2 테이블이 생성됨을 확인