일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘공부
- nestjs공부
- Axon framework
- 기술면접공부
- K8S
- 코테준비
- 플러터 개발
- 스프링공부
- 스프링
- 자바공부
- 카프카
- 프로그래머스
- 코테공부
- JPA예제
- 자료구조공부
- querydsl
- Kafka
- nestjs스터디
- 스프링부트
- JPA스터디
- 스프링 공부
- nestjs
- JPA 공부
- JPA공부
- 기술공부
- Flutter
- DDD
- 플러터 공부
- 스프링부트공부
- JPA
- Today
- Total
DevBoi
[Docker] Docker 의 기초와 Swarm에 대해서 본문
도커는 우선 뭐 잘 알다 싶이 컨테이너 기술이다.
Docker 에 대한 기본적인 장점과 구조를 알고싶다면 아래글을 먼저 보고오는 것을 추천한다.
https://devboi.tistory.com/472
우선 다음으로는 Docker의 기본적인 명령어와 Swarm과 관련된 공부를 해보자
1. Docker 기본 명령어 및 기본 지식
<이미지 관련>
- docker images : 도커이미지 목록 보기
- docker search [이미지 이름] : 도커이미지 검색
- docker pull [이미지 이름 : 버전] : 도커 이미지 다운
- docker rmi [이미지id] : 도커 이미지 삭제
- docker rmi -f [이미지 id] : 도커 이미지 id 기반 컨테이너도 강제 삭제
<프로세스 및 컨테이너 실행 관련>
*docker ps : 현재 도커에서 실행중인 프로세스를 확인할 수 있다. -a 옵션을 붙이면 전체를 볼수 있다.
가끔 docker에서 컨테이너를 띄우다가 내부 오류로 재시작을 하거나, 종료가 된것을 볼 수 있다.
해당 사항에 관련된 컨테이너는 해당 옵션을 붙여야 확인이 가능하다.
- docker run [options] [image:version] [Command] [arg...]
예를 들어서, docker run -i -t --name server ubuntu:latest /bin/bash
server라는 이름으로 ubuntu의 최신버전을 띄운다.
사실 단순히 컨테이너를 띄우는 용도, 혹은 도커를 run시킬 목적이라면 개인적으로
docker run -itd --name [지정할 컨테이너 이름] [이미지id] 만 해도 충분하지 않나싶다
아래 3개는 단순히 컨테이너를 시작,중지,재시작 하는것이다. 물론 run과 start는 같아 보일수 있지만
만약에 stop을 한 이후에는 해당 컨테이너를 start해주어야 한다.
- docker start [컨테이너 id,name]
- docker restart [컨테이너 id]
- docker stop [컨테이너 id]
- docker rm [컨테이너 id] : 컨테이너 삭제
- docker rmi [이미지 id] : 도커 이미지 삭제
2. 도커 Swarm (도커 스웜)
1) Node
텍스트 클러스터에 속한 도커 서버 단위, 보통 한 서버에 하나의 도커 데몬을 실행하기 떄문에
노드는 곧 서버라고 이해할 수 있다.
2) Manager
매니저는 클러스터의 상태를 관리한다.
명령어는 매니저 노드에서만 실행할 수 있다.
아키텍쳐상에서 매니저는 고가용성을 위해, 여러대 실행되어야 한다.
노드마다 매니저가 배포를 한다.
- 클러스터 상태유지 - 뗏목 합의 알고리즘을 이용해 서비스들이 일관된 상태를 유지할 수 있도록 한다는데. 이부분은 나중에 자세히 보도록하자. 무튼 , 복구를 위해, 유지하기 위해서는 여러대가 유리하고, 최대 7대가 적절하다
- 스케줄링 서비스
- 스웜모드 제공 (docker swarm init)
3) Worker
- 도커에서 일반적으로 컨테이너를 실행하는 노드를 작업자 노드라고 한다.
- 매니저의 명령을 받아 컨테이너를 생성하고 상태를 체크한다.
- 반드시 하나 이상의 관리자 노드를 가져야한다.
- worker의 상태는 drain,active한것으로 나뉘는데, 매니저는 active한 노드에게만 task를 할당한다.
4) Service Discovery
컨테이너의 실행위치와 상태를 제공해준다.
이를 위해 자체 DNS서버를 가지고 있다.
컨테이너를 생성하면, 서비스명과 동일한 도메인을 등록하고, 멈추면 도메인을 제거한다.
Swarm이 재부에서 자체적으로 처리해준다.
Swarm명령어
Swarm의 기본생성단위는 컨테이너가 아닌, 서비스이다.
- 도커 스웜 시작
docker info (swarm mode 확인)
docker swarm init - 매니저 노드 확인 및 지정
docker node ls - Service 생성,확인,로그,삭제
docker service create [이미지:버전]
docker service create --name [service Name] [이미지:버전]
docker service ps [Servicename]
docker service logs -f smith
docker service rm [serviceName]
docker service update [servicename] --replicas [수] - worker노드 상태 변경(drain,active)
docker swarm init --advertise-addr <매니저 노드 ip주소>
-해당 명령문은 플래그로 지정된 주소의 호스트를 새로운 클러스터의 매니저 노드로 지정하여 활성화시킬 수 있다.
초기 매니저 노드에서 init을 했다면 다른 노드에서는 그냥 swarm join만 해주면 된다. - docker swarm join --token <token값> 매니저 노드
worker용, manager용 토큰이 다르다,
토큰은 manager노드에서 토큰을 발급 받으면 되는데,
docker swarm join-token manger을 실행하면 매니저용 토큰
docker swarm join-token worker를 하면 워커용 토큰이 나온다.
무튼 이렇게 해서, 해당 join을 하게 되면 스웜에 참여할 수 있다. - swarm노드들 배포
- Stack
- Stack을 분류하는 법
Swarm ingress network (오토스케일은 제공하지 않음)
'Infra > [K8S & Docker]' 카테고리의 다른 글
[k8s] 쿠버네티스 (0) | 2023.05.19 |
---|---|
[k8s] kubectl 명령어 모음 (0) | 2023.05.14 |
Docker compose ip 고정하는법 (0) | 2023.03.02 |
[k8s] 공부 내용 정리 (0) | 2023.02.21 |
[Kubernetes] Api-server RestApi 호출 1부 (0) | 2023.01.17 |