1. Docker Compose 란?
보통 도커에서 이미지 하나당 하나의 컨테이너를 만들어서 관리한다
이런 컨테이너를 연결하여 동시에 관리하는 툴이라고 볼 수 있다
2. Docker Compose 사용 및 용어정리
Docker Compose 는 .yaml 확장자의 파일을 작성하여 실행한다
JSON과 같이 Key, Value로 이루어져 있다
하지만 JSON과는 다르게 들여쓰기로 리스트를 구분한다
아래 예시는 3개의 노드와 elasticsearch, kibana 컨테이너 구성이다
예시)
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
ports:
- 9201:9201
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
ports:
- 9202:9202
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.7.1
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
1) version
- 파일 규격 버전
- 규격에 따라 지원 내용이 다르기 때문에 아래 링크를 참고하자
https://docs.docker.com/compose/compose-file/compose-versioning/
Compose file versions and upgrading
docs.docker.com
2) services
- 컨테이너 정의 (=container)
3) image
- 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정
- 도커에 존재하면 존재하는 이미지를 사용한다
- 만일 이미지가 도커에 존재하지 않으면 도커 허브에서 자동으로 내려받는다
4) environment
- docker run에 -env, -e 옵션과 동일한 역할, 엘라스틱 환경설정
- node.name : 노드이름
- cluster.name : 클러스터명 (클러스터명을 기준으로 노드가 join 한다)
- discovery.seed_hosts : 디스커버리 설정, 클러스터를 구성할 노드에 대한 정의
- cluster.initial_master_node : 마스터로 선출될 후보 노드 초기 세팅
- bootstrap.memory_lock : 엘라스틱이 사용할 메모리 Lock
- ES_JAVA_OPTS : jvm이 사용 가능한 힙 사이즈 결정
5) Ulimits
- 프로세스 지원 한도 설정
- memlock : 메모리 내 주소 공간의 최대 크기
(soft : 기본 적용 값, hard : soft에서 최대로 늘릴 한도)
6) volumes
- docker run에 -v 옵션과 동일한 역할
- 공유 볼륨 설정
- 호스트pc 폴더와 컨테이너 내부 폴더를 바인딩 하는것
7) port
- docker run에 -p 옵션과 동일한 역할
- 공유할 포트 설정 ( 로컬포트 : 컨테이너 포트)
8) networks
- 컨테이너간 네트워크의 분리를 위한 추가 설정 부분
- 대형 서비스가 아닌 이상 보통 하나의 네트워크 안에서 여러 도커를 씀
9) 이 외
restart : 컨테이너가 다운되었을 시 항상 재시작하라는 설정
depends_on : 해당 컨테이너가 생성되기 이전에 먼저 생성되야하는 도커 지정
links : 컨테이너 내부에서 다른 컨테이너에 접속하고 싶을때 사용하는 옵션
build : dockerHub에서 다운받은 이미지가 아닌 dockerfile 기반으로 컨테이너를 작성하고 싶을때 사용
3. Docker Compose 명령어
먼저 .yaml 파일이 있는 곳으로 이동한 뒤 명령어를 친다
1) 실행
1) docker-compose up
2) docker-compose up -d
// -d는 백그라운드에서 실행한다는 옵션이다
// 해당 옵션이 없으면 docker의 출력물만 나오고
// 다른 명령은 실행할 수 없게 된다
2) 이미지 재빌드
docker-compose up --build -d
3) 중지
docker-compose stop
4) 삭제
docker-compose down
5) 로그 확인
docker-compose logs
6) 실행 중인 docker compose의 docker-compose.yml 설정 확인
docker-compose config
7) 실행 중인 컨테이너에 명령어를 실행
docker-compose exec <컨테이너 이름>'DevOps' 카테고리의 다른 글
| [DevOps] Grafana Alert (0) | 2023.12.05 |
|---|---|
| [DevOps] 도커 네트워크 종류 (0) | 2023.07.19 |
| [DevOps] MobaXterm 설치 및 사용방법 (SSH 접속) (0) | 2023.06.26 |
| [DevOps] 리눅스란? CentOS vs Ubuntu (0) | 2023.06.21 |
| [DevOps] JMeter 사용 방법 (0) | 2022.12.09 |