이제는 소프트웨어 엔지니어 또한 docker를 이용하여 실제 환경과 Test환경을 똑같게 만들어 작업을 한다 

지금까지 docker를 사용해 왔지만 자세하고 세부적인 내용은 공부하지 않았다.

docker를 자세히 파악하여 더욱 다양한 방식으로 사용하기 위해 공부를 하자

 

1. 시스템 기반의 구성 요소 

  • 하드웨어 : 시스템 기반을 구성하는 물리적인 요소 (전원장치, 스토리지, 건물, 공조, 보안 설비, 소화 설비)
  • 네트워크 : 시스템 이용자가 원격지에서 엑세스 할 수 있도록 서버들을 연결하기 위한 요구사항(라우터, 스위치,)
  • OS         : 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어(Windows, Ubuntu, CentOS)
    • 하드웨어 리소스나 프로세스를 관리 
    • 서버용 OS도 존재 - 장시간 가동해도 안정적, 대량의 데이터 효율적 수행
  • 미들웨어 :서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어(MySQL, NGINX, DB)

2. 시스템의 이용 형태 

  • 온프레미스(On-premises) : 자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지를 모두 수행하는 형태
  • 퍼블릭 클라우드 : 인터넷을 경우하여 불특정 다수에게 제공되는 클라우드 서비스
  • 프라이빗 클라우드 : 특정 기업 그룹에게만 제공되는 클라우드 서비스
  • 트래픽의 변동이 많거나 백업을 반드시 해야하는 시스템의 경우 클라우드를 이용하여 확장성을 확보할 수 있다
  • 클라우드를 이용하면 비즈니스의 설립부터 서비스까지 릴리즈 시간을 줄일 수 있다. 

3. Linux

  • linux kernel : OS의 코어가 되는 부분, 메모리 관리, 파일 시스템, 프로세스 관리, 디바이스 제어 등 OS로서 하드웨어나 어플리케이션 소프트웨어를 제어하기 위한 기본적 기장을 잦고 있는 소프트웨어 
    • 디바이스 관리 : 디바이스 드라이버라는 소프트웨어를 이용하여 하드웨어 제어
    • 프로세스 관리 : 명령을 실행할 때 해당 프로그램 파일에 쓰여 있는 내용을 읽어 들여 메모리상에 전개한 후 메모리상의 프로그램을 실행함 = 프로세스 
    • 메모리 관리 : 프로그램과 데이터를 물리 메모리에 효율적으로 할당 
      - 메모리의 제한이 있으므로 하드디스크와 같은 보조기억장치에 가상 메모리 영역을 생성 = Swap memory
      - 메모리상에 전개된 이용 빈도가 낮은 데이터를 Swap으로 보내고 Swap상의 데이터를 다시 메모리로 돌림
    • Shell : 사용자가 내린 명령을 커맨드로 받아 kernel에 전달(bash, csh, tcsh, zsh)
      - 어플리케이션 실행, 정지, 재실행
      - 환경변수 관리
      - 명령 히스토리 관리
      - 명령 실행 결과 표시 및 파일 출력
    • 파일 시스템 : VFS(Virtual File System)라는 장치를 사용하여 데이터가 어디에 있던(하드, USB, network) 사용 가능
  • Linux distribution( 리눅스 배포판) : 보통 Linux는 배포판이라는 형태로 패키지화 되어 배포됨 ( Ubuntu, Debian, Fedora, CentOS)
  • Linux 파일 구성 
    /bin 기본 커맨드 ( ls, cp. mv 등 )
    /boot OS 시작에 필요한 파일 (커널이 해당 폴더의 vmlinuz라는 파일이다)
    /dev 디바이스 파일 ( /dev/had = 하드 , /dev/ttf = 표준입출력이 되는 단말 디바이스)
    /etc 설정 파일 ( IP, 사용자 비밀번호)
    /home 사용자 홈 디렉토리
    /lib 공유 라이브러리 
    /mnt 파일 시스템의 마운트 포인트용 디렉토리
    /media CD/DVD-ROM의 마운트 포인트
    /opt  어플리케이션 소프트웨어 패키지
    /proc 커널이나 프로세스에 관한 정보 (해당 폴더 아래있는 숫자 폴더는 프로세스ID를 뜻함, cpuinfo = CPU 정보, partitions = 디스크 파티션 정보)
    /root root용 홈 디렉토리
    /sbin 시스템 관리용 마운트
    /srv 시스템 교유의 데이터
    /tmp 임시 디렉토리
    /usr 각종 프로그램이나 커널 소스를 놓아두는 디렉토리 
    /var 로그나 메일 등 가변적인 파일을 놓아두는 디렉토리 ( /var/log = 가동 로그, /var/spool = 어플리케이션 임시 파일로 사용하는 스풀이 저장)

4. IaC (Infrastructure as Code)

  • Immitable Infrastructure : 클라우드를 이용함으로써 논리적으로 인프라를 재구성 할 수 있기 때문에 인프라의 변경 이력을 관리할 필요가 줄어듬 - 지금 있는것만 확인하면 됨 
  • 기존에는 파라미터 시트(버전 정보와 설정 항목의 설정 값이 쓰여있는 시트)를 토대로 수동으로 작업했지만 code를 이용하여 자동화 할 수 있다
  • Continuous integration : Code로써 인프라를 관리하기 때문에 Git등의 CI툴을 이용하여 인프라의 구조를 협업하기 편함( commit message, docker file)

5. 인프라 구성 관리 툴

  • OS의 시작을 자동화 : Red Hat 계열에서 사용가능한 KickStart, Local PC에 가상환경을 만들기 위한 Vagrant
  • OS나 미들웨어의 설정을 자동화 : DB server, web server, 감시 에이전트 등과 같은 미들웨어의 설치나 버전 관리, OS의 /etc 아래있는 설정 파일이나 방화벽 설정 자동화 - Chef, Ansible, Itamae, Puppet
  • 여러 서버를 관리하는 자동화 : 컨테이너 오케스트레이션의 사실상 표준이 된 Kubernetes
  • CI(Continuous Integration) : 코드를 추가 및 수정할 때마다 테스트를 실행하여 확실하게 작동하는 코드를 유지하는 방법, 사양서에 정해진 대로 작동하는지를 확인 - Jenkins, Git
  • CD(Continuous Deploy) : 지속적 배포 - 기능을 추가할 때마다 어플리케이션을 제품 환경에 배포
    - 배포에서 가장 중요한 점은 서비스의 연속성이다 서비스가 중지되면 안된다
    - Blue Green deploy - 버전1서버을 블루 버전2서버를 그린라고 했을 때 블루를 서비스하면서 그린을 테스트하여 성공하면 그린을 서비스하고 블루를 종료 - 자연스러운 변경이지만 클라우드 환경이 아니라면 어려움

'infra > docker' 카테고리의 다른 글

(3) docker - 기본 명령어  (0) 2021.09.09
(2) docker - Container 기초  (0) 2021.08.29

+ Recent posts