잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

Docker Compose 사용 (docker-compose.yml) 본문

Study/Docker

Docker Compose 사용 (docker-compose.yml)

현록 2023. 1. 4. 10:22

처음 Docker를 배우는 사람들은 막막할 수도 있다.

자꾸 뭔가 새로운 명령어와 파일을 작성하고 사용해서...

가상화와 레이어 개념도 말이 개념 이해지, 이게 된다고?? 싶을 수도 있고.

 

[Study/Docker] - Dockerfile 작성 (Dockerfile로 배포)

앞서 Dockerfile 작성에서는

라이브러리의 이미지에서 컨테이너를 생성하여 가상 OS를 사용하는 작업을 넘어

그 이미지에서 원하는 작업을 하도록 짠 Dockerfile을 통해

자신의 이미지를 빌드하고,

이 이미지를 컨테이너로 만들어 사용했었다.

그러기 위해 docker run 명령을 수행했다. 필요에 따라 옵션을 주었고.

docker build   --no-cache    -t 생성될이미지명:태그    Dockerfile경로

docker image prune   --filter  label=stage=forbuild 

docker run   -d   -it    -p 28090:8090     --name 생성될컨테이너명    생성한이미지명

 

이제 이 run도 원하는 옵션을 미리 짜두고 자동화할 것이다.

이 부분이 Docker Compose이다.

Docker Compose가 단순히 실행 부분만을 맡는 것은 아니다.

여러 컨테이너들을 순서에 맞게 실행시키고, 각 컨테이너들을 이어주고 통합적으로 실행되도록 하는 것이 Docker Compose다.

한 컴퓨터에서 여러 프로그램들을 돌리기도 하지만,

여러 컴퓨터마다 프로그램들이 돌아가는(DB 따로, 메시징서버 따로, ...) 상황도 많지 않나.

그런 상황 역시 가능하다는 것.

 

이런 Container Orchestration에는 Docker Compose 외에도 Kubernetes[쿠버네티스]라는 프레임워크도 있다.

Docker Compose가 docker를 설치한 하나의 Host에서 돌아가는 여러 컨테이너들을 관리한다면,

Kubernetes는 여러 머신들이 갖는 컨테이너들을 관리한다고 한다.

https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/What-is-Kubernetes-vs-Docker-Compose-How-these-DevOps-tools-compare

나도 현재는 명료하게 설명할 수 없으니, 관심있는 분들은 찾아보시길.

 

 


docker-compose.yml

services:
  myproject:
    build:
      context: .
      no_cache: true
      # tags:
        # - "myprojectimagedouble"
        # - "myprojectimagetriple:v.1.0.0"
    image: myprojectimage
    ports:
      - "28090:8090"
    container_name: myprojectcontainer
  git:
    image: bitnami/git:latest
    depends_on:
      - myproject
    container_name: mygitcontainer
    volumes:
      - "./restdocs:/restdocs"
    command: git clone https://github.com/BlackdeerY/restdocs-maven.git restdocs

위 예시에는 v2부터 동작하는 옵션들도 다수 있다.

v2부터는 기본적으로 buildkit을 사용하니, 중간 이미지들은 남지 않고, 실행에 필요한 이미지만 남게 된다.

 

사용

docker compose up -d

 

 

여러 컨테이너를 실행할 수 있으니 괜히 다른 컨테이너도 실행시켰다.

(예시로는 분산시스템이 좋을텐데, 이 짧은 예시를 위해 만들 것까진 아닌 것 같아서...)

포트나 볼륨, 컨테이너명이나 명령 등도 잘 동작하는 것을 확인할 수 있다.

yml에 지정가능한 사항들을 모두 다룰 생각으로 적은 글이 아니어서, 해당 사항은 아래의 공식문서를 참고.

 

 

※ 만약 Docker Desktop 환경에서 ERROR [internal] load metadata for docker.io/library/... 에러를 낸다면,

 ~/.docker/config.json에서 "credStore": "desktop", 부분을 "credStore": "",로 수정하고 Docker Desktop을 재시작해준다.

 

※ build > tags 옵션으로 결과 이미지의 복제본들을 둘 수 있다. IMAGE ID는 같으나 다른 이름으로 다수 존재하게 된다.

 용량이 함께 늘어나는 것은 아니고, 원본은 IMAGE ID이고, 다른 이름과 태그는 모두 심볼릭링크로 이해하면 좋다.

 

 


Docker Compose 공식문서는 아래

https://docs.docker.com/compose/

 

Overview

 

docs.docker.com

https://docs.docker.com/compose/compose-file/

 

Compose specification

 

docs.docker.com

https://docs.docker.com/build/bake/compose-file/

 

Building from Compose file

 

docs.docker.com

 

 

'Study > Docker' 카테고리의 다른 글

컨테이너에서 로그나 파일을 생성할 수 없는 문제  (0) 2023.11.11
Dockerfile 작성 (Dockerfile로 배포)  (0) 2023.01.03
Docker 마운팅  (0) 2021.04.02
Docker 실행  (0) 2021.04.01
Docker 이미지들 (Docker Hub)  (0) 2021.03.31
Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→