Python/IDE, 버전관리, 도커

도커 컴포즈(Docker Compose) 뜻, 작성법 및 주의사항

frcn 2022. 9. 10. 23:38
반응형

1. Docker Compose 란

 

여러 개의 명령어를 하나의 yaml파일로 정리해서, 한번에 시스템 전체를 실행하고 종료와 폐기까지 시키는 방식.

 

- Dockerfile과의 차이점

Dockerfile은 하나의 이미지를 만드는 방법이고, Docker Compose는 컨테이너+환경설정, 네트워크, 볼륨을 한 번에 만드는 방식이다. Dockerfile에서는 네트워크와 볼륨 생성 및 설정이 불가능하다.

 

- 쿠버네티스와의 차이점

쿠버네티스는 컨테이너를 관리하는 도구이지만, 도커 컴포즈는 컨테이너를 생성하고 삭제하는 것 뿐이다. (관리 불가능)

 

- 설치

Window와 MacOS에는 이미 설치가 되어있기 때문에, 따로 설치할 필요가 없다. 리눅스는 설치해야 한다.

 

- 사용법

하나의 폴더에 docker-compose.yml이라는 이름의 파일을 생성한다. 이를 실행하면 하나씩 도커 명령어를 입력할 필요없이, 도커 컴포즈가 한번에 입력해서 실행해준다.

 

 

2. 작성법

#도커 컴포즈의 버전을 설정
version: "3"
#컨테이너들의 설정 내용
services:
  #이름:컨테이너1
  컨테이너1:
    #베이스이미지 설정
    image: mysql:5.7
    #네트워크 설정
    networks:
      - 네트워크이름
    volumes:
      - 볼륨 이름
    #환경변수 설정
    environment:
      MYSQL_ROOT_PASSWORD: root_pwd
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: pwd
    #포트 설정
    ports:
      - 포트설정
  #이름:컨테이너2
  컨테이너2:
    image: wordpress
    networks:
      - 네트워크
    volumes:
      - 볼륨
    ports:
      - 8000:80
#네트워크 설정
networks:
  네트워크이름1:
#볼륨 설정
volumes:
  볼륨1:
  볼륨2:
  
  
#출처 : https://docs.docker.com/compose/

 

 

위와 같이 작성하면 된다.

 

1. 첫 줄에는 도커 컴포즈 버전을 적는다.

2. 주 항목에는 services, networks, volumes가 있고, 들여쓰기를 해서 하위 항목들을 작성한다.

3. 들여쓰기는 몇 칸이든 상관은 없지만, 2칸으로 하기로 했으면 모든 내용들이 2칸으로 동일해야한다.

4. 이름 뒤에는 무조건 : 를 붙인다.

5. : 과 - 뒤에는 반드시 공백이 하나 있어야한다.(위의 예시 참고)

 

 

3. 실행법

#컨테이너, 볼륨, 네트워크를 생성하고 실행
docker-compse up {옵션값}

#컨테이너와 네트워크를 종료 및 삭제. 볼륨과 이미지는 삭제되지 않는다.
docker-compose down {옵션}

up의 옵션 (컨테이너, 네트워크, 볼륨을 생성)

옵션 내용
-d 백그라운드로 실행
--force-recreate 설정이나 이미지가 변경되지 않더라도 컨테이너를 무조건 재생성
--no-recreate 컨테이너가 존재할 경우, 다시 생성하지 않음
--no-build 이미지가 없어도 이미지를 빌드하지 않음
--build 컨테이너를 실행하기 전에 이미지를 빌드
--abort-on-container-exit 컨테이너가 하나라도 종료되면 모든 컨테이너를 종료
-t, --timeout 컨테이너의 종류 타임아웃 설정. 디폴트 10초
--remove-orphans 컴포즈 파일에 정의되지 않은 컨테이너를 삭제
--scale 스케일링(컨테이너를 여러개 실행)

 

down의 옵션 (컨테이너와 네트워크를 삭제)

옵션 내용
--rmi 옵션 컴포즈 종료 시, 이미지도 삭제. all로 하면 모든 이미지 삭제, local로 하면 태그가 없는 이미지만 삭제
-v, --volumes volumes 항목의 볼륨들을 삭제. external 볼륨은 삭제하지 않음.
--remove-orphans 컴포즈 파일에 정의되지 않은 서비스의 컨테이너도 모두 삭제

 

 

 

 

반응형