Docker Container Build-up_ch03

윤일권·2022년 10월 26일
0

Docker Container Buildup

목록 보기
5/5

컨테이너 서비스👑

컨테이너 서비스란?

  1. 컨테이너 서비스는 기존 환경과 다르게 애플리케이션 실행에 필요한 바이너리, 라이브러니 및 구성 파일 등을 패키지로 묶어 배포하는 방식으로 논리적 패키징 메커니즘을 제공한다.
  2. 컨테이너는 OS와 SW등에 의존성 문제를 해결해준다.
  3. 운영체제 가상화 : HostOs를 공유하고 애플리케이션에 필요한 환경을 패키징하는 것
    • 하드웨어 레벨 가상화 : 하이퍼바이저 등을 이용한 가상머신의 방식 (Virtual Box/VM)
    • 운영체제 레벨 가상화 : 컨테이너 기반의 애플리케이션 서비스 방식 (Docker/Container)

왜 도커 컨테이너 서비스일까?

도커의 도입이 갖는 의미를 알기 전 도커 기반 애플리케이션 개발의 라이프사이클을 알아보자

1. 애플리케이션 코드 개발 
 - 특정 서비스 구동을 위한 애플리케이션 코드 및 웹 화면 구성 등을 위한 코드 개발.
2. 베이스 이미지를 이용한 Dockerfile 작성
 - 개발에 필요한 인프라 구성 요소를 Dockerfile에 작성한다.
 - 도커 허브를 통해 베이스 이미지를 다운로드하고 다양ㅇ한 구동 명령어와 1번에서 작성한 애플리케이션 코드,
   라이브러리, 여러 도구를 Dockerfile에 포함시킨다.
3. Dockerfile build를 통한 새로운 이미지 생성
 - docker build 명령을 통해 작성한 Dockerfile을 실행한다.
 - 각 단계별로 실행되는 로그를 화면에서 확인하며 이때 오류 발생 내용도 확인할 수 있다.
4-1. 생성된 이미지를 이용한 컨테이너 실행
 - 도커 명령어 docker images를 통해 생성된 이미지를 확인하고 이미지를 통한 컨테이너 구동을 한다.
5-1. 컨테이너 애플리케이션 테스트
 - 각 컨테이너 애플리케이션에 대해 정해진 테스트가 이루어진다.
 - ex : Nginx를 이용한 웹 애플리케이션 컨테이너 서비스였다면, 연결하는 IP와 포트 번호를 이용하여 
        웹 브라우저를 이용한 페이지 연결을 확인할 수 있다.
4-2. 도커컴포즈를 이용한 다중 컨테이너 실행
 - 도커 실행 옵션을 미리 작성한 docker-compose.yml을 통해 다중 컨테이너 간 실행 순서, 네트워크, 의존성
   등을 통합 관리할 수 있고 마이크로서비스 개발에 활용한다.
 - ex : 하나의 docker-compose.yml 파일이 아닌 여러 개의 .yml 파일로 구성된 서비스 개발도 가능하다.
5-2. 마이크로서비스 테스트
 - 5-1번과 마찬가지로 서비스를 테스트한다.
6. 로컬 및 원격 저장소에 이미지 저장(push)
 - 로컬 및 원격에 있는 이미지 repersitory에 생성한 이미지 저장(push)하여 다른 팀 간의 공유 및 지속적인
   이미지 관리를 수행한다.
7. 깃허브 등을 활용한 Dockerfile 관리
 - Dockerfile 코드를 깃허브사이트에 저장 및 관리 할 수 있고, 도커 허브와 연동하게 되면 자동 빌드화된
   빌드 기능을 이용한 이미지 생성도 가능하다.
8. 동일 환경에서의 지속적 애플리케이션 개발 수행 -> 1번
 - 1~7번 과정을 통해 업무용 애플리케이션 이미지를 지속적으로 개발, 운영 및 관리할 수 있다.

도커 기반 애플리케이션 개발의 라이프사이클을 살펴보았다.
여기서 살펴볼 것은 컨테이너 동작에 필요한 모든 내용을 사전에 코드로 작성하여 앤서블, 셰프, 베이그런트, 퍼핏과 같은 인프라 프로비저닝도구로 자동화 하게 되면 기업이 필요할 때마다 애플리케이션 및 서버 환경을 저비용에 빠르게 개발-배포-확장 할수 있다.
이를 **IaC(코드로서 인프라 스트럭쳐)라고 한다.

자. 또 이상한 단어가 튀어나왔다.
앤서블 :  여러 개의 서버를 효율적으로 관리할 수 있게 해주는 환경 구성 자동화 도구
셰프 : 일일히 수작업으로 인프라 리소스를 설정/관리하는 대신 코드를 이용하여 이러한 활동을 자동화 시켜주는 
      구성관리도구
베이그런트 :  포터블 가상화 소프트웨어 개발 환경(ex : VM웨어, Docker 등)의 생성 및 유지보수를 위한 
            오픈 소스 소프트웨어 제품의 하나
퍼핏 : 오픈 소스 소프트웨어 형상 관리 도구의 하나
프로비저닝 :  IT 인프라를 설정하는 프로세스.

즉 이러한 단어들을 자세히 들여다보면, IaC라는건 코드로 여러 개발 인프라를 구축하여 자동화하는 것으로 
저비용에 빠르게 개발-배포-확장 할 수 있는 장점을 지닌것으로 생각해보자.

즉 이러한 IaC를 통해 개발에 대한 모든 인프라 구성 요소를 하나하나 수동으로 할 필요 없고, 변경 불가능한 인프라환경에서 언제든 동일한 상태로 개발이 가능하다.
또한 패치나 릴리스버전업 등의 작업을 새로운 이미지를 생성하여 신규 인프라 서버로 사용 가능하기도 하다.

때문에 위와 같은 이유는 수동으로 작업하고 하나하나 빌딩하는 것에 비해 효울적 시간적 비용적 모든 부분에서 이득을 얻을 수 있다. //22.10.26

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글