책에서는 도커 컴포즈를 마지막으로 도커에 관한 설명이 끝납니다. 현재까지는 글쓴이도 아는 내용이라 어렵지 않았던 것 같습니다. 책 자체는 아주 좋은 것 같습니다. 도커에 대해 이해하는 것도 어렵지 않고 아주 쉽게 설명해주어서 입문용 책으로 좋은 것 같습니다. 하지만 주로 쓰이는 명령어 위주로 설명하고 그 이상의 것을 다루지 않기 때문에 누군가는 부족하다고 얘기할 수도 있을 것 같습니다.
그림과 실습으로 배우는 도커 & 쿠버네티스 - 일곱 번째 이야기
도커 컴포즈란?
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
도커 컴포즈란?
- 도커 컴포즈는 여러 개의 컨테이너를 쉽게 관리할 수 있도록 도와준다.
- 시스템 구축과 관련된 명령어를 하나의 텍스트 파일 (정의 파일) 에 기재해두고, 한번에 시스템 전체를 실행하고 종료와 폐기까지 가능하게 한다.
- 정의 파일은 YAML (YAML Ain't a Markup Language) 포맷으로 작성된다.
- 컨테이너와 볼륨을 어떠한 설정으로 만들지 작성되어 있으나 이것은 도커 명령어는 아니다.
- up 명령어
- 정의 파일에 기재된 내용으로 시스템 전체를 구축한다. 볼륨에 대한 정의도 포함되어 있어 주변 환경까지 한번에 설정 가능하다.
- down 명령어
- 컨테이너와 네트워크를 정지 및 삭제한다. 이미지나 볼륨은 삭제하지 않는다.
- stop 명령어
- 컨테이너를 종료만 한다.
- 그러면 Dockerfile 스크립트와 차이점은 무엇일까?
- 컴포즈는 docker run ~ 명령어를 모아놓은 것과 같다. 컨테이너와 주변 환경을 생성할 수 있다.
- Dockerfile은 이미지를 만들기 위한 것으로 네트워크나 볼륨을 생성하는 것은 불가능하다.
- 이해가 어렵다면 만드는 대상이 다르다고 기억하면 편하다.
- 도커 컴포즈와 쿠버네티스의 차이는 무엇일까?
- 도커 컴포즈는 컨테이너들을 생성하고 삭제할 뿐 컨테이너를 관리하지는 않는다.
- 반면에 쿠버네티스는 컨테이너를 관리하는 도구이다. 쿠버네티스에 관해서는 추후 더 자세하게 설명한다.
- 도커 컴포즈의 원리를 그림으로 나타내면 위와 같이 나타낼 수 있다.
- 사람이 일일히 입력하던 명령어를 up 명령어만 입력하면 도커 컴포즈가 대신 입력해준다.
- 정의 파일은 한 폴더에 하나만 존재할 수 있다.
- 추가로, 도커 컴포즈에서는 컨테이너들이 모인 것을 '서비스' 라고 한다.
컴포즈 파일 작성
- 기본적으로 docker-compose.yml 이름을 갖는다. 그 외의 이름을 짓고 -f 옵션을 통해 특정 이름을 갖는 정의 파일을 실행하는 것도 가능하다.
- 컴포즈 파일은 순서대로 version, services, networks, 그리고 volumes 순으로 기재한다.
- YAML 파일에서는 공백에 따라 의미가 달라지며, 탭을 사용하지 못한다.
- 처음에 '공백 두 칸' 으로 들여쓰기를 시작했다면, 그 뒤에도 동일한 형식을 지켜야 한다.
- 이름 뒤에는 : (콜론) 을 붙이고, 콜론 뒤에 추가적인 설정이 있는 경우 공백이 와야한다.
- 설정 내용이 여러 개라면 줄을 바꿔 - (하이픈) 을 앞에 적는다.
- 만약 내가 작성한 YAML이 문법에 맞는지 안맞는지를 확인하고 싶다면 아래의 사이트를 활용할 수 있다.
- 그러나 단지 YAML 문법에 맞는지 안맞는지를 확인하는 것이므로 컴포즈의 입력에 맞는 형식인지 아닌지를 판단할 수는 없다.
https://jsonformatter.org/yaml-formatter/570a2d
Best YAML Formatter Online: Advance YAML Formatter
Online YAML Formatter will format yaml data, and helps to validate, convert YAML to JSON. Save and Share YAML.
jsonformatter.org
- 컴포즈 정의 파일 작성 시 인자들을 docker run ~ 명령어의 인자와 비교하면 아래의 표로 나타낼 수 있다.
- depends_on: 다른 컨테이너에 대한 의존이 있을 때, 실행 순서를 달리할 수 있다.
- restart: 컨테이너 종료시 재시작 여부를 설정할 수 있다.
컴포즈 정의 파일 | docker run 명령어 실행 시 |
image | 이미지 인자 |
networks | --net |
volumes | -v, --mount |
ports | -p |
environment | -e |
depends_on | X |
restart | X |
network_mode | --network |
도커 컴포즈 실행
# 도커 컴포즈 실행
# -d: 백그라운드 실행
# --force-recreate: 설정 또는 이미지가 변경되지 않더라도 컨테이너 재생성
# --no-create: 컨테이너가 이미 존재하는 경우 생성하지 않음
# --no-build: 이미지가 없어도 이미지를 빌드하지 않음
# --build: 컨테이너 실행 전 이미지 빌드
# --scale: 컨테이너의 수를 변경
docker-compose up (옵션)
# 도커 컴포즈 종료
docker-compose down (옵션)
# 도커 컴포즈 정지
docker-compose stop (옵션)
- 위의 명령어들은 컴포즈 정의 파일이 있는 현재 작업 디렉토리에서 명령어를 실행할 때이다.
- 그게 아니라면 -f 옵션으로 정의 파일이 있는 경로를 지정해주어야 한다.
- 컴포즈로 실행된 컨테이너 이름은 임의로 결정된다.
- 즉, 컴포즈에 기재된 컨테이너 이름과 실제 생성된 컨테이너 이름이 다르다!
- 그러므로 컨테이너를 직접 다룰일이 있다면 'ps' 명령어를 통해 이름을 확인해야 한다.
- 같은 구성의 컨테이너를 여러 개 만드려면 --scale 옵션을 붙인다.
docker-compose up --scale 컨테이너_이름=수
- 이런 구성은 쿠버네티스가 더 편리하다. 그러나 쿠버네티스보다 간단하다.
도커 컴포즈까지 이해하는 데 일주일 정도 걸렸던 것 같다. 특히 나는 컴포즈가 컨테이너를 관리한다고도 오해하고 있었고 컴포즈가 도커 엔진의 명령어를 대신 실행한다고는 생각하지 못했다. 그래서 컴포즈 정의 파일과 도커파일 스크립트의 차이를 제대로 이해하고 있지 않았는데 책을 읽으면서 명확하게 이해할 수 있었다.
추천글
2024.08.15 - [책으로 하는 공부] - [책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 다섯 번째 이야기
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 다섯 번째 이야기
이번 게시글에서는 여러 개의 컨테이너를 다루는 방법의 일부와 마운트에 대해서 설명하고 있습니다. 그림과 실습으로 배우는 도커 & 쿠버네티스 - 다섯 번째 이야기 도커와 친숙해지
se-dobby.tistory.com
2024.08.18 - [책으로 하는 공부] - [책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여섯 번째 이야기
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여섯 번째 이야기
이번 시간이 도커에 대해 설명하는 마지막 부분입니다. 다음 게시글은 도커 컴포즈, 그리고 그 다음은 쿠버네티스에 대해 다룰 예정입니다. 본 게시글은 도커 이미지를 만들고, 내가 만든 이미
se-dobby.tistory.com
'책으로 하는 공부' 카테고리의 다른 글
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 아홉 번째 이야기 (0) | 2024.08.20 |
---|---|
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여덟 번째 이야기 (0) | 2024.08.19 |
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여섯 번째 이야기 (0) | 2024.08.18 |
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 다섯 번째 이야기 (0) | 2024.08.15 |
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 네 번째 이야기 (0) | 2024.08.14 |