DevOps/docker

[docker] docker-compose 업데이트! 무엇이 바뀌었고 언제까지 바꿔야 하는가?

bandal-gom 2022. 10. 6. 17:27

무엇이 바뀌었는가

내부 코드

  • v1 은 python으로 개발됨
  • v2 는 Golang으로 개발! (from scratch!)
    • standalone binary 파일이 아니라서 설치 방식이 v1과 좀 다름docker-compose → docker compose
  • 명령어 사이에 - 없이 사용 가능
  • v1과 v2의 compatibility를 위해 compose-switch 유틸 제공
    • docker-compose python 코드를 docker compose Golang으로 converting!

container 명명 방식 변경

  • 언더스코어(_) 에서 하이픈 (-) 으로 변경
  • container 이름 기준으로 스크립트를 개발하였다면, -compatibility옵션을 사용하여 에러가 발생하지 않도록 설정 가능

BuildKit supported by default

  • v1에서는 default가 아니었음
  • BuildKit?
    • Dockerfile을 docker image로 변경해주는 open-source project
    • docker image만 생성하는게 아니라 OCI image 나 다른 format의 output으로도 생성 가능

마스코트 이름 (공모중)

귀여울..지도?

  • 도커 모비딕 외에 docker compose도 마스코트가 있다는 사실...아셨나요?
  • 현재 이 마스코트의 이름을 공모중이라고 합니다. 관심있으신 분은 여기서 참여해 보세요.

v1 → v2 업그레이드 이점

Docker CLI의 빠른! 새로운 기능 제공받을 수 있음

많은 기능들이 추가되었지만..요약하자면

  • GPU machine support
  • profiles 기능 추가 (자세한 내용: https://docs.docker.com/compose/profiles/ )
    • 다양한 환경에 선택적으로 서비스를 활성화 할 수 있는 기능
    • profiles설정이 없는 서비스는 항상 활성화 됨
    • 사용방법 ex) docker compose --profile debug up
version: "3.9"
services:
  frontend:
    image: frontend
    profiles: ["frontend"]

  phpmyadmin:
    image: phpmyadmin
    depends_on:
      - db
    profiles:
      - debug

  backend:
    image: backend

  db:
    image: mysql
  • docker compose ls 명령어가 이제 모든 compose app을 보여줌
  • docker compose cp 명령어는 서비스 컨테이너 or 로컬 파일시스템 간에 파일이나 폴더를 복제할수있게 함

스무-스 한 배포 방식

  • 클라우드 서비스와의 연동으로 compose up만 하면 배포/실행 가능
  • ex) 개발환경은 로컬, 운영은 ECS에서 한다면, Docker context switch만 하면 원하는 target 환경에 배포 가능
  • 더 자세한 내용: https://github.com/docker/compose-cli

Docker 생태계에서의 아싸 탈출

  • v1은 python으로 개발되어서 이전에는 docker 생태계에서 아싸였음
  • Moby, the CLI 나 다른 Go 기반 프로젝트들의 코드를 사용할 수 있게 됨. (v1에서는 python 코드로의 변환이 필요했었음)

Compose binaries로 쉬운 업데이트, 의존성 관리

  • 빨라집니다
  • 제가 이 부분 내용 이해를 못했습니다. 번역해주실 분 구합니다

compose 파일 없이 명령어 실행

  • container label로 프로젝트 실행 가능 (아래 예시)
    • --project-name-p 로 대체가능
      docker commpose --project-name [프로젝트-라벨] down
  • 위와같이 docker-compose.yml 파일 이나 환경변수 없이 docker compose start/stop/pause/down/ps/exec… 명령어 실행 가능
  • container label이 뭔가요? (아래 예시)
    • 컨테이너 metadata, 여러 이미지/container 관리에 용이
      build:
      context: .
      labels:
      com.example.description: "Accounting webapp"
      com.example.department: "Finance"
      com.example.label-with-empty-value: ""

v1은 그럼 어떻게 되나요?

충분히 시간을 줄테니 v2로 옮기세요

  • deprecated 로 설정
  • 치명적인 vulnerability or 버그만 다음 마일스톤까지 패치
  • v2 필수적으로 사용하지 않을 수 있도록 옵션 제공
    • docker-compose disable-v2

EOL (=End-of-Life) 제안 기간

  • 2022년 10월
  • 운명인가요? 어떻게 딱 10월에 v2가 나온걸 알게된거지....

더 알고싶다면..

docker compose v2 문서: https://www.docker.com/blog/announcing-compose-v2-general-availability/

반응형