1강. 도커란?
개발만 잘하면 개발자 인가요?
궁극적으로는 네 맞습니다.
그런데 개발만 하고 개발환경 localhost로만 실행하면 그건 누가 사용하나요?
우리가 개발한 멋진 어플리케이션은 사용자들이 사용될 수 있게 운영, 서비스 되어야 합니다.
그건 운영팀이 하면 되잖아요.
네 맞아요. 서버구축, 인프라환경 구축 운영팀이 하면 되는데요. 개발자의 몫이기도 합니다.
여러분 고연봉 개발자가 되고 싶죠?
그럼 남들이 못 하는걸 해야죠. 여러분이 익히 듣는 고연봉 풀스택 개발자는 개발, 설계, 네트워크, 운영체제, 서버 운영 환경에 대한 지식까지 모두 갖춰야 합니다.
CI/CD (Continuous Integration/Continuous Delivery)
CI
서버에 빌드/테스트의 자동화 과정입니다.
CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration) 을 의미합니다.
CD
배포 자동화 과정입니다. CD는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment) 를 의미합니다.
CI/CD의 종류
- Jenkins
- CircleCI
- TravisCI
- Github Actions
등이 있습니다. 자바 어플리케이션은 Jenkins를 가장 많이 사용합니다.
CI / CD환경을 구축해주기 위해 필요한 개념으로 핫한 기술이 하나 있죠.
컨테이너 기반의 형상관리, 배포 도구인 도커입니다.
docker란
docker이전 운영환경의 가상화기술
기존의 가상화 기술인 가상머신(Virtual Machine) 은 하이퍼바이저(Hypervisor)를 이용해 여러개의 운영체제를 하나의 호스트에서 생성해서 사용하는 방식이었습니다.
하이퍼바이저 하드웨어에서 시스템의 운영 체제와 리소스를 분리해 VM에 할당하여 가상 머신을 생성하고 구동하는 소프트웨어입니다.
대표적으로 VMware가 있습니다.
기존 가상화 기술의 장점
독립적인 OS를 실행시킬 수 있음
기존 가상화 기술의 단점
(VM)가상머신이 하드웨어의 성능도 많이 사용하게 되고, 용량 자체가 커서 가상머신 만들고 배포하는 작업은 부담스럽습니다.
도커란?
도커(Docker) 는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리 기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다.
- 컨테이너 박스를 만들고 어플리케이션 구동에 필요한 OS, 라이브러리, 실행 파일 등등을 하나의 이미지로 묶어서 컨테이너에 배포하는 방식입니다.
- 이런 이미지로 만들었을 때 용량 또한 대폭 줄게 됩니다.
- 컨테이너는 각각 프로세스들의 서로 영향을 미치지 않고 독립적인 환경을 갖게 합니다**. (가상화 기술과 비슷)**
- 가상 머신은 하이퍼바이저와 OS를 부팅하는데 자원을 크게 사용하는데 반해, 도커는 호스트OS 위에서 가동되기 때문에 보다 가볍습니다.
docker설치
--docker는 리눅스 베이스다(리눅스 기반). 리눅스가 되어야 한다. 리눅스를 못하면 사용하는 의미가 없다.
--윈도우에 설치해도 가상머신을 설치하여 리눅스에서 돌아간다.
- 윈도우에 설치하기
- hub.docker.com 에서 계정생성
- 도커데스크탑 설치 https://docs.docker.com/desktop/install/windows-install/
- 도커가 설치시 Hypervisor, WSL2(윈도우서브시스템리눅스)가 필요, 체크하고 설치(리눅스 기반이라 윈도우 터미널로 동작이 불가능하다.)
- 리부팅
- WSL커널 업데이트 (도커는 리눅스 커널시스템을 기반으로 동작됨)
- reboot후에 WSL커널 업데이트가 필요 (필요시 창이 나옴)
- 링크로 들어가서 순서대로 실행 (1,2,3,4,5 단계 까지)
- docker를 재실행
- 설치 확인하기
- powershelll을 열어준다.
- docker version명령문을 실행.
- 우분투에 설치하기
https://docs.docker.com/engine/install/ubuntu/
- apt이용해서 패키지 다운
- 윈도우에 설치 vs 우분투에 설치
도커엔진설치
docker동작방식
하나의 컨테이너는 하나의 애플리케이션
- 레이어 < 이미지 < 컨테이너
컨테이너란?
컨테이너 하나는 애플리케이션 입니다 (권장 방식)
컨테이너는 이미지로 구성됩니다.
예시
- 데이터베이스 1개, 스프링백엔드 app 1개, react프론트 app1개 라면 3개의 앱 입니다. (컨테이너는 3개가 됩니다)
- 기존 어플리케이션 배포가 하나의 운영체제에 설치 했었습니다. (모놀리식 아키텍쳐)
- 컨테이너는 완벽히 isolate(독립)된 형태로 관리되고 운영 됩니다.
- CPU, 메모리, 디스크공간, 네트워크 등등이 완전히 독립된다. (서로 영향을 미치지 않는다)
이미지란?
--하나의 컨테이너는 여러 이미지로 이루어져 있다.
컨테이너를 생성할 때 필요한 요소입니다.
이미지는 레이어로 구성됩니다.
예시
- 스프링 동작되기 위해서 필요한 소스 코드들이 있습니다. (스프링프로젝트 이미지1)
- 스프링은 톰캣에서 동작합니다 (톰캣 이미지2)
레이어란?
레이어는 하나의 이미지를 구성하는 파일들입니다
이미지는 여러 개의 파일로 만들어집니다 (이 파일들을 각각의 레이어라고 보면 됩니다)
도커의 동작방식
Docker Client -> 도커를 설치하면 그것이 Client며 build, pull, run 등의 도커 명령어를 수행합니다.
DOCKER HOST -> 도커가 띄워져 있는 서버를 의미합니다. DOCKER_HOST에서 컨테이너와 이미지를 관리하게 됩니다.
Docker daemon -> 도커 엔진입니다.
Registry -> 외부(remote) 이미지 저장소입니다. 다른 사람들이 공유한 이미지를 내부(local) 도커 호스트에 pull할 수 있습니다. 이렇게 가져온 이미지를 run하면 컨테이너가 됩니다.
- public 저장소: Docker Hub (깃 허브와 비슷)
- private 저장소: AWS ECR 혹은 Docker Registry를 직접 띄워서 비공개로 사용하는 방법 등이 존재합니다.
도커는 기본적으로 리눅스 위에서만 돌아간다.
그럼 윈도우에서는 어떻게 실행되는가? - 가상머신을 이용해서 경량화 된 리눅스(도커호스트)를 설치한다.
리눅스 서버에서는 리눅스 자체가 도커호스트가 된다.
- 도커 호스트 위에서 도커엔진이 동작한다.
- 도커 호스트는 (리눅스에 도커데몬를 설치하고 running중인 상태) 이다.
- 도커 명령문(CLI) 를 내리면 도커데몬이 동작하게 된다.
- 도커데몬 위에서 각각의 컨테이너들은 동작된다. (HOST와 커널은 공유된다)
정리
선장 - docker client
컨테이너선 - docker host
갑판과 엔진 - docker demon
컨테이너 - docker container
컨테이너 안에 박스 - docoker image
'AWS' 카테고리의 다른 글
230331 Docker 3 (0) | 2023.03.31 |
---|---|
230330 Docker 2 (0) | 2023.03.30 |
AWS 230328 aws기초5 (0) | 2023.03.28 |
AWS 230327 기초4 (0) | 2023.03.27 |
AWS 230324 기초3 권한 (0) | 2023.03.24 |