잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).
여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.
감사합니다. -현록
현록의 기록저장소
Docker Compose 사용 (docker-compose.yml) 본문
처음 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는 여러 머신들이 갖는 컨테이너들을 관리한다고 한다.
나도 현재는 명료하게 설명할 수 없으니, 관심있는 분들은 찾아보시길.
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/
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/build/bake/compose-file/
'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 |
잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).
여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.
감사합니다. -현록