
여러 Docker 컨테이너를 하나의 애플리케이션으로 정의하고 실행하는 도구
실습전에 모든 컨테이너를 삭제해서 정리한다.(선택사항)
Docker rm $(docker ps -a -q)
Docker Compose는 Yaml 형식으로 작성해야 한다.
JSON의 수퍼셋이다. 즉, 일반적인 json 문서를 확장자만 바꾸어도 유효한 yaml문서
키-값 쌍으로 데이터를 표현
들여쓰기로 계층 구조를 나타냄
야 믈
string: Hello World
number: 42
float: 3.14
boolean: true
null: null
리스트도 표현할 수 있다.
fruits:
- apple
- banana
- cherry
json과 달리 주석을 달 수 있는거도 큰 장점이다.
다음은 Flask 웹 애플리케이션과 MariaDB 데이터베이스로 구성된 간단한 예제다. 5001 포트로 들어가면 효과가 표시된다.
version: '3.8'
services:
web:
build:
context: ./app
dockerfile: Dockerfile
# or image
ports:
- "5001:5001"
environment:
- FLASK_ENV=development
- DATABASE_URI=mariadb://user:password@db/mydatabase
volumes:
- ./app:/app
depends_on:
- db
networks:
- app-network
db:
image: arm64v8/mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
volumes:
db-data:
networks:
app-network:
본인이 실습하고 싶은 이미지를 pull로 다운받는다. 도커허브에 많은 자료가 있다.
Docker pull 이미지이름
백그라운드에 컨테이너를 영구적으로 실행해주는 것
docker run -d 이미지이름 sleep infinity
docker exec 컨테이너이름 /bin/ls /
docker cp 컨테이너이름:/docker-compose-arm.yaml .
#tmp 폴더 아래에 설치
docker cp 컨테이너이름:/docker-compose-arm.yaml /tmp
docker cp 컨테이너이름:/app .
이과정에서 작업 디렉토리가 한글이면 실행이 안된다!(단순한 사항이었지만 시간을 꽤 많이 잡아먹었다)
# docker-compose 명령을 사용하여 docker-compose-arm.yaml 파일로 정의된 서비스를 실행
docker-compose -f docker-compose-arm.yaml up
#컨트롤(커맨드) + d 로 터미널 분할시켜 새 터미널에서 추후 작업을 계속 진행한다.
# 실행 중인 Docker Compose 서비스의 상태를 확인
docker-compose ps -a
#5001포트로 get요청 보내기
curl localhost:5001
앱 실행이 정상적으로 된 것을 알 수 있다.


get 요청이 올때마다 터미널에서 로그를 확인 할 수 있다.

기존에 도커는 컨테이너 하나만을 관리하는데 간편하게 사용할수 있는 도구였다면 도커 컴포즈는 yaml 형식의 문서를 통해 여러 컨테이너를 편하게 관리 할 수 있다는 것을 알게 되었다.
폴더명을 영어이름을 쓰자😿
https://docs.docker.com/compose/intro/features-uses/
https://namu.wiki/w/YAML