https://www.slideshare.net/mobile/samkim56808/1-246749110

도커없이 컨테이너 만들기 1편

    1. 도커 없이 컨테이너 만들기 1편 Sam.0 실습과 함께 완성해보는
  1. 2. 실습은 . . . ● 맥 환경에서 VirtualBox + Vagrant 기반으로 준비되었습니다 ○ 맥 이외의 OS 환경도 괜찮습니다만 ○ 원활한 실습을 위해서 ○ “VirtualBox or VMware + Vagrant”는 권장드립니다. ● 실습환경 구성을 위한 Vagrantfile을 제공합니다. 실습을 위한 사전 준비 사항
  2. 3. Vagrantfile ● 오른쪽의 텍스트를 복사하신 후 ● 로컬에 Vagrantfile로 저장하여 사용하면 됩니다. ● vagrant 사용법은 공식문서를 참고해 주세요 https://www.vagrantup.com/docs/i ndex 실습을 위한 사전 준비 사항 BOX_IMAGE = "bento/ubuntu-18.04" HOST_NAME = "ubuntu1804" $pre_install = <<-SCRIPT echo ">>>> pre-install <<<<<<" sudo apt-get update && sudo apt-get -y install gcc && sudo apt-get -y install make && sudo apt-get -y install pkg-config && sudo apt-get -y install libseccomp-dev && sudo apt-get -y install tree && sudo apt-get -y install jq && sudo apt-get -y install bridge-utils echo ">>>> install go <<<<<<" curl -O https://storage.googleapis.com/golang/go1.15.7.linux-amd64.tar.gz > /dev/null 2>&1 && tar xf go1.15.7.linux-amd64.tar.gz && sudo mv go /usr/local/ && echo 'PATH=$PATH:/usr/local/go/bin' | tee /home/vagrant/.bash_profile echo ">>>>> install docker <<<<<<" sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common > /dev/null 2>&1 && sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get -y install docker-ce docker-ce-cli containerd.io > /dev/null 2>&1 SCRIPT Vagrant.configure("2") do |config| config.vm.define HOST_NAME do |subconfig| subconfig.vm.box = BOX_IMAGE subconfig.vm.hostname = HOST_NAME subconfig.vm.network :private_network, ip: "192.168.104.2" subconfig.vm.provider "virtualbox" do |v| v.memory = 1536 v.cpus = 2 end subconfig.vm.provision "shell", inline: $pre_install end end
  3. 4. # sudo -Es 실습 계정 (root) # cd /tmp 실습 폴더 vagrant + virtual vm ubuntu 18.04 docker 20.10.5 * 도커 이미지 다운로드 및 컨테이너 비교를 위한 용도로 사용합니다. 기타 설치된 툴 ~ tree, jq, brctl, … 등 실습을 위한 툴 Vagrantfile 제공 환경 실습을 위한 사전 준비 사항
  4. 5. 컨테이너 ? 도커? 클라우드 ? ubuntu:latest ..OS? VMware 같은 건가?
  5. 6. 도커 ? https://docs.docker.com/get-started/overview/ 회사명 이면서 제품명 → 컨테이너를 다루는 플랫폼
  6. 7. 컨테이너 ? 격리된 환경과 통제된 리소스에서 실행되는 프로세스 그룹 호스트 안에 따로 한 살림 차려준달까 시스템리소스 (cpu, mem, ..) processes processes 집 안의 집 ~ “컴퓨터 안 의 컴퓨터” https://jessicagreben.medium.com/what-is-the-difference-between-a-process-a-container-and-a-vm-f36ba0f8a8f7
  7. 8. 컨테이너? VM 보다 가볍다 Infrastructure OS Hypervisor Guest OS Guest OS Guest OS App App App Strong Isolation 가상머신(VM) 환경 Infrastructure OS Container Engine App App App container container container Weak Isolation 컨테이너 환경
  8. 9. 컨테이너? VM 보다 가볍다 왜 ? Guest OS가 없다 (호스트 OS를 공유) Infrastructure OS Hypervisor Guest OS Guest OS Guest OS App App App 스트롱 ~ Isolation 가상머신(VM) 환경 Infrastructure OS Container Engine App App App container container container 약한 Isolation 컨테이너 환경
  9. 10. 컨테이너 vs VM https://artistdata.tistory.com/5 최대소수연산(sysbench) 소요시간 비교 압축 성능 비교 (LZMA benchmark) for CPU performance RAM Speed 비교 디스크 I/O 성능비교 (IOzone benchmark) 성능비교 ~ 컨테이너가 빠름 빠름 ~
  10. 11. 1979 chroot 2000 Jails 2013 2002 mount ns 2006 uts, ipc ns 2009 net ns 2012 user ns LXC (LinuX Containers) 2008 pid ns, cgroup 컨테이너의 역사 컨테이너의 시작은 1979년 chroot 로 부터 ~
  11. 12. chroot ? change root directory ‘ / ’ 리눅스 파일시스템은 모든 파일 및 디렉토리가 “root (/)” 로 부터 시작된다. bin boot chroot etc lib proc usr var / (root filesystem)
  12. 13. chroot ? change root directory ‘ / ’ 원격 유저(FTP 등)를 특정 디렉토리 경로에 가두기 위한 용도 등으로 사용됨 bin boot chroot etc lib proc usr var / (root filesystem) bin lib home usr / (Fake root) Hacker In Jail Hacker 따라서.. 특정 디렉토리 경로를 root로 지정할 수 있으면 해당 경로에 프로세스를 가둘 수 있다는 점에 착안 ~
  13. 14. chroot 실습 chroot로 컨테이너를 만들어 보자 bin boot chroot etc lib proc usr var / (root filesystem) bin lib home usr / (Fake root) Hacker In Jail
  14. 15. chroot 실습 chroot는 새로운 경로(NEWROOT)와 실행할 커맨드를 인자로 받습니다. # man chroot ~ 커맨드를 따로 지정하지 않으면 default 커맨드 (/bin/sh) 로 동작합니다.
  15. 16. # mkdir new-root # chroot new-root /bin/bash new-root 폴더를 만들고, chroot를 해봅시다 chroot 실습