[Docker] 도커와 컨테이너 기술
도커는 컨테이너 기술을 사용해 애플리케이션의 실행 환경을 구축하는 플랫폼이다.
컨테이너는 호스트 운영체제 상에 애플리케이션을 작동시키는데 필요한 요소들을 모아서 별도의 서버인 것 처럼 동작하는 것을 말한다.
컨테이너 기술을 사용하지 않으면 여러 애플리케이션들이 같은 시스템 리소스를 사용하기 때문에 미들웨어나 라이브러리의 버전이 다른 경우는 각 애플리케이션이 서로 영향받을 수 있다.
하지만, 컨테이너를 도입하면?
호스트 운영체제의 리소스를 분리시키고, 여러 컨테이너가 사용해 시스템 리소스를 각 애플리케이션들이 독점적으로 점유하고 있는 것 처럼 보이게 할 수 있다.
도커는 애플리케이션의 실행에 필요한 환경을 이미지로 취합하고, 그 이미지를 활용해 다양한 환경에서 애플리케이션의 실행 환경을 구축한다.
이미지를 템플릿으로 컨테이너를 생성하고, 인프라 환경을 컨테이너로 관리한다.
좌측은 기존 시스템 개발 흐름이고, 우측은 컨테이너 기술을 도입한 후의 시스템 개발 흐름이다.
도커는 서버 가상화 기술으로, 하나의 서버에서 애플리케이션들이 독자적인 세팅으로 작동될 수 있도록 한다.
이미지는 애플리케이션의 실행에 필요한 파일들이 저장된 디렉토리이다.
Docker 명령을 사용해서 이미지를 만들 수 있지만, CI / CD를 고려하면 Dockerfile이라는 설정 파일을 만들어 자동으로 이미지를 만드는 방법을 사용하는 편이 합리적이다.
이미지는 겹쳐서 사용할 수 있다.
A 애플리케이션을 사용할 때 a 환경이 필요하고, AB 애플리케이션을 사용할 때 a와 b환경이 필요하다고 해 보자.
a 환경은 이미지1로 구축하고 b환경은 이미지2로 구축 해 놓으면 AB 애플리케이션을 작동할 때 필요한 환경은 이미지1과 이미지2를 겹쳐서 구축할 수 있다.
즉, 이미지를 겹쳐서 하나의 이미지를 만들 수 있으니, 이를 활용해 효율이 좋은 이미지를 만드는 편이 좋다.
이미지를 만들 때는 Layer기반 Dockerfile 스크립트가 사용된다.
스크립트를 반복해서 실행할 때 전과 비교해서 변경된 내용이 없다면 캐시된 결과를 사용하지만, 수정된 부분이 있다면 그 부분부터 새로 빌드한다.
Dockerfile의 각 명령어들은 레이어를 생성하고, 한 번 만들어진 레이어는 캐시돼 재사용 할 수 있다.
FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 80
CMD ["node" "server.js"]
따라서 최적화 할 수 있다.
소스코드가 수정되더라도 항상 npm install을 피하도록 하기 위해 package.json을 미리 복사하고 npm install을 수행한다.
이렇게 작성해두면 소스코드 수정이 있더라도 COPY . /app 부터 실행할 수 있어 효율적이다.
따라서 스크립트를 작성할 때 잘 수정되지 않는 부분을 앞으로 옮기는 편이 합리적이다.
Dockerfile의 스크립트를 작성할 때는 최적화를 고려해서 작성하고, 다른 환경에서도 애플리케이션을 배포할 수 있도록 이식성 있는 이미지를 만들자.
Docker Hub에는 다양한 이미지가 업로드 돼 있으니 적절한 이미지를 찾아서 사용하고, 도커를 통해 협업하는 경우 만든 이미지를 업로드하고 허브에 push하고 팀원들이 pull 받아서 개발하는 방식을 사용하자.
도커 허브에서도 최적화가 적용되는데... 한 번 pull 받은 이미지는 로컬 시스템에 캐시돼 run 명령어로 즉시 해당 이미지 기반 컨테이너를 실행할 수 있다.
run을 수행할 때 먼저 로컬 시스템의 캐시 이미지를 탐색하고, 이미지가 없는 경우 원격에서 이미지를 pull로 가져온다.
컨테이너가 독립된 환경에서 실행될 수 있도록 하기 위해 도커는 namespace개념을 사용한다.
(C++에서는 이름 충돌을 방지하기 위해 namespace를 사용했다)
'DevOps > Docker && Kubernetes' 카테고리의 다른 글
[Docker] Dockerfile 프로젝트 배포하기 (2) | 2023.12.06 |
---|---|
[Docker] Docker Compose (0) | 2023.03.24 |
[Docker] 도커 파일 시스템과 볼륨 (0) | 2023.03.09 |
[Docker] 도커 활용하기 (0) | 2023.03.08 |
[Docker] 시스템 기초 지식 (0) | 2023.03.06 |
댓글
이 글 공유하기
다른 글
-
[Docker] Docker Compose
[Docker] Docker Compose
2023.03.24 -
[Docker] 도커 파일 시스템과 볼륨
[Docker] 도커 파일 시스템과 볼륨
2023.03.09 -
[Docker] 도커 활용하기
[Docker] 도커 활용하기
2023.03.08 -
[Docker] 시스템 기초 지식
[Docker] 시스템 기초 지식
2023.03.06