1. 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환경을 구축해주기 위해 필요한 개념으로 핫한 기술이 하나 있죠. 컨테이너 기반의 형상관리, 배포 도구인 도커입니다.
2. Docker란
- docker이전 운영환경의 가상화기술
기존의 가상화 기술인 가상머신(Virtual Machine) 은 하이퍼바이저(Hypervisor)를 이용해 여러개의 운영체제를 하나의 호스트에서 생성해서 사용하는 방식이었습니다.
- 하이퍼바이저
하드웨어에서 시스템의 운영 체제와 리소스를 분리해 VM에 할당하여 가상 머신을 생성하고 구동하는 소프트웨어입니다.
대표적으로 VMware가 있습니다.
- 기존 가상화 기술의 장점
독립적인 OS를 실행시킬 수 있음
- 기존 가상화 기술의 단점
(VM)가상머신이 하드웨어의 성능도 많이 사용하게 되고, 용량 자체가 커서 가상머신 만들고 배포하는 작업은 부담스럽습니다.
- 도커란?
도커(Docker) 는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리 기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다.
- 컨테이너 박스를 만들고 어플리케이션 구동에 필요한 OS, 라이브러리, 실행 파일 등등을 하나의 이미지로 묶어서 컨테이너에 배포하는 방식입니다.
- 이런 이미지로 만들었을 때 용량 또한 대폭 줄게 됩니다.
- 컨테이너는 각각 프로세스들의 서로 영향을 미치지 않고 독립적인 환경을 갖게 합니다**. (가상화 기술과 비슷)**
- 가상 머신은 하이퍼바이저와 OS를 부팅하는데 자원을 크게 사용하는데 반해, 도커는 호스트OS 위에서 가동되기 때문에 보다 가볍습니다.
3. docker 설치
윈도우에 설치 vs 우분투에 설치
- 윈도우에 설치하기
- hub.docker.com 에서 계정생성
- 도커데스크탑 설치 https://docs.docker.com/desktop/install/windows-install/
- 도커가 설치시 Hypervisor, WSL2(윈도우서브시스템리눅스)가 필요, 체크하고 설치
- 리부팅
- WSL커널 업데이트 (도커는 리눅스 커널시스템을 기반으로 동작됨)
- 이전 버전 WSL의 수동 설치 단계 | Microsoft Learn
- reboot후에 WSL커널 업데이트가 필요 (필요시 창이 나옴)
- 링크로 들어가서 순서대로 실행 (1,2,3,4,5 단계 까지)
- docker를 재실행
- 설치 확인하기
- powershelll을 열어준다.
- docker version명령문을 실행.
- 우분투에 설치하기
https://docs.docker.com/engine/install/ubuntu/
- apt이용해서 패키지 다운
- 도커 엔진 설치
4. docker 동작 방식
레이어 < 이미지 < 컨테이너
https://seosh817.tistory.com/345
- 컨테이너란?
컨테이너 하나는 애플리케이션 입니다 (권장 방식) 컨테이너는 이미지로 구성됩니다.
예시
- 데이터베이스 1개, 스프링백엔드 app 1개, react프론트 app1개 라면 3개의 앱 입니다. (컨테이너는 3개가 됩니다)
- 기존 어플리케이션 배포가 하나의 운영체제에 설치 했었습니다. (모놀리식 아키텍쳐)
- 컨테이너는 완벽히 isolate(독립)된 형태로 관리되고 운영 됩니다.
- CPU, 메모리, 디스크공간, 네트워크 등등이 완전히 독립된다. (서로 영향을 미치지 않는다)
- 이미지란?
컨테이너를 생성할 때 필요한 요소입니다.
이미지는 레이어로 구성됩니다.
예시
- 스프링 동작되기 위해서 필요한 소스 코드들이 있습니다. (스프링프로젝트 이미지1)
- 스프링은 톰캣에서 동작합니다 (톰캣 이미지2)
- 레이어란?
레이어는 하나의 이미지를 구성하는 파일들입니다
이미지는 여러 개의 파일로 만들어집니다 (이 파일들을 각각의 레이어라고 보면 됩니다)
- 도커의 동작방식
https://seosh817.tistory.com/345
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
'TIL > Docker' 카테고리의 다른 글
day96-docker hub 저장소(feat.registry) (0) | 2023.03.31 |
---|---|
day96-docker volume (0) | 2023.03.31 |
day96-docker 네트워크 (0) | 2023.03.31 |
day96-dockerfile (0) | 2023.03.31 |
day96-docker (0) | 2023.03.31 |