도커의 등장
- 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경의 문제를 해결하기 위해 등장
* 기존 서버나 개발 환경이 변경되면 컴퓨터 셋팅(개발환경)등을 다시하거나 그 과정에서 발생하는 문제점들이 많았음.
그렇다면 도커란?
- 개발한 소프트웨어 유닛, 코드가 포함된 패키지 및 코드를 실행하는 종속성 들을 담을 수 있음
- 도커가 실행되는 모든 곳에서 이를 가져올 수 있음
- 동일한 환경에서 정확히 동일한 애플리케이션을 실행할 수 있음
- 결국 각 개발자 마다 개발 환경을 맞추기 위해 저장을 하는 것.
도커 이전의 문제점
문제점 1. 개발자들이 규모가 큰 환경에서 함께 개발을 할 때
- Node.js 14ver를 사용하였는데, 한동안 개발이 이루어지지 않다가 다른 개발자가 Node.js 16ver로 업데이트 하고 최신 버전에 맞춰 코드를 작성하였을 때 다른 개발자들의 환경에서는 돌아가지 않음. 이를 해결하기 위함.
문제점 2. 개인이 여러개의 프로젝트를 할 때 A프로젝트는 Node.js 14ver를 사용하고, B프로젝트는 Node.js 16ver를 사용한다면 프로젝트를 바꿀 때 마다 버전을 바꿔야함. 이를 해결하기 위함.
문제점 3. 도커를 사용하지 않는 경우 각각의 언어(React, Springboot, MySQL ,,, )로 만든 서비스의 배포 방식은 모두 다르다.
* 그러나 도커의 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스의 배포 과정이 동일해진다.
가상머신과 비슷하지 않을까?
가상머신 VS 도커&컨테이너
host operating System위에 얹어 짐 (가상머신, 도커)
가상머신도 환경을 담아 올릴 수 있음
가상머신 장점
1. 분리된 환경 생성
2. 그 안에 환경별 구성을 가질 수 있음
3. 모든것을 안정적으로 공유하고 재생산 가능
가상머신 문제점
1. 중복 복제, 즉 낭비되는 공간이 발생함
2. 호스트 시스템 위에 추가 시스템이 실행되기 때문에 성능이 나빠짐 - 실제로 이 시스템이 여러개 있으면 나빠짐
3. 재생산 및 공유가 가능하더라도 원하는 모든 시스템에 그 가상머신을 설정해야함, 정확히 동일한 방식으로 구성해야함. - 공유할 수 있는 단일 구성 파일이 없음.
4. 앱과 앱을 실행하는데 필요한 것만 캡슐화 하는 것이 아니라 컴퓨터 전체를 캡슐화함.
이를 해결하는 도커의 장점
- 운영체제와 시스템이 미치는 영향이 적음
- 속도가 빠름 (캐시 사용)
1. 도커의 이미지 빌드 결과는 캐시에 저장
2. 재 빌드시 캐시에 저장된 이미지 결과와 비교하여 같으면 "using cache" 함으로써 속도 up!!
- 최소한의 디스크 공간을 사용
* 사실상 컨테이너가 핵심 개념, 도커는 이를 만들고 관리하기 위한 표준도구 일 뿐
도커의 운영동작
Image와 Container
Image
- 뒤에서 컨테이너에 필요한 모든 논리와 코드를 보관하는데 사용.
- run명령어를 통해 이미지 인스턴스(컨테이너)를 만든다.
Image를 사용하는 방법 1
- 이미 생성되어 있는 Image를 가져와서 사용
* (Docker Hub에서 다운)
Image를 사용하는 방법 2
FROM을 통해 공식 베이스이미지를 가져온 후 그 위에 코드를 추가하여 자체적으로 Image를 custom하여 사용
* (자체 이미지 구축, 빌드)
Container
- 이미지를 기반으로 하는 실제로 실행중인 이미지 인스턴스
도커 컴포즈
여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
서버 배포 과정
프론트엔드, 백엔드, DB 등 다양한 서비스 개발
각각을 Docker를 이용하여 컨테이너로 변경
AWS에
컴파일과, 빌드, 배포의 차이
https://itholic.github.io/qa-compile-build-deploy/
[QA] 컴파일? 빌드? 배포? 개념과 차이는 무엇일까?
컴파일, 빌드, 배포의 개념 및 차이
itholic.github.io
CI/CD 젠킨스와 도커로 프로젝트 자동 배포하기
https://crispyblog.kr/development/common/8
Crispy's Blog
crispyblog.kr
CI/CD 방식
https://seosh817.tistory.com/104
[CI/CD] CI/CD란? - 지속적 통합(Continuous Integration)/지속적 배포(Continuous Deployment) 기본개념
매번 개발자가 코드를 수정하고 빌드와 테스트를 하고 배포까지 한다면 상당히 많은 시간이 소요됩니다. 하지만 git에 코드를 올리는 것만으로도 누군가가 빌드와 테스트, 배포까지 해준다면,
'개념공부 > Docker & Kubernetes' 카테고리의 다른 글
[Docker] Volumes, Bind Mounts 볼륨과 바인드마운트 - 컨테이너 데이터를 저장하는 기술 (0) | 2022.06.08 |
---|
댓글