Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Jason's Blog

리눅스 컨테이너의 진화 : Docker의 기초 본문

Container

리눅스 컨테이너의 진화 : Docker의 기초

Jason Jongjin Lim 2018. 8. 31. 17:45

이번 포스트에서는 Docker에 대해 알아보겠다.



먼저 Docker는 이전 Linux의 chroot에서 부터 시작된 리눅스 커널 격리 기술의 ‘LXC(리눅스 컨테이너)’에 근간이 있다. 


그래서 먼저 리눅스 컨테이너에 대해 간단한 설명으로 시작하겠다.


해당 자료는 Red Hat Pinkcoding Fest 행사시 발표했던 내용을 기반으로 작성하였다.






  • 리눅스 컨테이너 



리눅스 컨테이너는 간단히 말해 리눅스의 CGroups, Namespaces를 통해 커널을 격리시키는 기술이다. 


커널을 격리함으로써 기존의 서로 다른 플랫폼에 대한 제약을 해소할 수 있으며, 리소스를 보다 더 효율적으로 사용할 수 있다.






기존의 Virtual Machine, 즉 가상화 기술과 비교하자면 VM은 하드웨어 자원(Host OS)을 가상화하여 자원을 공유하는 Operating System(Guest OS)를 관리하는 것이며 Container는 OS Kernal 자체를 가상화(격리)하여 리소스를 공유하는 방식이다.



쉽게 말하자면, 가상화 기술은 Host OS, Guest OS 두 개의 커널을 지니며, Container는 한 개의 커널을 지닌다. 이 점은 애플리케이션의 오버헤드와 큰 연관성이 있다.




다음은 리눅스 컨테이너를 플랫폼화 시킨 도커에 대해 알아보겠다.


  • 도커
    • 리눅스 컨테이너에 여러기능을 추가
    • 애플리케이션을 컨테이너로 좀더 쉽게 사용할 수 있게 만든 오픈소스 프로젝트
    • 2013년 3월  dotCloud 창업자 Solomon Hykes 가 Pycon Conference 에서 발표
    • Go 언어로 작성 된 “The future of linux Containers”
    • 가상 머신과 달리 성능손실이 거의 없는 차세대 클라우드 솔루션으로 주목

  • 도커 이미지
    • 가상머신 생성시 사용하는 ISO 와 비슷한 개념의 이미지
    • 여러 개의 층으로 된 바이너리 파일로 존재
    • 컨테이너 생성시 읽기 전용으로 사용됨



  • 저장소 이름 : 이미지가 저장된 장소, 이름이 없으면 도커 설정파일에 지정된 기본 레파지토리로 설정
  • 이미지 이름 : 이미지의 역할을 나타낼 이름, 생략 불가능
  • 이미지 버전 : 이미지 버전정보, 생략하면 latest 로 인식

<Layer 형태의 도커 이미지>


  • 도커 이미지 생성

    • 이미지 생성을 위한 컨테이너 생성



    • docker commit 명령을 사용, first commit 이미지 생성

- Docker commit [option] CONTAINER [REPOSITORY[:TAG]]
- -a : author (이미지 작성자) 메타데이터를 이미지에 저장
- -m : 커밋 메시지 입력, 이미지 설명 입력


  • 저장소에 이미지 올리기

    • 이미지에 이름 추가하기
- docker tag [기존 이미지 이름] [새롭게 생성될 이름] : 기존 이미지에 이름만 추가하는 명령, 기존 이미지는 삭제 되지 않음
- newfedora 이미지에 eevee4306/pinkcoding 이름을 추가


  • Dockerfile
    • 매뉴얼 작업을 기록한 Dockerfile 생성
    • 빌드 명령어가 Dockerfile을 읽어 이미지를 생성



    • 이미지를 직접 생성 또는 커밋해야 하는 수고로움을 덜어줌
    • 애플리케이션 빌드를 자동화
    • 익숙하지 않은 사용자는 약간의 난이도가 존재


  • Dockerfile 예제
시나리오 : 웹서버를 설치하고, 로컬에 있는 test.html -> 컨테이너 /var/www/html 복사

    • 로컬 test.html 파일 생성

    • 아파치 웹서버가 설치된 이미지를 빌드하는 Dockerfile 생성

    • 이미지 생성

    • 생성된 이미지 확인






마치며.. 현재 Docker는 Docker Enterprise로 인해 기업용으로 구축할 수 없게 되었다. 그래서 OCI 제단(Open Container Initiative)에서는 CRI-O라는 새로운 표준 컨테이너를 발표했다. 다음번 포스트에선 CRI-O에 대해 다루도록 하겠다.
  


Comments