make it simple
article thumbnail
Published 2023. 4. 2. 20:13
[Docker]Docker Compose란? DevOps&Network

개요

  • Docker를 사용하면되는데 Docker Compose를 사용하는 이유는 도커 명령어를 파일로 관리해서 복잡한 도커 컨테이너/네트워크를 구성하기 용이하다. 기존 docker보다 간결하고 가독성이 좋다.
  • Compose는 다중 컨테이너 Docker 어플리케이션에서 정의하고 실행하게 작동시켜주는 도구이다. YAML파일을 통해 작성함으로써 어플리케이션의 서비스를 구성할 수 있다. 한줄의 명령어로 모든 서비스를 생성하고 시작하게 할 수 있다. 또한, 모든 환경(운영, 스테이지, 개발, 테스트, 또한 CI 워크 플로우 등) 에서 작동한다. 어플리케이션의 아래의 생명주기를 관리하기 위한 명령어를 제공한다.
    • 서비스의 시작, 종료, 그리고 재빌드
    • 실행중인 서비스의 상태
    • 실행중인 서비스의 로그 스트림

구성 요소 ( 상세한 설명: https://watch-n-learn.tistory.com/40

  • image : 컨테이너의 이미지를 정의
  • build : 위 이미지를 활용하는 방식이 아닌 dockerfile의 경로를 지정해 빌드하여 사용하는 방법
  • dockerfile : 빌드할 dockerfile의 이름이 Dockerfile이 아닌 경우 이름을 지정하기 위해 사용
  • ports: 호스트와 컨테이너의 포트 바인딩 설정에 사용됨
  • volumes: 호스트의 지정된 경로로 컨테이너의 볼륨을 마운트 하도록 설정
  • container_name: 컨테이너 이름을 설정
  • command: 컨테이너가 실행된 후 컨테이너의 쉘에서 실행시킬 쉘 명령어 설정
  • environment: 환경변수를 설정 
  • env_file: 'environment'와 동일한 기능을 수행하지만 이 키워드를 사용하면 env 파일을 이용해서 적용할 수 있음
  • depends_on: 다른 컨테이너와 의존관계를 설정
  • restart: 컨테이너의 재시작과 관련하여 설정

 


예제 1

  • nginx 웹 서비스와 MySQL를 Docker Compose로 실행해보자
version: "3.9"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

옵션 설명

  • image: docker hub에 있는 이미지를 사용하여 docker container를 작성할 경우 image를 설정할 수 있다.
  • environment: env옵션과 동일한 역할 환경변수 값 설정할 수 있다.
  • ports: 포트 번호를 입력할 때 무조건 쌍따옴표안에 작성필요

Docker Compose 실행 명령어

docker-compose up
  • 위의 YML 파일에서는  개의 서비스를 정의합니다. web 서비스는 nginx 이미지를 사용하며, 호스트의 8080 포트를 컨테이너의 80 포트로 매핑합니다. db 서비스는 mysql 이미지를 사용하며, 컨테이너 내에서 MYSQL_ROOT_PASSWORD 환경 변수를 설정합니다.

예제 2

  • Flask 웹 어플리케이션과 MySQL을 Docker Compose로 실행해보자.

Docker Compose 파일

version: '3'

services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_DATABASE: test
      MYSQL_USER: root
      MYSQL_PASSWORD: example
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - ./mysql-data:/var/lib/mysql
  web:
    build: .
    restart: always
    ports:
      - "5000:5000"
    environment:
      DATABASE_URL: mysql+pymysql://root:example@db/test

옵션 설명

  • image: docker hub에 있는 이미지를 사용하여 docker container를 작성할 경우 image를 설정할 수 있다.
  • restart: docker container가 다운되어 있을경우 항상 재시작을 하는 설정이다.
  • environment: env옵션과 동일한 역할 환경변수 값 설정할 수 있다.
  • volumes: 여러개의 volume을 지정하며 볼륨을 나눠가며 사용할 수 있다. 
  • ports: 포트 번호를 입력할 때 무조건 쌍따옴표안에 작성필요

Docker Compose 실행 명령어

docker-compose up
  • 위 파일은 두개의 서비스를 정의한다. db(mysql)은 데이터베이스고, 다른 하나(web)은 flask 웹 어플리케이션이다. 위와 같이 Docker compose 파일을 작성 후 위과 같은 명령어로 예제를 실행할 수 있다. 

결론

  • 서버에서 도커를 설치한 후 위와같이 설정 파일을 작성 후 명령어로 실행하면 간단하게 환경을 구축할 수 있는 큰 장점이 있다. 다양한 옵션 다양한 환경에서 사용할 수 있어 용이하게 사용할 수 있을 거 같다.

reference

'DevOps&Network' 카테고리의 다른 글

JWT(JSON WEB TOKEN) 이란?  (1) 2023.04.17
[AWS] 구축한 Subnet에 EC2 연결  (0) 2023.03.23
[AWS] VPC & SUBNET 구축하기  (0) 2023.03.20
profile

make it simple

@keep it simple

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!