ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ docker-compose ]도커 컴포즈가 무엇이고 어떻게 실행하는 것일까?
    개발일지/docker 2020. 6. 3. 16:40

    Docker Compose 란

     

    다중 컨테이너 도커 애플리케이션을 정의하고 동작하게 해주는 툴이다.

    YAML 파일로 작성되어지며 작성된 yaml 파일을 읽어 들여 모든 서비스들을 생성 및 시작을 하나의 명령어로 실행할 수 있다.

     

    version : '3.0' 
    services: 
      web: 
        build: . 
        ports: 
          - "3000:3000"
        networks: 
          - compose-networks
    
      mongodb:
        image: "mongo"
        ports:
          - "27017:27017"
        volumes:
          - .:/data/db
        networks:  
          - compose-networks
    
    networks: 
      compose-networks:

     

    docker-compose 파일 작성을 해봤는데요 한라인씩 살펴보겠습니다.

     

    version : '3.0' 

    docker-compose version 명시를 가장 상단에 입력합니다.

    버전별로 사용할 수 있는 옵션들이 다를 것입니다. 

    버전에 따라 사용할 수 있는 옵션을 확인하실 분들은 링크 클릭.

    저는 3 버전으로 작성하였습니다.

     

    services : 

    하나의 애플리케이션에는 여러 개의 서비스들이 연결되어 사용됩니다.

    예를 들면 사진을 공유하는 어플리케이션을 만들고자 할 때, 클라이언트 웹 서비스도 필요하고 , 빽단에 사진을 가공하고 DB에 저장시키는 , spring 서버나 node 서버 서비스도 필요하고, DB 서버도 필요하며, 검색엔진도 필요할 수도 있습니다. 이렇게 하나의 어플리케이션에 필요한 서비스들을 services: 하위에 작성합니다.

     

    web:  
        build: .
    
    or
    
    web:
        build:
          context: .
          dockerfile: ./docker/Dockerfile

    docker-compose.yml 파일 내에서도 도커 이미지를 만들 수 있습니다. build 옵션을 주고 현 경로에 docker file 이 있다면 .< 이것으로 해결되고 다른 경로에 있다면 아래 build 옵션을 사용하면 됩니다.

     

    ports:
      - "3000:3000"

    포트 설정입니다.

     

    networks:  
      - compose-networks

    해당 어플리케이션내에 같은 네트워크로 구성합니다. compose-networks 는 임의로 생성한 이름입니다. 원하는 이름으로 변경 가능하며 해당 이름의 네트워크는 하단에 추가적으로 다루겠습니다.

    참고 ) 같은 어플리케이션내에 작성된 서비스들은 기본적으로 같은 네트워크에 포함되어있다. 즉, 네트워크 옵션은 사용하지 않아도 무관하다. 단 , 다른 어플리케이션과 통신이 되어야 할 때에는 해당 옵션이 필요하다.

     

    mongodb: 
        image: "mongo"

    위에 사용한 build를 사용해서 이미지를 만들어 사용할 수도 있지만 docker hub를 통해서 이미지를 받아와서 사용할 수 있다 그럴때에는 image 옵션을 사용한다. image이름 : <tag> 를 사용할수 있지만

    tag를 사용하지 않으면 기본적으로 latest를 참조한다.

     

    volumes: 
        - .:/data/db

    디비 같은 경우 휘발성 데이터가 아니기 때문에 도커가 종료되고 다시 실행되어도 데이터가 지워지면 안 된다. 하여 DB 데이터를 local 환경의 폴더와 연결하여 파일이 손실되는 것을 막는다.

     

    더 많은 옵션들이 있지만. 이번에는 이 정도만 다루도록 하겠다. 도커 공식 문서에 다양한 옵션을 확인할 수 있으니 확인이 원하신 분은 링크 클릭

     

    이제 docker-compose 파일을 작성하였기 때문에

    해당 파일을 실행하여 여러 개의 서비스들을 한 번에 실행해보도록 하겠습니다.

     

    $ docker-compose up -d

    위 명령을 통해서 서비스가 동작됨을 확인할 수 있습니다.

     

    $ docker ps

    도커 컨테이너들의 리스트를 확인해보시면 2개가 실행 중임을 확인할 수 있습니다.

    여기서 확인할 수 있는 것은 <어플리케이션 이름>_<서비스 이름> 으로 이름이 생성된 것을 확인할수 있습니다.

     

     

    up 명령어에 알아두면 좋은 옵션을 알아보겠습니다.

     

    -d --detach
    • 옵션  백그라운드에서 돌아가도록 하는 옵션입니다.

    • 해당 옵션이 없이 실행하면 커멘드에서 ctrl+c로 나왔을 때 컨테이너가 종료됩니다.

     

    --build
    • 위에서 compose 파일에 build 옵션을 사용한 경우 , 새로운 빌드된 image 가 필요할 때 up --build를 사용해서 실행 시 새롭게 빌드를 시키며 새로운 이미지를 만들어 사용합니다.

     

     

    그밖에 docker-compose 명령어

    $ docker-compose build [option]
    • compose에 사용된 이미지를 새로 build 하는 명령어

    $ docker-compose down [option]
    • 컴포즈 파일 위치에서 down 명령어를 사용하여 해당하는 어플리케이션을 종료시킵니다.

    • --rmi 옵션 추가 시 'all' 또는  'local' 사용하면 어플리케이션 종료하며 사용된 이미지 삭제합니다.

    $ docker-compose exec [option]
    • docker exec와 동일하며 해당 컨테이너로 접속할 수 있다.

    $ docker-compose ps [option]
    • 실행된 컨테이너들을 볼 수 있다.

    $ docker-compose stop [option]
    • 실행된 컨테이너들을 종료하는 옵션

    $ docker-compose start [option]
    $ docker-compose restart [option]
    • 종료된 컨테이너들을 켜어는 하는 옵션

    $ docker-compose rm [option]
    • 종료된 컨테이너들을 제거하는 옵션

    • docker-compose down 명령어는 docker-compose stop + docker-compose rm과 같다.

     

    이상 도커 컴포즈를 알아봤습니다.

     

    실습 관련해서 영상으로 남겨봤습니다 확인 원하시는 분은 영상 클릭 :)

     

     

    다음에는 도커 swarm을 알아보도록 하겠습니다.

    댓글

Designed by Tistory.