728x90
반응형
SMALL
✅ 도커 컴포즈(Docker Compose)란 무엇인가?
- 도커 컨테이너를 일괄적으로 정의하고 제어하는 도구
- 설정 파일을 도커 CLI로 번역하는 역할
- CLI는 터미널과 비슷한 환경을 말함
# 도커 컴포즈를 실행하기 위한 코드
docker-compose -f local-infra.yml up --build
✅ 도커 컴포즈 설정 파일
- version
- services
- 실행하려는 컨테이너들을 정의하는 역할
- 이름, 이미지, 포트 매핑, 환경 변수, 볼륨 등을 포함
- 해당 정보를 가지고 컨테이너를 생성하고 관리
- imgae: 컨테이너를 생성할 때 쓰일 이미지 지정
- build: 정의된 도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정
- environment: 환경 변수 설정, docker run 명령어의 --env, -e 옵션과 동일
- commend: 컨테이너가 실행될 때 수행할 명령어, docker run 명령어의 마지막에 붙는 커맨드와 동일
- depends_on: 컨테이너 간의 의존성 주입, 명시된 컨테이너가 먼저 생성되고 실행
- 컨테이너를 생성할 때 의존성이 있는 경우가 많다고 함
- ports: 개방할 포트 지정, docker run 명령어의 -p와 동일 (좌측은 호스트 디바이스 port, 우측은 컨테이너 port)
- expose: 링크로 연결된 컨테이너에게만 공개할 포트 설정
- volumes: 컨테이너에 볼륨을 마운트함
- restart: 컨테이너가 종료될 때 재시작 정책
- no: 재시작 되지 않음
- always: 외부에 영향에 의해 종료 되었을 때 항상 재시작
- on-failure: 오류가 있을 시에 재시작
# ex) docker compose
version: "3.0"
services:
db:
image: mysql:latest
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: wordpress
MYSQL_USER: docker_pro
MYSQL_PASSWORD: docker_pro_pass
app:
depends_on:
- db
image: wordpress:latest
volumes:
- ./app_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: docker_pro
WORDPRESS_DB_PASSWORD: docker_pro_pass
- network
- bridge: 도커 엔진에 의해 자동으로 생성되는 가상 네트워크, 컨테이너끼리 연결되는 기본 네트워크
# 네트워크 보기
docker network ls
# 사용하지 않는 네트워크 삭제
docker network prune
# wordpress_net 네트워크 생성
docker network create wordpress_net
# 도커 stop
docker stop ${docker ps -aq}
✅ 도커 컴포즈를 활용하여 워드 프레스 서비스 실행하기
Docker CLI로 실행할 경우
# mysql db container 생성
docker \
run \
--name "db" \
-v "$(pwd)/db_data:/var/lib/mysql" \
-e "MYSQL_ROOT_PASSWORD=root_pass" \
-e "MYSQL_DATABASE=wordpress" \
-e "MYSQL_USER=docker_pro" \
-e "MYSQL_PASSWORD=docker_pro_pass" \
--network wordpress_net \
mysql:latest
# app 생성
docker \
run \
--name app \
-v "$(pwd)/app_data:/var/www/html" \
-e "WORDPRESS_DB_HOST=db" \
-e "WORDPRESS_DB_NAME=wordpress" \
-e "WORDPRESS_DB_USER=docker_pro" \
-e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
-e "WORDPRESS_DEBUG=1" \
-p 8000:80 \
--network wordpress_net \
wordpress:latest
위와 같이 db와 app을 따로 실행하는 것보다 도커 컴포즈를 통해 여러개 컨테이너를 관리하는게 훨씬 편하다.
🔎 도커 컴포즈로 여러개 컨테이너 관리하기
Docker compose를 이용할 경우
# docker-compose -f docker-compose.yml up --bulid
# yml 파일
version: "3.0"
services:
db:
image: mysql:latest
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: wordpress
MYSQL_USER: docker_pro
MYSQL_PASSWORD: docker_pro_pass
app:
depends_on:
- db
image: wordpress:latest
volumes:
- ./app_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: docker_pro
WORDPRESS_DB_PASSWORD: docker_pro_pass
ec2를 사용할 경우 깃에서 코드를 가져와서 여러 라이브러리를 확인하고 구동해야하지만 도커 컴포즈를 이용하면 세팅으로도 앱실행이 가능하다.
📚 도커 컴포즈 공식문서 and 생활코딩 Docker 입문강의
728x90
반응형
'Docker' 카테고리의 다른 글
[Docker] Docker 알아보기 (0) | 2023.04.04 |
---|