본문 바로가기
책으로 하는 공부

[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 일곱 번째 이야기

by 뿔난 도비 2024. 8. 18.
반응형

책에서는 도커 컴포즈를 마지막으로 도커에 관한 설명이 끝납니다. 현재까지는 글쓴이도 아는 내용이라 어렵지 않았던 것 같습니다. 책 자체는 아주 좋은 것 같습니다. 도커에 대해 이해하는 것도 어렵지 않고 아주 쉽게 설명해주어서 입문용 책으로 좋은 것 같습니다. 하지만 주로 쓰이는 명령어 위주로 설명하고 그 이상의 것을 다루지 않기 때문에 누군가는 부족하다고 얘기할 수도 있을 것 같습니다. 

 

그림과 실습으로 배우는 도커 & 쿠버네티스 - 일곱 번째 이야기

 

도커 컴포즈란?

 

1. 도커 컴포즈란?

2. 컴포즈 파일 작성

3. 도커 컴포즈 실행

추천글

위의 목차를 클릭하면 해당 글로 자동 이동 합니다.

 

도커 컴포즈란?

  • 도커 컴포즈는 여러 개의 컨테이너를 쉽게 관리할 수 있도록 도와준다.
  • 시스템 구축과 관련된 명령어를 하나의 텍스트 파일 (정의 파일) 에 기재해두고, 한번에 시스템 전체를 실행하고 종료와 폐기까지 가능하게 한다.
  • 정의 파일은 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

 

반응형