[Docker]docker compose 로 쉽게 여러 컨테이너 관리하기

김윤섭·2024년 7월 11일
1
post-thumbnail

Docker Compose

여러 Docker 컨테이너를 하나의 애플리케이션으로 정의하고 실행하는 도구

실습전에 모든 컨테이너를 삭제해서 정리한다.(선택사항)

Docker rm $(docker ps -a -q)

Docker Compose는 Yaml 형식으로 작성해야 한다.

Yaml (YAML Ain't Markup Language)

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

0개의 댓글