도커강의 정리본입니다.
도커
- 정의 : 컨네이너 기반의 오픈소스 가상화 플랫폼
- 어떤 문제를 어떻게 해결했는가.
- 서버를 관리한다는 것은, 복잡하다 ( 프로그램 설치 외에 인프라(서버환경)이나 개발환경이 바뀌는 경우)
- 도커가 등장하고 서버관리/개발 방식이 완전히 바뀌게 됨 )⇒ 컨테이너 방식
도커 컨테이너 생성 데모
- Jenkins 라는 애플리케이션 띄우기
- Jenkins : 자바로 만들어진 ci-cd 파이프라인 툴 얘를 설치하려면 자바를 설치하고 특정 설정 파일을 만들고 자바애플리케이션을 실행해야해야 실행되는데 밑의 명령어로도 실행이 가능
docker-compose up
- wordpress
- php로 만들어짐 블로그를하기 위한 도구
- 글을 저장하기 위한 데이터베이스 마이에스큐엘이 필요
- 그것들을 실행하는걸
- `docker-compose up`
- 한 서버에서 동일한 역할을 하는 프로그램을 여러개 띄우는게 쉽지않음
- 서버를 설치할때 특정 경로를 설정하는데 경로가 겹칠 수 있기 땜에 어려움
- rocket-chat
- 어떤 언어로 만들어진지 어떤 프로그램으로 설치되어있는지 모르는데 docker-compose up으로 실행 가능
서버 관리 방식의 변화
전통적인 서버 관리 방식 : 복잡
도커를 이용한 서버 관리 방식 : 모든게 컨테이너로 추상화됨
- 서로 다른 프로그램이지만 컨테이너라는 형태로 만들 수 있게 됨.
- 이는 어디서든 돌아감=컨테이너를 실행할 수 있음
- 가상머신 같은건지 ? ⇒ 반은 맞고 반은 틀림
- 공통점
- 독립적으로 실행 : 하나가 실행된다 해서 다른 컨테이너에 영향 X
- 차이점
- 도커가 가상머신보다
- 빠름
- 쉬움
- 도커 컴포즈 업 명령어 하나만 알아도 실행시킬 수 있음
- 효율적
도커의 등장
역사적 관점
중간에 어떤 버전이 바뀌면 버전을 업뎃 했을 때 어떤 일이 벌어질지 모름.
각각 단계마다 생길 문제를 또 예측해야함 어디서 문제가 생기면 와르르 무너짐
어떻게 도커가 등장 ?
결국 서버의 상태를 관리하기 위한 노력.
서버의 설치와 업뎃이 편리해야하기 때문
- 첫번째 시도 : 문서화
- 문제 : 문서가 좋더라도 다른 os에는 어떻게 적용해야할지, 모름
- 문서가 정확한지 모름
- 오류가 나면 어떻게 할지 모름
- 문서가 업뎃되면 어디 올려야할지 모르니 문서의 관리 문제
-
두번째 시도 : 상태관리 도구
- 상태관리도구란
- 리드미엠디처럼 설정파일로 관리. 프로그램을 돌리면 프로그램이 명령어를 넣듯 관리
- 설정 공유 가능
- 문서보다는 나음
- 코드라 협업 가능 버전관리 가능
- 문제
- 명령어가 다를 수 있음
- test를 서버 땜에 잘 못하는경우
- 버전마다 경로와 설정을 다르게 하는 경우 어려움
- 버전 관리 붏편
-
가상머신
- 가상머신을 관리할 서버를 만들고
- 서버에 가상머신들을 띄움
- 장점
- 여러개의 설치가 쉬움
- 현재 상태 저장 용이 → 언제든 재설치 가능
- ㅇ
- 문제
- 처음부터 재새팅 어려움
- 어떤식으로 만들어졌는지 모름
- 공유하기 어려움
- 파일의 크기가 큼
- 가상머신이라 속도 느림
-
자원격리
- 프로세스를 가상으로분리
- 파일, 디렉토리도 가상으로 분리
- 실제로는 같은 데인데 가상으로 분리되는 것 처럼
- cpu, memory, i/o 를 그룹별로 제한
- 장점 : 리눅스 기능을 이용한 빠르고 효율적인 서버 관리
- 가상머신이 아니면서 격리라는 기술을 사용하는거라서 굉장히 빠르고 효율
- 단점 : 리눅스의 가상화가(기술이) 어려움
-
도커의 등장
- 어렵고 복잡한 기술을 사용하기 쉽게
- 컨테이너를 통해 리눅스의 설치 및 사용을 쉽게 해줌
- 2013년에 DotCloud(현 Docker)에서 첫 공개한 컨테이너
- 격리된 환경에서 작동하는 프로세스 리눅스 커널의 여러 기술을 활용
- 하드웨어 가상화 기술보다 가벼움
- 이미지 단위로 프로세스 실행 환경을 구성
도커란
- 도커와 가상머신의 차이
- 도커는 격리만 해주기 때문에 성능 상으로 속도 하락이 거의 없음
도커의 미래
(컨테이너)의 미래
kubernetes