결론부터 말하면 Compose는 단순히 여러 개의 컨테이너를 한번에 관리하는 것이고, 쿠버네티스는 클러스터 환경에서 컨테이너를 관리하기 위한 도구이다.
도커에서 자체적으로 제공한다.
yaml파일을 통해 업무를 구성할 수 있다(서비스, 네트워크, volume을 설정하여 구성)
docker-compose.yaml 작성과 활용, yaml 파일은 크게 버전, 서비스(컨테이너 이미지 목록), 볼륨, 네트워크 4가지 항목으로 구성된다.
도커 컴포즈는 yaml 파일은 탭(tab)을 인식하지 못하므로 2개의 공백을 사용하여 하위 항목을 작성한다.
version: '2.10'
services:
tomcat1:
image: tomcat1 //사용할 컨테이너 이미지 이름
container_name: tomcat3 ////컨테이너 이름을 정해야 name오류가 안뜸
ports:
- 8080:8080 //컨테이너 포워딩 설정
mysql2:
image: mysql2
container_name: mysql2
ports:
- 3307:3306
environment: //환경변수 설정
MYSQL_PASSWORD: root
윈도우 cmd의 현재디렉터리를 yml파일위치와 동일하게 하는 것을 권장
기본적으로 현재 디렉토리(윈도우cmd 의 현재위치) 또는 상위 디렉토리에서 docker-compose.yml 파일을 찾아 컨테이너를 생성하는데, -f 옵션을 이용해서 위치와 이름을 지정할 수도 있다.
docker-compose -f [파일경로] up -d
예시(cmd의 현재위치와 yml파일 위치가 같으면 -f옵션 생략가능)
docker-compose -f "C:\Users\docker-compose.yml" up
도커 컴포즈 컨테이너들 실행 $ docker-compose up -d
도커 컴포즈 컨테이너들 중지 $ docker-compose down
도커 컴포즈 컨테이너들 다시 시작하기 $ docker-compose restart
도커 컴포즈 컨테이너들 로그를 계속해서 읽기$ docker-compose logs -f
도커 컴포즈 컨테이너들 상태 확인 $ docker-compose ps
예시) docker-compose -f "C:\Users\docker-compose.yml" ps
도커 컴포즈 설정 확인 $ docker-compose config
Compose로 생성된 컨테이너에 접근과 사용은 이전과 동일하게 사용
services:
# 이런 container 를 만들건데..
my-mysql:
image: mysql:latest
container_name: my-mysql
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: test
ports:
- 3307:3306
volumes:
- /tmp/mysql:/var/lib/mysql
networks:
test1:
restart: always
back:
#image: dongmyounglee/spring-test
build: .
container_name: back
environment:
DB_USER: root
ports:
- 8081:8001
networks:
test1:
# my-mysql 이 start 될 때 까지 기다리겠다..
depends_on:
- my-mysql
# 꺼지면 항상 restart 하겠다.
restart: always
networks:
test1:
volumes:
back:
my-mysql:
compose 보다 각각의 container로 관리하는게 더 추천되긴함.
왜냐..
docker-compose 파일을 어디다둘까 ? git 에 올릴수도없고 ..
배포서버와 서비스서버가 있다고 치면
서비스 서버에 compose파일을 넣어놔야겠지? 그럼 서비스 서버 에서 작성을 해야한다.
배포서버에선 이미지 빌드하고 repo에 푸시하면 됨
서비스 서버는 compose만 실행하면 되고
로컬 개발할땐 Dokcerfile 만 있음되고..
서비스 서버에서 빌드된 이미지만 가져와서 container 실행하면 되는데 굳이 compose로 같이 엮을 이유가 있나.. ?
그리고 만약 수정이 되면 엮은거 다 다시 실행해야 하네 ?
서버건드렸는데 db가 reload 되야 하는 것 도 에러
컨테이너 이름도 다 같아야 하고, 종속도 많이 됨.
단점은 이정도 ..?
쿠버네티스는 크게 마스터(Master)와 노드(Node) 두 개의 컴포넌트로 분리된다. 마스터는 쿠버네티스의 설정 환경을 저장하고 전체 클러스터를 관리하는 역할을 맏고있고, 노드는 pod나 컨테이너 처럼 쿠버네티스 위에서 동작하는 워크로드를 호스팅하는 역할을 한다.
API서버를 이용하여 REST API를 통해 쿠버네티스의 기능을 제공하고 명령을 처리한다.
는 하나의 가상머신 또는 물리머신 이다.
node내에 존재하고 container여러 개로 구성되어있다.