[Docker] 1.도커의 기초 - 도커를 사용하는 의의

책 ‘도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문’을 기반으로 공부 한 내용을 정리

  • 사용 의의
    • 변화하지 않는 실행 환경으로 멱등성 확보
      • 환경 차이로 인한 문제 방지
        코드로 관리하는 인프라(Infrastructure as Code)와 불변 인프라(Immutable Infrastructure) 개념 제안
        • 코드로 관리하는 인프라(Infrastructure as Code)
          • 코드 기반으로 인프라를 정의
          • 서버 구성과 라이브러리 및 도구 설치를 코드로 정의 후 셰프(Chef)나 앤서블(Ansible) 같은 프로비저닝 도구로 서버를 구축
          • 코드 중심으로 바꿈으로써 쉽게 같은 구성의 서버 여러대 복제 가능

            그러나, 코드 기반으로 인프라 구축을 관리해도 멱등성 보장을 위해 항구적 코드를 계속 작성하는 것은 효율성이 낮기 때문에 불변 인프라 개념을 도입

        • 불변 인프라(Immutable Infrastructure) 개념
          • 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념
          • 제대로 설정된 상태의 서버를 항상 사용 할 수 있다는 장점 보유
    • 코드를 통한 실행 환경 구축 및 애플리케이션 구성
      • 애플리케이션 구성 관리의 용이성
        필요한 컨테이너를 각각 실행하는 방법으로 시스템을 구성
      • 도커 컨테이너 오케스트레이션 시스템
        여러 서버에 걸쳐 있는 여러 컨테이너를 관리하는 기법
      • 도커 컴포즈(Docker Compose)
        여러 컨테이너를 사용하는 애플리케이션을 쉽게 관리하도록 해줌.
        yaml 포맷으로 작성된 설정 파일로 컨테이너를 정의하거나 컨테이너 간의 의존 관계를 정의해 시작 순서 제어 가능
        version: "3"
        services:
            web:
                image: gihyodocker/web
                ports:
                    - "3000:3000"
                environment:
                    REDIS_TARGET: redis
                depends_on:
                    - redis
            redis:
            image: "redis:alpine"
      
      • 도커 스웜(Docker Swarm)
        도커 컴포즈가 단일 서버를 넘어 여러 서버에 걸쳐 있는 여러 컨테이너를 관리할 수 있도록 한 도구
        컨테이너 증가 혹은 감소는 물론이고 노드의 리소스를 효율적으로 활용하기 위한 컨테이너 배치 및 로드 밸런싱 기능 등 더욱 실용적인 기능 갖췄고, 롤링 업데이트(오래된 컨테이너와 새로운 컨테이너를 단계적으로 서비스에 교체 투입하는 것) 가능

Continue reading

[Docker] 1.도커의 기초 - 도커란?

책 ‘도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문’을 기반으로 공부 한 내용을 정리

  • 도커(Docker)
    • 컨테이너형 가상화 기술을 구현하기 위한 상주 애플리케이션 + 상주 애플리케이션을 조작하기 위한 CLI로 구성된 프로덕트
    • 가상 환경에 운영 체제를 설치하고 패키지 관리자로 필요한 요소 설치하는 환경 구축 작업을 실행하는 경우, 로컬 환경에 도커만 설치하면 구성 파일과 명령어로 애플리케이션이나 미들웨어가 이미 갖춰진 테스트용 가상 환경(도커 컨테이너) 빠르게 구축 가능 ==> 오버헤드가 적어지는 장점 보유!
    • 기존 가상화 소프트웨어보다 더 가볍게 동작
    • 이식성이 뛰어남
    • 컨테이너 간의 연동이나 클라우드 플랫폼 지원 등 여러 면에서 장점 보유
  • 도커의 기본 개념

    a. 컨테이너형 가상화 기술 사용

    • 가상화 소프트웨어 없이도 운영 체제의 리소스를 격리해 가상 운영 체제(컨테이너)로 만들 수 있음
    • 컨테이너를 만들면서 발생하는 오버헤드는 다른 가상화 소프트웨어보다 적음. –> 빠르게 시작, 종료 가능하며 이때 어가는 리소스도 작은편

    b. 애플리케이션이 중심이 되는 도커

    • LXC는 호스트 운영 체제 가상화보다 성능 면에서 유리하지만, 시스템 컨테이너(단순한 리소스 분리 목적을 띄는 컨테이너)서 어느 정도 자리를 잡았지만, 애플리케이션 배포 및 운영의 관점에서는 미흡함

      반면, 도커는 컨테이너의 성능적 이점을 살리면서도 애플리케이션 배포에 초점을 가짐

    • 차이점
      • 호스트 운영 체제의 영향을 받지 않는 실행 환경 (Docker Engine을 이용한 실행 환경 표준화)
      • DSL(Dockerfile)을 이용한 컨테이너 구성 및 애플리케이션 배포 정의 –> 컨테이너 정보를 DSL로 관리 능. 이것을 기반으로 복제 및 배포가 이루어져서 재현성이 높음
      • 이미지 버전 관리
      • 레이어 구조를 갖는 이미지 포맷(차분 빌드 가능)
      • 도커 레지스트리(이미지 저장 서버 역할을 함)
      • 프로그램 가능한 다양한 기능의 API
  • 도커 체험하기

    도커를 사용해 애플리케이션을 배포해보기

    1) helloworld라는 쉘 스크립트 만들기

      #!/bin/sh
    	  
      echo "Hello, World!"  
    

    2) 쉘 스크립트와 같은 폴더에 Dockerfile(DSL) 작성

    • 도커가 어떻게 이미지를 만들고 실행할지 여기에서 정의됨
    • FROM절 : 컨테이너의 원형(틀) 역할을 할 도커 이미지(운영 체제)를 정의
    • COPY절 : 작성한 쉘 스크립트 파일을 도커 컨테이너 안의 /usr/local/bin에 복사하라고 정의한 것
    • RUN절 : 도커 컨테이너 안에서 어떤 명령을 수행하기 위한 것
      ————————————————————여기까지 도커 빌드 과정에서 실행, 새로운 이미지 생성됨

    • CMD절 : 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령을 정의
      FROM ubuntu:16.04  
    	
      COPY helloworld /usr/local/bin
      RUN chmod +x /usr/local/bin/helloworld
    	
      CMD ["helloworld"]
    	
      $ docker image build -t helloworld:latest .
      Hello, World!
    

Continue reading

[ 파이썬 문법 ] 파이썬의 자료형-2

파이썬 데이터 타입(자료형)

리스트(순서o, 중복o, 수정o, 삭제o)

a = []
b = list()
c = [1,2,3,4]
d = [10, 100, 'Pen', 'Banana', 'Orange']
e = [10, 100, ['Pen', 'Banana', 'Orange']]
  • 인덱싱
    print(d[3])
    print(d[-3])
    print(d[0]+d[1])
    print(e[2][1])
    print(e[-1][-2])
    
  • 슬라이싱
    print(d[0:3])
    print(d[0:1])
    print(d[0:2])
    print(e[2][1:3])
    
  • 연산
    print(c+d)
    print(c*3)
    print(str(c[0])+'hi')
    

Continue reading

Pagination