티스토리 뷰
Docker
- 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
- 다른 도구와 마찬가지로 어떤 문제를 해결하기 위해 만들어 졌다.
서버를 관리 한다는 것은 무엇인가?
- 복잡하다. 서버 안의 무엇 하나라도 문제가 생기면 출력이 되지 않는다.
- 서버에서 무언가 설치하거나, 수정하는데에 제대로 되지 않는 경우가 많다.
- 인프라가 계속 바뀔 수 있다. (AWS -> AZURE -> Google Cloud 등)
- 개발환경이 바뀔 수 있다.(node.js -> spring 등)
도커가 등장하고 서버관리/개발 방식이 완전히 바뀌게 되었다.
Docker는 어떤 문제를 해결했나?
- 서버관리 방식의 변화
- 어떤한 프로그램도 컨테이너로 만들 수 있다.
- 컨테이너를 하나 만들어두면 어디서든 잘 돌아간다.
가상머신 같은건가?
- 반은 맞고 반은 틀리다.
- 가살머신처럼 독립적으로 실행되지만
- 가상머신보다 빠르고
- 가상머신보다 쉽고
- 가상머신보다 효율적이다.
Docker의 등장
- 도커가 등장하기 전 서버 운영

- 어디서 문제가 생기면 제대로 돌아가지 않는다.
-> 서버의 상태를 관리하기 위한 노력
1. 첫번째 시도
- 서버배포.pptx 문서 만들기
-> 버전이 바뀌거나 os가 바뀌면 안된다. 등등 문서만 보고 하기엔 어려움
2. 두번째 시도
- 서버 문서
->센트os, 우분트 버전관리 어려움, 작성의 난이도가 어려움
3. 세번쨰 시도
- 가상머신으로 각각 어플리케이션을 띄운다.
-> 만들어진 히스토리 파악이 어렵다. 속도 저하.
4. 자원격리
- 프로세스 > 가상으로 분리
- cpu,memory,I/O > 그룹별로 분리
- 리눅스 기능을 이용한 빠르고 효율적인 서버 관리
-> 사용하기가 너무 어려움..
-> 어려운 복잡한 기술을 쉽게 만든것이 Docker!
도커의 등장
2013년에 DotCloud(현 Docker)에서 첫 공개
컨테이너 : 격리된 환경에서 작동하는 프로세스
리눅스 커널의 여러 기술을 활용
하드웨어 가상화 기술보다 가벼움
이미지 단위로 프로세스 실행 환경을 구성
도커란?

- overhead부분이 속도를 저하시킨다.
- 도커는 격리만 한다.
도커의 특징 - 확장성/이식성
- 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음
- 특정 회사나 서비스에 종속적이지 않음
- 쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편함
- 무료임..ㅋ
도커의 특징 - 표준성
- 도커를 사용하지 않는 경우 ruby, node.js, go, php로 만든 서비스들의 배포 방식은 제각각 다름
- 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해짐
- capistrano?, fabirc? ftp ? ㅂㅂ
도커의 특징 - 이미지
- 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요
- Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능
- 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러옴
도커의 특징 - 설정관리
- 설정은 보통 환경변수로 제어함
- MYSQL_PASS = password와 같이 컨테이너를 띄울 때 환병변수를 저장해서 사용
- 하나의 이미지가 환경별수에 따라 동적으로 설정파일을 생성하도록 만들어져야함
도커의 특징 - 자원관리
- 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화 됨
- 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요
- 세션이나 캐시를 memcached나 redis와 같은 외부로 분리
도커가 가져온 변화
- 클라우드 이미지보다 관리하기 쉬움
- 다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 (거의) 업승ㅁ
- 복잡한 기술(namespace, cgroups, network, ..)을 몰라도 사용할 수 있음
- 이미지 빌드 기록이 남음
- 코드와 설정으로 관리 > 재현 및 수정 가능
- 오픈소스 > 특정 회사 기술에 종속적이지 않음
도커의 미래 (컨테이너의 미래)
- kubernetes
- 여러대의 서버와 여러개의 서비스를 관리하기 쉽게
스케줄링
- 컨테이너를 적당한 서버에 배포해 주는 작업
- 여러 대의 서버 중 가장 할일 없는 서버에 배포하거나 그냥 차례대로 배포 또는 아예 랜덤하게 배포
- 컨테이너 개수를 여러 개로 늘리면 적당히 나눠서 배포하고 서버가 죽으면 실행 중이던 컨테이너를 다른 서버에 띄워줌
클러스터링
- 여러 개의 버러를 하나의 서버처럼 사용
- 작게는 몇 개 안 되는 서버부터 만헥는 수천 대의 서버를 하나의 클러스터로
- 여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것처럼 쉽게 통신
서비스 디스커버리
- 서비스를 찾아주는 기능
- 클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없고 다른 서버로 이동 할 수도 있음
- 따라서 컨테이너와 통신을 하기 위해서 어느 서버에서 실행 중인지 알아야 하고 컨테이가 생성되고 중지될 때 어딘가에 IP와 Port같은 정보를 업데이트 해줘야 함
- 키-벨류 스토리지에 정보를 저장할 수도 있고 내부 DNS서버를 이용
'dev > docker 정리' 카테고리의 다른 글
Docker 이미지 만들기 (0) | 2024.04.29 |
---|---|
Docker compose (0) | 2024.04.29 |
Docker 기본 명령어 volume(-v) (0) | 2024.04.29 |
Docker 기본 명령어 - Run 컨테이너 실행 (1) | 2024.04.28 |
Docker 설치하기 (0) | 2024.04.28 |
- Total
- Today
- Yesterday
- jpa api
- 백엔드 개발자 역량
- BindingResult
- 스프링부트
- react실행
- Intercepter
- 항해플러스
- 예외처리
- 백엔드 개발자 공부
- 항해99
- filter
- ArgumentResolver
- 인터셉터
- thymleaf
- 향해플러스백엔드
- HTTP
- 향해플러스
- reject
- hypertexttransferprotocol
- exception
- React
- 로그인
- 리터럴
- JPA
- SpringBoot
- 컨트
- 스프링공부
- rejectValue
- 향해99
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |