도커:compose

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2022년 7월 1일 (금) 10:48 판
둘러보기로 이동 검색으로 이동

개요

여러 컨테이너를 한번에 쌓아올려 이들을 한번에 관리할 때.

의존관계에 있는 컨테이너들을 관리할 때 사용한다.

설치

과정 설명 방법
버전 확인 최신 버전을 다음 링크에서 확인하자. https://github.com/docker/compose/releases
설치 위에서 얻은 버전을 우측의 명령에 적용하여 설치한다.
sudo curl -L "https://github.com/docker/compose/releases/download/설치버전/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
권한 설정
sudo chmod +x /usr/local/bin/docker-compose
확인 docker-compose -v

기초사용

기본적으로 해당 파일이 있는 곳에서 실행한다. 다른 곳에 있다면 -f 옵션으로 파일경로를 지정한다.

의도 설명 방법
컨테이너 생성, 실행
옵션 설명
-d 백그라운드에서 실행.
-f 파일 경로를 지정할 수 있다. docker-compose -f [파일경로]
docker-compose up -d
컨테이너 정지 컨테이너 일시정지. docker-compose stop
컨테이너 시작 docker-compose start
컨테이너 재시작 docker-compose restart
컨테이너 다운 compose파일과 관련 있는 컨테이너를 정지, 삭제시킨다. docker-compose down

기본내용

다음과 같은 형태로 크게 서비스, 네트워크, 볼륨을 정의한다.

version: '3'  # Compose정의파일의 버전. 소수점 안쓰면 최신버전.
services:
  서비스명:
    image: 이미지:태그  # 태그 안쓰면 latist
    buils: Dockerfile경로  # 안써도 됨. 상대경로 지정 가능. (./디렉토리)

  서비스명2:
    image: mariadb
    restart: always
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      
volumes:
  esdata:
    driver: local

yml 확장자의 파일로 쓰이는데, 들여쓰기로 계층구조를 나타낸다.

서비스

다음과 같은 형태로 계층화 하여 작성한다.

services:
  서비스명:
    image: 이미지:태그
요소 설명 방법
이미지 지정 (필수)

이미지를 지정한다. 태그를 안쓰면 latist.

image: 이미지:태그
컨테이너 이름 지정 compose 파일로 실행하면 이름을 자동으로 생성하는데, 이게 불편할 때 사용.
container_name: 컨테이너명
도커파일 지정 도커파일의 경로를 지정한다.

./하위디렉터리 형태로 상대경로로도 가능하다.


도커파일의 이름이 Dockerfile이 아닌 경우, 아래처럼 작성한다.

build: .  # 현재경로
build:
  context: ./하위디렉터리
  dockerfile: 파일명
포트열기 컨테이너가 공개하는 포트를 지정한다.

여러개를 열 수 있다.

ports:
  - 호스트포트:컨테이너포트
컨테이너 연결 별명(앨리어스)를 지정할 수도 있다.

연결해두면 해당 컨테이너에서 http://서비스명 형태로 접근 가능.

links:
  - 서비스명
  - 서비스명:앨리어스명
링크포트 열기 링크된 컨테이너 사이에서만 포트를 공유할 경우.
expose:
  - "포트번호"
의존관계 지정 시작 순서를 제어한다.(해당 컨테이너가 이용 가능할 때까지 기다리진 않는다.)
depends_on:
  - 의존하는서비스(ex.mysql)
환경변수 지정 컨테이너 안의 환경변수를 지정한다.

yes, no, true, false같은 bool연산자는 따옴표로 둘러싼다.

environment:
      변수명: 
      변수명2: 'yes'
환경변수 파일 지정 설정할 환경변수가 많거나, 보안과 관련된 경우, 파일만 따로 보관하기도 한다.

경로는 상대경로, 절대경로 둘 다 가능.

env_file:
    - ./경로1
    - ./경로2

볼륨

요소 설명 방법
볼륨 지정 호스트디렉토리를 컨테이너디렉토리에 덮어쓴다.

호스트디렉토리는 컨테이너가 사라져도 유지.

services:
  서비스명:
    volumes:
      - 호스트디렉토리/:컨테이너디렉토리
다른 컨테이너로부터 모든 볼륨 마운트
services:
  서비스명:
    volumes_from:
      - 컨테이너명