하루 만에 배우는 도커

Similar documents
PowerPoint 프레젠테이션

본책- 부속물

PowerPoint 프레젠테이션

/chroot/lib/ /chroot/etc/

Network seminar.key

안전한 웨 애플리케이션을 위한 자바스크립트 보안

리눅스 커널 소개

Adobe Flash 취약점 분석 (CVE )


PowerPoint 프레젠테이션

URL Shortener 프로젝트로 배우는 Vert.X 프레임워크

untitled

PowerPoint 프레젠테이션

C O N T E N T S 목 차 요약 / 1 I. 중남미화장품시장현황 / 3 Ⅱ. 주요국별시장정보 / 9 ( 트렌드 유통망 인증 ) 1. 브라질 / 9 2. 멕시코 / 콜롬비아 / 칠레 / 64 Ⅲ. 우리기업진출전략 / 79 # 첨부. 화장품관

PowerPoint 프레젠테이션

운영체제실습_명령어

vRealize Automation용 VMware Remote Console - VMware

Office 365, FastTrack 4 FastTrack. Tony Striefel FastTrack FastTrack

PowerPoint 프레젠테이션

Microsoft Word - src.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

C++ Programming

PowerPoint 프레젠테이션

리눅스 프로세스 관리

Agenda 오픈소스 트렌드 전망 Red Hat Enterprise Virtualization Red Hat Enterprise Linux OpenStack Platform Open Hybrid Cloud

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

C O N T E N T 목 차 요약 / 4 Ⅰ. 서론 Ⅱ. 주요국별대형유통망현황 / Ⅲ. 시사점및진출방안 ( 첨부 ) 국가별주요수입업체

IRISCard Anywhere 5

Microsoft PowerPoint - comp_prac_081223_2.pptx

PowerPoint 프레젠테이션

Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL: E-M

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

PowerPoint 프레젠테이션

작성자 : 기술지원부 김 삼 수

PowerPoint 프레젠테이션

[ 컴퓨터시스템 ] 3 주차 1 차시. 디렉토리사이의이동 3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

MySQL-Ch10

Microsoft Word - How to make a ZigBee Network_kr

RHEV 2.2 인증서 만료 확인 및 갱신

LXR 설치 및 사용법.doc

망고100 보드로 놀아보자-4

Sena Technologies, Inc. HelloDevice Super 1.1.0

PowerPoint 프레젠테이션

VMware vsphere

USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 최초작성 by 김정현 스크립트추가, 설명보충 by 유형목 1. VritualBox

서현수

Docker로 PaaS 구성하기

hd1300_k_v1r2_Final_.PDF

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

단계

무시하고진행합니다. $ sudo rootstock -d precise --seed ubuntu-standard -x en_us.utf-8 -f ubuntu -l ubuntu -p ubuntu -i 2G I: Running on a x86_64 machine I: Cre

C++ Programming

chap2

PowerPoint 프레젠테이션

목차 1) 개요 ) HTTPS & SSL ) HeartBleed 란?

Snort Install Manual Ad2m VMware libnet tar.gz DebianOS libpcap tar.gz Putty snort tar.gz WinSCP snort rules 1. 첫번째로네트워크설정 1) ifconf

*금안 도비라및목차1~9

System Recovery 사용자 매뉴얼

[Brochure] KOR_TunA

OnTuneV3_Agent_Install

Sun Java System Messaging Server 63 64

PowerPoint 프레젠테이션

INDEX 1. 개요 데이터백업스크립트작성 crontab 을이용한자동백업예약 활용 - 다른서버에백업하기

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

PowerPoint 프레젠테이션

BEA_WebLogic.hwp

Microsoft Word - release note-VRRP_Korean.doc

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

문서 대제목

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

네이버블로그 :: 포스트내용 Print VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 /carrena/ VMware 에서 l

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

Chapter 05. 파일접근권한관리하기

PowerPoint 프레젠테이션

USB USB DV25 DV25 REC SRN-475S REC SRN-475S LAN POWER LAN POWER Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl C

벤처연구사업(전동휠체어) 평가

PowerPoint 프레젠테이션

Microsoft Word - Armjtag_문서1.doc

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

6주차.key

Windows 8에서 BioStar 1 설치하기

<4D F736F F F696E74202D206D61696E D F6E D20C7D8C5B720BDC3BDBAC5DB20C0FCC1A620C1B6B0C7202D20B3D7C6AEBFF6C5A920C0CEC5CDC6E4C0CCBDBA20C4ABB5E520BCB3C1A4>

교육지원 IT시스템 선진화

ADP-2480

ARMBOOT 1

Microsoft PowerPoint - ch13.ppt

(SW3704) Gingerbread Source Build & Working Guide

bn2019_2

Cloud Friendly System Architecture

Mango220 Android How to compile and Transfer image to Target

PowerPoint 프레젠테이션

Keil Flexlm 라이선스 설명서

BY-FDP-4-70.hwp

Network 에사용되는용어정리 CIDR(Classless Inter-Domain Routing) RFC1918 IP Masquerade Bridge

메일서버등록제(SPF) 인증기능적용안내서 (HP-UX - qmail) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 HP-UX 11.11i qmail 1.03 spf-filter 년 6 월

Transcription:

123 나카이에츠지지음김성재옮김 하루만에배우는도커

123 나카이에츠지지음김성재옮김 하루만에배우는도커 이도서는 Linux コンテナー最新ツール Docker を支える技術 ( 日経 BP 社 ) 의번역서입니다

표지사진이성호이책의표지는이성호님이보내주신풍경사진을담았습니다. 리얼타임은독자의시선을담은풍경사진을책표지로보여주고자합니다. 사진보내기 ebookwriter@hanbit.co.kr 하루만에배우는도커 초판발행 2016 년 1 월 22 일 지은이나카이에츠지 / 옮긴이김성재 / 펴낸이김태헌펴낸곳한빛미디어 ( 주 ) / 주소서울시마포구양화로 7길 83 한빛미디어 ( 주 ) IT출판부전화 02-325-5544 / 팩스 02-336-7124 등록 1999년 6월 24일제10-1779호 ISBN 978-89-6848-796-5 15000 / 정가 7,000원 총괄전태호 / 책임편집김창수 / 기획 편집김상민디자인표지 / 내지여동일, 조판김경수마케팅박상용, 송경석 / 영업김형진, 김진불, 조유미 이책에대한의견이나오탈자및잘못된내용에대한수정정보는한빛미디어 ( 주 ) 의홈페이지나아래이메일로알려주십시오. 한빛미디어홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr LINUX CONTAINER SAISHIN TOOL DOCKER WO SASAERU GIJYUTSU written by Etsuji Nakai, Nikkei Linux. Copyright c 2015 by Etsuji Nakai, Nikkei Business Publications, Inc. All rights reserved. Originally published in Japan by Nikkei Business Publications, Inc. 이책의한국어판저작권은 Botong Agency를통한저작권자와의독점계약으로한빛미디어가소유합니다. 신저작권법에의하여한국내에서보호를받는저작물이므로무단전재와무단복제를금합니다. 지금하지않으면할수없는일이있습니다. 책으로펴내고싶은아이디어나원고를메일 (ebookwriter@hanbit.co.kr) 로보내주세요.

저자소개 지은이 _ 나카이에츠지 1971년오사카에서출생했으며첫직업은학원강사였다. 외국계업체에서 Linux/ OSS를중심으로하는프로젝트를이끌면서, 다수의기술가이드, 잡지기사등을집필했다. 이후레드햇에이직하여에반젤리스트로서기업시스템에서의 Linux/OSS 활용촉진에힘쓰고있다. 역자소개 옮긴이 _ 김성재 기술분야전문번역가. 관심분야는 IT 기술과일본어교육콘텐츠등이다. 최근에는업무에필요한맥 OS와 ios 애플리케이션의개발과리뷰, 환경구축에관심이있다. 번역서로는 구글웹로그분석, 엔지니어를위한데이터시각화, 하이브리드앱을구현하는기술, 28일동안배우는리눅스서버관리, R로배우는데이터분석기본기데이터시각화, 스프링3 입문, 실전클라우드 VMware View 가상화, 빅데이터의충격, 만들면서배우는인터프리터, 우분투환경에서 C언어로배우는리눅스프로그래밍, 만들면서배우는기계학습 ( 이상, 한빛미디어 ) 등이있다. 저자소개 _ 3

차례 chapter 1 리눅스컨테이너의기초 7 1.1 리눅스컨테이너의개념 7 1.2 컨테이너에의한리소스분할 9 1.3 libvirt로컨테이너를체험한다 11 1.4 컨테이너내부와호스트리눅스의관계 14 1.5 정리 17 1.6 [ 칼럼 ] 이름공간의진화와컨테이너의구현 18 chapter 2 CentOS 7 에서 Docker 를체험 21 2.1 Docker 설치순서 21 2.2 Docker의이미지관리 22 2.3 컨테이너시작방법 24 2.4 이미지수정과보존 27 2.5 컨테이너에서웹서버시작 29 2.6 디스크이미지백업 31 2.7 정리 32 2.8 [ 칼럼 ]RHEL7/CentOS7의새로운커맨드를마스터하자 32 2.9 [ 칼럼 ]ABI(Application Binary Interface) 를아시나요? 32 chapter 3 Docker 의자동화기능활용 35 3.1 Dockerfile 35 3.2 Dockerfile 을이용한이미지생성 38 3.3 데이터베이스이미지생성 40 3.4 Rails 앱을컨테이너에서실행 43 3.5 실험환경초기화방법 46 3.6 정리 47 4 _ 하루만에배우는도커

chapter 4 Docker 의이미지관리를지탱하는구조 49 4.1 Device Mapper의역할 49 4.2 dm-thin의동작원리 50 4.3 LVM에서스냅샷을체험 52 4.4 Docker에서의논리디바이스관리 55 4.5 저장이미지를직접마운트한다 57 4.6 정리 59 4.7 [ 칼럼 ]Docker 개발에공헌한레드햇 59 chapter 5 Docker 의네트워크구조 61 5.1 Docker의네트워크구조 61 5.2 가상 NIC를만드는방법 63 5.3 컨테이너간통신의 2가지패턴 66 5.4 가상 NIC 추가 69 5.5 정리 72 5.6 [ 칼럼 ]Docker가탄생한배경 72 chapter 6 cgroups 를이용한리소스관리와 systemd 연계 75 6.1 CPU와메모리할당을설정 75 6.2 Docker와 systemd의연계 78 6.3 cgroups 설정직접확인 81 6.4 Docker Hub에서이미지공유 82 6.5 Docker Hub에올리기 85 6.6 정리 86 6.7 [ 칼럼 ]Docker Hub의애플리케이션활용 86 차례 _ 5

10 _ 하루만에배우는도커

chapter 1 리눅스컨테이너의기초 Docker는미국의 Docker사에서오픈소스소프트웨어로개발을진행하는 리눅스컨테이너 관리도구입니다. 리눅스컨테이너에관해서는뒤에서자세히설명하지만, 특히 Docker는컨테이너에할당된디스크이미지를간편하게관리할수있는점이특징입니다. 이미애플리케이션이설치된이미지를내려받아이용할수도있고자신이새로운이미지를만들어공개할수도있습니다. 이책에서는 Docker 사용법과함께 Docker의기반이되는기술을설명합니다. Docker에서는리눅스컨테이너를비롯한다양한리눅스의최신기술이활용됩니다. 이책은 Docker를통해서리눅스활용능력을한단계끌어올리는걸목표로합니다. 1.1 리눅스컨테이너의개념 우선리눅스컨테이너의개요를설명하겠습니다. Docker는발전중인기술입니다. Docker를이용할때는 Docker의구조를확실하게이해한뒤, 적절한이용방법과이용상황을찾을필요가있습니다. 그리고 Docker의구조를이해하려면반드시그기초가되는리눅스컨테이너를알아야합니다. [ 그림 1-1] 은리눅스 KVM에의한서버가상화구조입니다. Chapter 1 리눅스컨테이너의기초 _ 7

그림 1-1 리눅스 KVM 에의한서버가상화구조 게스트 OS 가상머신 게스트 OS 가상머신 하이퍼바이저 ( 커널모듈 ) 호스트 OS 물리서버 물리서버에호스트 OS로 Red Hat Enterprise Linux(RHEL) 등의리눅스를설치하면호스트 OS가하이퍼바이저기능을제공합니다. 하이퍼바이저는호스트리눅스위에복수의가상머신을만들고, 각가상머신에서는개별게스트 OS가동작합니다. 반면에, 리눅스컨테이너에는가상머신이라는개념이없습니다. 비가상화환경의 OS는물리하드웨어를관리하는커널부분 ( 커널공간 ) 과그위에서동작하는유저프로세스군 ( 유저공간 ) 으로구성됩니다. 컨테이너형가상화에서는리눅스커널의기능으로유저공간을여러개로나눕니다. 나뉜각유저공간이 컨테이너 에해당합니다 ([ 그림 1-2]). 그림 1-2 컨테이너가상화의구조 OS 유저프로세스유저프로세스유저공간 환경유저프로... 세스비가상화 유저공간 유저프로세스유저프로세스환경유저공간로세스비가상화 유저프로세스유저프컨테이너... 커널공간 물리서버 컨테이너형가상화 커널공간 물리서버 그렇다면, 각컨테이너에선무엇이나뉜것일까요? 구체적으로는다음과같습니다. 8 _ 하루만에배우는도커

유저프로세스프로세스테이블파일시스템네트워크설정 CPU, 메모리할당량 컨테이너별로이런리소스들을개별적으로할당함으로써, 각컨테이너의내부프 로세스는다른컨테이너와격리된환경에서실행됩니다. 바꿔말하면, 컨테이너별 로독립된환경에서애플리케이션을실행할수있게됩니다. 1.2 컨테이너에의한리소스분할 이야기가조금추상적이되었으므로, 이번에는구체적으로리소스분할구조를설명하겠습니다. 또한, 이뒤에서는 RHEL 6.5 환경에서실제로컨테이너를만들고확인합니다. 다음장부터는 Docker를이용해서컨테이너를만들지만, 이장에선컨테이너의기초를이해하고자 libvirt를이용한가상화방법을소개합니다. Docker보다조금절차가복잡하고손이많이가지만, 이를통해 Docker에선어떤점이편리해졌는지 본질을이해할수있게됩니다. 우선, 프로세스테이블 과 파일시스템 분할을살펴봅시다 ([ 그림 1-3]). 그림 1-3 프로세스테이블과파일시스템분할 #ps -ef PID USER TIME COMMAND 1 0 0 : 00 /bin/sh /bin/init 6 0 0 : 00 httpd -h /html 7 0 0 : 00 sh 8 0 0 : 00 ps -ef 컨테이너안의프로세스 만보인다 유저프로세스#ls / bin cgroup dev hrml proc sys 컨테이너로세스컨테이너 유저프로세스유저프다른컨테이너의프로세스는보이지않는다 컨테이너마다루트디렉 터리가다르다 호스트리눅스의특정디 렉터리가루트디렉터리 로보인다 Chapter 1 리눅스컨테이너의기초 _ 9

프로세스테이블은리눅스상에서동작하는프로세스의목록을말합니다. 일반환경에서 ps 커맨드를실행하면서버에서실행중인모든프로세스목록이표시됩니다. 반면에컨테이너의내부에서 ps 커맨드를실행하면컨테이너내부에서실행중인프로세스만표시됩니다. 다른컨테이너에서동작하는프로세스의존재는알수없습니다. 파일시스템은컨테이너안에서보이는디렉터리를말합니다. 호스트리눅스상의특정디렉터리를컨테이너의루트디렉터리로할당합니다. 이전부터사용된 chroot ( 체인지루트 ) 와같은메커니즘으로생각하면됩니다. 다음 네트워크설정 은조금재미있는구조로, 리눅스의네트워크이름공간 (netns) 기능을이용합니다. 네트워크이외의이름공간에관해서는이장끝에있는 1.6 [ 칼럼 ] 이름공간의진화와컨테이너구현 을참조하세요. 네트워크이름공간은한대의리눅스서버에서복수의네트워크설정을사용하는기능입니다. 복수의이름공간을준비하면각이름공간에서 NIC( 네트워크인터페이스카드 ), IP 주소, 라우팅테이블등을따로설정할수있습니다. 이뒤에소개할 libvirt를이용하면 [ 그림 1-4] 와같은네트워크가구성됩니다. 그림 1-4 리눅스컨테이너의네트워크구성 컨테이너 컨테이너 호스트리눅스 IP 마스커레이드 eth0 veth0 virbr0 eth0 veth1 eth0 veth0 veth 쌍 eth0 가상브릿지 외부네트워크 10 _ 하루만에배우는도커

그림에있는 veth란직결된가상 NIC 쌍을만드는기능입니다. 이페어의한쪽을컨테이너내의네임스페이스에넣고컨테이너안에서만보이게합니다. 그리고다른한쪽을가상브릿지에연결하면가상브릿지를거쳐컨테이너간의통신이가능해집니다. 또한, 가상브릿지에 IP 어드레스를할당함으로써호스트리눅스에서컨테이너에접속하거나컨테이너에서외부네트워크로접속할수도있습니다. 이구조는리눅스 KVM의서버가상화환경에서가상네트워크의구조와거의같습니다. CPU, 메모리할당 은리눅스의 Control Groups (cgroups) 기능을이용합니다. cgroups로컨테이너내의프로세스에대한 CPU 할당우선순위, 최대메모리사용량등을설정합니다. 1.3 libvirt 로컨테이너를체험한다 그럼, 실제로컨테이너를만들어 컨테이너의내부 를경험해봅시다. 여기서는 RHEL 6.5에표준으로포함된가상화관리도구 libvirt를이용하여컨테이너를만듭니다. libvirt는리눅스 KVM의가상머신을만들고관리하는도구이지만, 사실은컨테이너를만들고관리하는기능도갖추고있습니다. 1 리눅스 KVM의호스트리눅스로 RHEL 6.5를도입하면 KVM 가상머신과나란히컨테이너를만들고관리할수있게됩니다 ([ 그림 1-5]). 1 RHEL 6 에서컨테이너이용은 Red Hat 사의정식지원대상은아닙니다. 자기책임으로이용해주세요. Chapter 1 리눅스컨테이너의기초 _ 11

그림 1-5 libvirt 로가상머신과컨테이너를동시에관리한다 가상머신 1 컨테이너 1 가상머신 eth0 eth0 컨테이너 호스트리눅스 IP 마스커레이드 veth0 virbr0(default) veth0 eth0 192.168.122.1 외부네트워크 RHEL6.5 설치순서는레드햇사이트를참고로해주세요. 다음으로컨테이너에보여줄디렉터리를준비합니다. 여기서는 busybox 를이용한간이웹서버를컨테이너에서실행합니다. 필요한파일을디렉터리 / lxcguest01 아래에준비하고, 컨테이너의루트디렉터리로할당합니다. 처음으로실행파일을저장할디렉터리 /lxcguest01/bin 과 HTML 파일을저장할디렉터리 /lxcguest01/html 을준비합니다. # mkdir -p /lxcguest01/bin # mkdir -p /lxcguest01/html 이어서디렉터리 /lxcguest01/bin 안에 busybox 커맨드파일을복사한다음, 각종커맨드의심볼릭링크를만듭니다. # cd /lxcguest01/bin # cp /sbin/busybox./ # for i in echo grep rm \ ifconfig kill ps route \ test which cat false head \ ls pwd sh true date find \ httpd ip ping sleep wget; \ 12 _ 하루만에배우는도커

do ln -s busybox $i; done \ 는커맨드도중에서행을바꿀때입력하는기호 이것은 busybox의독특한이용법입니다. busybox는하나의커맨드파일로다양한커맨드의기능을모아서제공하는툴입니다. 예를들어 ls라는이름의심볼릭링크에서 busybox를실행하면 ls 커맨드로기능합니다. 앞코드에서는 httpd라는이름의심볼릭링크도준비되어있어이심볼릭링크로실행하면 busybox는 HTTP 데몬으로서동작합니다. 이어서컨테이너를시작했을때, 최초로실행할스크립트를 /lxcguest01/bin/ init.sh 에작성합니다. [ 리스트 1-1] /lxcguest01/bin/init.sh #!/bin/sh ifconfig eth0 192.168.122.190 route add default gw 192.168.122.1 eth0 httpd -h /html while [[ true ]]; do sh done 또한, 다음커맨드로실행권한을설정합니다. # chmod u+x /lxcguest01/bin/init.sh 이스크립트는컨테이너에할당된가상 NIC eth0에 IP 어드레스 192.168.122.190 을설정하여 HTTP 데몬을시작한다음, 셸 sh 를실행하고있습니다. 여기서는셸을종료해도다시같은셸을시작하게되어있습니다. 마지막으로웹서버에서공개하는콘텐츠로 /lxcguest01/html/index.html Chapter 1 리눅스컨테이너의기초 _ 13

을준비합니다. [ 리스트 1-2] /lxcguest01/html/index.html <html> <head> <title>linux Container</title> </head> <body> <h1>welcome to Linux Container!</h1> </body> </html> 1.4 컨테이너내부와호스트리눅스의관계 그럼실제로컨테이너를만들어보겠습니다. libvirt 로컨테이너를만들때사전 에 XML 정의파일을준비합니다. [ 리스트 1-3] lxcguest01.xml <domain type='lxc'> <name>lxcguest01</name> <memory>200000</memory> <os> <type>exe</type> <init>/bin/init.sh</init> </os> <devices> <interface type='network'> <source network='default'/> </interface> <console type='pty'/> <filesystem type='mount'> <source dir='/lxcguest01'/> <target dir='/'/> </filesystem> </devices> 14 _ 하루만에배우는도커

</domain> 이 XML 파일을현재디렉터리에 lxcguest01.xml 로저장한후, 다음단계에 서컨테이너를정의하고실행합니다. 커맨드 1-1 컨테이너를정의하고시작하는모습 # vi init.sh # chmod u+x /lxcguest01/bin/init.sh # vi /lxcguest01/html/index.html # vi lxcguest01.xml # virsh -c lxc:/// define lxcguest01.xml Domain lxcguest01 defined from lxcguest01.xml ]# virsh -c lxc:/// list --all Id Name State ---------------------------------------------------- - lxcguest01 shut off # virsh -c lxc:/// start lxcguest01 Domain lxcguest01 started 첫번째커맨드로 XML 파일로컨테이너를정의하고두번째커맨드로결과를확인합니다. 마지막커맨드로실제로컨테이너를시작합니다. 이때호스트리눅스상에서 ps efww 커맨드를실행하면, 출력의끝에 [ 커맨드 1-2] 처럼내용을확인할수있습니다. 커맨드 1-2 호스트리눅스에서본컨테이너내의프로세스 root 9646 1 0 01:14? 00:00:00 /usr/libexec/libvirt_lxc --name lxcguest01 --console 22 --security=none --handshake 25 --background --veth veth1 root 9647 9646 0 01:14? 00:00:00 /bin/sh /bin/init.sh root 9664 9647 0 01:14? 00:00:00 httpd -h /html root 9665 9647 0 01:14? 00:00:00 sh Chapter 1 리눅스컨테이너의기초 _ 15

출력된결과를보면컨테이너관리툴 libvirt_lxc 가컨테이너컨테이너를만들고, 그자식프로세스로서먼저준비한 init.sh를실행하고있습니다. 그리고 init.sh에서 HTTP 데몬인 httpds와 sh를실행하고있습니다. 호스트리눅스의데스크톱에서 firefox를실행하여 http://192.168.122.190 에액세스하면 [ 리스트 1-2] 의콘텐츠가표시됩니다 ([ 그림 1-6]). 그림 1-6 컨테이너내의웹서버에접속 단, 이것은컨테이너밖에서본모습입니다. 컨테이너내부에서는같은컨테이너 안의프로세스만보일것입니다. 아래는컨테이너내부에서실행되는셸에접속하 여컨테이너내부환경을확인한모습입니다. 커맨드 1-3 컨테이너내부환경확인 # virsh -c lxc:/// console lxcguest01 Connected to domain lxcguest01 Escape character is ^] # ps -ef PID USER TIME COMMAND 1 0 0:00 /bin/sh /bin/init.sh 6 0 0:00 httpd -h /html 16 _ 하루만에배우는도커

7 0 0:00 sh 11 0 0:00 ps -ef # ifconfig eth0 eth0 Link encap:ethernet HWaddr 52:54:00:89:BD:21 inet addr:192.168.122.190 Bcast:192.168.122.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe89:bd21/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:313 errors:0 dropped:0 overruns:0 frame:0 TX packets:22 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:17531 (17.1 KiB) TX bytes:2306 (2.2 KiB) # ls / bin dev lxcguest01.xml sys cgroup html proc # Ctrl + ] 키로컨테이너에서빠져나온다 # virsh -c lxc:/// destroy lxcguest01 Domain lxcguest01 destroyed ps 커맨드를실행하면컨테이너내부에서실행한프로세스만표시되고, 가상 NIC eth0 에 IP 주소가 192.168.122.190으로설정된것도알수있습니다. 또한, 호스트리눅스의디렉터리 /lxcguest01에준비한내용이컨테이너안의루트파일시스템으로되어있습니다. 앞의마지막커맨드는컨테이너를정지합니다. 1.5 정리 Docker의기초가되는 리눅스컨테이너 를설명했습니다. libvirt를이용해실제로컨테이너를만들었지만몇가지번거로운점도있었습니다. 특히본격적인애플리케이션을실행할경우컨테이너에할당할디렉터리준비가큰일입니다. 이번예로말하자면 lxcguest01 디렉터리아래에애플리케이션실행에필요한파 Chapter 1 리눅스컨테이너의기초 _ 17

일을모두준비해야만했습니다. 또한, 컨테이너를정의하는 XML 파일작성도번거롭습니다. 그런데 Docker를이용하면이런문제를깔끔하게해결할수있습니다. Docker 에서는애플리케이션을도입한디스크이미지를자동으로만들어컨테이너에할당할수있고컨테이너도커맨드하나로생성할수있습니다. 다음장부터는실제로 Docker를설치해서 Docker의편리함을체험해봅시다. 1.6 [ 칼럼 ] 이름공간의진화와컨테이너의구현 이름공간이라는말이나왔지만리눅스커널에는이밖에도다양한이름공간의 기능이있습니다. 주요이름공간을정리했습니다 ([ 표 1-1]). 표 1-1 리눅스커널의주요이름공간이름공간 기능 구현커널버전 Mount namespace 파일시스템분리 2.4.19 UTS namespace 호스트네임분리 2.6.19 IPC namespace 프로세스간통신분리 2.6.19 User namespace 유저 ( UID/GID) 분리 3.8 PID namespace 프로세스테이블분리 2.6.24 Network namespace 네트워크설정분리 2.6.24 이름공간은모두리눅스상에서동작하는프로세스에할당하는리소스를분리하는기능을합니다. 리눅스컨테이너는이름공간의조합으로구현되며컨테이너라는기술이단독으로있는것은아닙니다. 리눅스에서컨테이너를이용하는도구에는 Docker 외에도오래전부터이용되는 lxctools, 혹은이번에사용할 libvirt 등이있습니다. 이들은모두그이면에서는이름공간을이용하여컨테이너를만듭니다. 18 _ 하루만에배우는도커

각각이름공간은커널의버전업에따라서단계적으로도입되었습니다. 이런이름공간의진화로비로소현재의컨테이너가구현된것입니다. User namespace 는현재의 Docker에서는사용되지않으며이후버전에서지원을검토하고있습니다. 컨테이너는앞으로도계속진화하는기술이라고할수있습니다. Chapter 1 리눅스컨테이너의기초 _ 19