Docker

도커 컴포즈

Debin 2022. 8. 18.
반응형

도커 컴포즈

시스템 구축과 관련된 명령어를 하나의 텍스트 파일(정의 파일)에 기재해

명령어 한번에 시스템 전체를 실행하고 종료와 폐기까지 한 번에 하도록 도와주는 도구가 바로 도커 컴포즈다.

Dockerfile과 비슷한 면모를 보인다.

 

도커 컴포즈는 시스템 구축에 필요한 설정을 YAML 포맷으로 기재한 정의 파일을 이용해

전체 시스템을 일괄 실행 또는 일괄 종료 및 삭제할 수 있도록 도와주는 도구다.

 

정의 파일에는 컨테이너나 볼륨을 '어떠한 설정으로 만들지'에 대한 항목이 기재돼 있다.

그럼 이제 중요한 up 커맨드와 down 커맨드에 대해 알아보자.

 

  • up 커맨드: docker run 커맨드와 비슷하다. 정의 파일에 기재된 내용대로 이미지를 내려받고 컨테이너를 생성 및 실행한다. 정의 파일에는 네트워크나 볼륨에 대한 정의도 기재할 수 있어서 주변 환경을 한꺼번에 생성할 수 있다.
  • down 커맨드: 컨테이너와 네트워크를 정지 및 삭제한다. 볼륨과 이미지는 삭제하지 않는다. 컨테이너와 네트워크 삭제 없이 종료만 하고 싶다면 stop 커맨드를 사용한다.

사실 도커 컴포즈를 사용하려면 먼저 설치할 필요가 있다. 도커 컴포즈는 도커 엔진과 별개의 소프트웨어이기 때문이다.

그러나 도커 컴포즈는 도커 엔진과 사용법에서 큰 차이가 없다. 도커 컴포즈로 생성한 컨테이너를 도커 엔진으로 똑같이 관리할 수 있다.

 

참고로 우리 실습에서 사용하는 도커 데스크톱은 도커 컴포즈가 함께 설치되었기 때문에 별도의 설치가 필요 없다.

그러나 리눅스에서는 도커 컴포즈와 파이썬3 런타임 및 필요 도구를 설치해야 한다. 도커 컴포즈가 파이썬으로 작성되었기 때문이다.

도커 컴포즈의 사용법

도커 컴포즈를 사용하려면 도커파일 스크립트로 이미지를 빌드할 때처럼 호스트 컴퓨터에 폴더를 만들고 이 폴더에 정의 파일을 배치한다.

정의 파일의 이름은 미리 정해진 docker-compose.yml이라는 사용해야 한다.

파일은 호스트 컴퓨터에 배치되지만 명령어는 똑같이 도커 엔진에 전달되며, 만들어진 컨테이너도 동리하게 도커 엔진 위에서 동작한다.

요약하면 사람이 일일이 입력하던 명령어를 도커 컴포즈가 대신 입력해주는 역할을 맡는다. (run 여러 개 입력할 것을 up만 쓰면 됨)

 

참고로 정의 파일은 한 폴더에 하나만 있어야 한다.

도커 컴포즈 파일 작성법

먼저 예시 파일을 하나 작성하고 이를 분석해보겠다.

도커 컴포즈 파일은 편의 상 /Users/사용자명/Desktop/docker 폴더를 만들었다.

version: "3"
services:
  mysql000ex11:
    image: mysql:5.7
    networks:
      - wordpress000net1
    volumes:  #스토리지 마운트 설정
      - mysql000vol11:/var/lib/mysql
    restart: always  #컨테이너 종료 시 재시작 여부를 결정. 항상 재시작한다는 뜻이다.
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress000db
      MYSQL_USER: wordpress000kun
      MYSQL_PASSWORD: kunpass
  wordpress000ex12:
    depends_on:   #의존 관계 명시
      - mysql000ex11
    image: wordpress
    networks:
      - wordpress000net1
    volumes:
      - wordpress000vol12:/var/www/html
    ports:
      - 8085:80
    restart: always
    environment:  #환경 변수 설정
      WORDPRESS_DB_HOST: mysql000ex11
      WORDPRESS_DB_NAME: wordpress000db
      WORDPRESS_DB_USER: wordpress000kun
      WORDPRESS_DB_PASSWORD: kunpass
networks:
  wordpress000net1:
volumes:
  mysql000vol11:
  wordpress000vol12:

도커 컴포즈와 쿠버네티스에서는 컨테이너의 집합체를 서비스라고 부른다.

몇 가지 중요 포인트를 알아보자.

 

  • 컴포즈 파일은 제일 먼저 컴포즈 버전을 적고 그뒤로 services, networks, volumes(모두 주 항목)를 차례로 적는다.
  • 작성 요령은 주 항목 -> 이름 추가 -> 설정과 같은 순서로 생각하면 된다.
  • YAML 형식에서는 공백에 따라 의미가 달라지므로 탭은 의미가 없으며, 공백 두 개로 맨 처음 들여쓰기를 했다면 그 뒤로도 공백 두 개가 한단이 되도록 해야 한다.
  • services 등의 주 항목 아래에는 이름을 기재한다.
    컨테이너는 컨테이너 이름, 네트워크는 네트워크 이름, 볼륨은 볼륨 이름을 기재한다.
  • 항목 간의 상하 관계는 공백을 사용한 들여쓰기로 나타낸다.
  • 컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재한다.
  • 여러 항목을 기재하려면 줄 앞에 '-'를 붙인다.
  • 이름 뒤에는 콜론을 붙인다.
  • 콜론 뒤에는 반드시 공백이 와야한다. 바로 줄바꿈 하는 경우는 예외다.

도커 컴포즈 실행

컴포즈 파일을 작성했으니 도커 컴포즈 커맨드를 익히고 실행해보자.

도커 컴포즈는 docker-compose 명령을 사용한다. 일단 up, down, stop만 기억하자.

먼저 컴포즈 파일의 내용을 실행해보자.

docker-compose -f /Users/사용자이름/Desktop/docker/docker-compose.yml up -d

-d는 백그라운드에서 실행한다는 의미며 -f 옵션으로는 컴포즈 파일의 경로를 지정한다.

이미지를 Pull하느라 조금 오래걸렸다. localhost:8085로 접속하면 아래와 같은 화면이 뜬다. 실습 성공!

도커 컴포즈 명령어를 통해 컨테이너와 네트워크를 종료하고 싶으면 아래와 같은 명령어를 입력한다.

이미지는 삭제가 안되므로 별도로 지워야한다.

docker-compose -f /Users/사용자이름/Desktop/docker/docker-compose.yml down

이상으로 도커 컴포즈 단원 실습과 학습이 마무리 됐다.

참고 Dockerfile이란?

  • Dockerfile이란 이름만 보면 여러 가지 목적으로 사용할 수 있을 것 같지만 이미지를 만드는 것 밖에 할 수 없다.
  • 즉 도커 이미지 파일 정도의 존재다.
  • 도커 컴포즈는 컨테이너와 주변 환경을 생성한다. 네트워크와 볼륨까지 만들 수 있다.
  • Dockerfile 스크립트는 이미지를 만들기 위한 것으로 네트워크나 볼륨은 만들 수 없다.

이상으로 포스팅을 마칩니다. 감사합니다.

 

참고 자료

그림과 실습으로 배우는 도커 & 쿠버네티스

반응형

댓글