어.. 변명을 좀 하자면...
만들어둔 코드를 테스트하느라 시간이 걸려서.. 어제 쓰지 못했습니다.. ㅈㅅ...
docker-compose는 여러개의 컨테이너를 묶어서(각 컨테이너의 옵션,환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성한다.) 하나의 서비스로 정의하여 관리하는 작업 환경을 제공한다.
하나의 어플리케이션을 실행하기 위해서 여러개의 이미지가 필요할 경우(mysql, redis, python, node, php 등등) docker compose를 사용하지 않는다면 이러한 이미지들을 하나씩 컨테이너로 띄워야만 한다.(run, run, run ....)
저번에 만들었던 sample image와 함께 mysql, redis 이미지를 묶어서 함께 띄워보도록 하자.
services:
db:
image: mysql:8.0 # 원하는 MySQL 버전 지정
container_name: mysql-container
restart: always
ports:
- '3306:3306' # 호스트와 컨테이너 포트 매핑
environment:
MYSQL_ROOT_PASSWORD: root_password # root 비밀번호 설정
MYSQL_DATABASE: sample_db # 초기 생성할 데이터베이스 이름
MYSQL_USER: sample_user # 사용자 이름
MYSQL_PASSWORD: sample_password # 사용자 비밀번호
volumes:
- db_data:/var/lib/mysql # 데이터 영구 저장소
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 초기화 SQL 스크립트 (선택 사항)
redis:
image: redis:latest
container_name: redis-container
hostname: custom-redis-hostname # 네트워크 내부에서의 호스트 이름
depends_on:
- db
ports:
- '6379:6379'
restart: always
command: ['redis-server', '--requirepass', 'your_password'] # 비밀번호 설정
volumes:
- redis_data:/data
sample:
image: sample
container_name: sample-container
ports:
- '3000:3000'
depends_on:
- db
- redis
volumes:
db_data:
redis_data:
먼저 docker-compose.yml 파일을 이렇게 작성한다.
여기서
여기서 version은 쓸모없어져서 더이상 사용하지 않는다고 한다.
이런 옵션들을 지정하여 직접 docker compose up을 실행해보면
이렇게 만든 컨테이너 안에 다른 컨테이너들이 실행되는 모습이 보인다.
여기서 나는 의존성(depends on)으로 docker compose를 했음으로 이 컨테이너를 직접 실행하게되면 mysql -> redis -> sample 컨테이너가 순서대로 켜지게 되서 안에 값이 1,1이 2번들어가게 될 것이다.
자 한번 해보면?
이렇게 docker compose를 이용하여 여러개의 이미지를 이용하여 한번에 컨테이너를 만들어 직접 실행하는 방법을 해보았다.