본문 바로가기

삽질

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

이 글은 mac m3로 아래 카카오 세션을 실습하며 작성했습니다.

0. 개요

이 실습을 하기 위해서 vagrant와 qemu를 설치해야 합니다.

💡 Vagrant란? Virtualbox와 같은 가상 환경 플랫폼에 가상 머신 생성과 같은 프로비저닝을 쉽게 할 수 있는 도구입니다.

 

사용할 vagrant와 qemu를 brew로 설치합니다.

# vagrant 설치
brew install vagrant --cask

# qemu 설치
brew install qemu

# plugin 설치
vagrant plugin install vagrant-qemu

 

1. Vagrantfile

아래 링크에서 m시리즈에서 사용 가능한 Vagrantfile 내용을 받을 수 있습니다.

https://raw.githubusercontent.com/sam0kim/container-internal/main/m1/Vagrantfile

 

해당 파일의 내용을 복사해서 Vagrantfile을 만든 뒤, 붙여넣으시면 됩니다.

 

이제 vagrant로 프로비저닝을하면 됩니다.

vagrant up

 

하지만, 에러가 발생합니다.

 

현재 2024년 8월 기준 예제의 Vagrantfile로 mac m3에서 vagrant up을 하면 오류가 발생합니다.

 

요약하면 ubuntu1804를 현재 시스템에서 사용할 수 없다는 의미입니다.

따라서 Vagrantfile을 수정해 버전을 올립니다.

아래 Vagrantfile이 최종본입니다.

BOX_IMAGE = "generic/ubuntu2004"
HOST_NAME = "ubuntu2004"

$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 lsb-release > /dev/null 2>&1 &&
  sudo mkdir -p /etc/apt/keyrings &&
  sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg &&
  echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 2>&1 &&
  sudo apt-get update &&
  sudo apt-get -y install docker-ce docker-ce-cli docker-compose-plugin > /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 "qemu" do |qe|
     qe.arch = "x86_64"
     qe.machine = "q35"
     qe.cpu = "max"
     qe.net_device = "virtio-net-pci"
   end
   subconfig.vm.provision "shell", inline: $pre_install
 end

end

 

3. VM 접속

vagrant 접속은 ssh 명령어를 사용하시면 됩니다.

vm이 하나일 경우 ssh 뒤에 vm 명을 작성하지 않아도 됩니다.

vagrant ssh 'vm이름'

 

4. 트러블

아래 내용은 qemu가 아닌 virtualbox를 사용하려고 하다 만난 트러블입니다.

💡 [중요!!!] 아래 방법으로 virtualbox를 설치할 수 있지만, 예제의 Vagrantfile은 qemu를 타켓으로 하기 때문에 프로비저닝 단계에서 에러가 발생합니다.

 

brew로 virtualbox를 다운받을 수 없었습니다.

brew intall vitualbox --cask

// 에러
Error: Cask virtualbox depends on hardware architecture being one of [{:type=>:intel, :bits=>64}], but you are running {:type=>:arm, :bits=>64}.

아래 git을 보니

글이 작성된 시간인 2022년 10월 기준 m시리즈 Apple Silicon은 virutal box를 설치 지원하지 않는다고 나와있습니다.

container-internal/m1 at main · sam0kim/container-internal

 

하지만, 현재인 2024년 8월 기준 virtualbox를 설치하는 방법이 있습니다.

아래 링크를 통해 들어가시면 사진처럼 7.0.8 버전은 m시리즈 다운로드를 지원하고 있습니다.

Download_Old_Builds_7_0 – Oracle VM VirtualBox

 

예제의 Vagrantfile을 virtualbox로 실행했더니 아래 그림과 같은 오류를 만났습니다.

https://raw.githubusercontent.com/sam0kim/container-internal/main/m1/Vagrantfile

예제의 vagrantfile을 자세히 봐보니 virtualbox가 아닌 qemu를 사용한다는 것을 확인할 수 있었고, virtualbox를 사용하지 않게 되었습니다.

ubconfig.vm.provider "qemu" do |qe|

'삽질' 카테고리의 다른 글

도커 없이 컨테이너 만들기 - 3  (0) 2024.08.19
도커 없이 컨테이너 만들기 - 2  (0) 2024.08.19
하둡  (0) 2024.08.08
서비스 지향 아키텍처(SAO) 특징과 MSA와의 차이점  (0) 2024.08.06
Java 버전 별 주요 Features  (0) 2024.07.23