추천, 2020

에디터의 선택

Linux 컨테이너를 사용하여 동시에 여러 배포판을 실행하는 방법

Linux Containers (LXC)는 경량 가상화 기술이며 다양한 용도로 사용됩니다. 이것은 Linux 커널의 일부이며 단일 Linux 호스트에서 하나 또는 여러 개의 Linux 배포판을 에뮬레이트 할 수 있습니다. VirtualBox, KVM 또는 Xen과 같은 완전한 가상화 기술과 chroot 사이의 중간 지점이라고 생각하십시오. BSD 세계에서 유사한 기술은 FreeBSD Jail입니다.

예를 들어 필자가 쓰고있는 머신은 Intel Atom 프로세서를 탑재 한 Linux Mint 18을 실행하는 노트북이며 빈약 한 2GB의 RAM을 가지고 있습니다. 그러나 나는 각각 Apache 웹 서버 인스턴스가 실행되는 세 개의 Linux 컨테이너를 실행 중이며 큰 성능 저하는 없습니다. VirtualBox와 같은 기존의 가상 머신에서는 생각할 수없는 것입니다. 따라서 Linux 시스템에서 여러 배포판을 실행하고 싶다면 Linux 컨테이너가 제대로 작동해야합니다.

Linux 컨테이너 설치 및 구성

Linux Mint 18 64-bit에서 LXC를 설정하고 있습니다. 여기 제공된 설치 지침은 Ubuntu 16.04 이상에서도 수정되지 않습니다. 다른 배포판을 사용하고 있다면, 예상대로 작동하지 않으면 배포판의 공식 문서를 참조하십시오. 명령 줄 및 일반적인 문제 해결에 대한 지식도 필요합니다.

전제 조건

다음은 여러 배포판을 사용하기 위해 설정해야하는 몇 가지 사항입니다.

1. 다음을 사용하여 LXC 및 기타 필수 소프트웨어를 설치 하십시오.

[소스 코드] sudo apt install lxc lxc-templates uidmap [/ sourcecode]

2. 이제 프로파일구성해야합니다 . 다음 명령을 입력하여 설정하십시오.

[소스 코드] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536"& amp; gt; ~ / .config / lxc / default.conf
에코 "lxc.id_map = g 0 100000 65536"& amp; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth"& amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0"& amp; amp; gt; ~ / .config / lxc / default.conf
echo "$ USER veth lxcbr0 2"| sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. 다음과 같이 사용자 권한설정 해야합니다.

[소스 코드] sudo usermod -add-subuids 100000-165536 $ USER
sudo usermod -add-subgids 100000-165536 $ USER

sudo cgm 모든 사용자 만들기
sudo cgm chown 모든 사용자 $ (id -u) $ (id -g)
cgm movepid 모든 사용자 $$ [/ sourcecode]

컨테이너 설정

이제 LXC 컨테이너가 다른 필수 소프트웨어와 함께 설치되었으므로 다음은 컨테이너를 설정하는 단계입니다.

1.이 예제에서는 ubu1 이라는 우분투 컨테이너를 설정합니다 . 이를 수행하려면 다음 명령을 실행하십시오.

[소스 코드] lxc-create -template 다운로드 -name ubu1 [/ 소스 코드]

2. –template 매개 변수는 인터넷에서 미리 구성된 이미지다운로드 하도록 lxc에 지시하지만 –name 매개 변수는이 경우 컨테이너 ubu1 의 이름을 지정합니다. 원하는 이름을 사용할 수 있습니다.

3. 이제 지원되는 배포판 이미지 의 목록을 볼 수 있습니다 :

4. 설치할 분배의 세부 사항을 입력하십시오 . 우분투 16.04 (codename xenial)의 64 비트 버전을 여기에 설치합니다 :

5. 비 대화식으로 이미지설치하려면 다음 명령을 사용하여 위와 동일한 결과를 얻습니다.

[소스 코드] lxc-create -t ​​다운로드 -n ubu1 - dist 우분투 -release xenial -arch amd64 [/ sourcecode]

6. LXC는 이제 호스트 시스템에 최소한의 우분투 xenial 이미지를 다운로드하고 설치합니다. 인터넷 연결 및 PC 속도에 따라 다운로드 및 설치에 약간의 시간이 걸릴 수 있습니다. 설치가 끝나면 다음 과 같은 화면이 나타납니다.

이제 새로 설정된 Ubuntu 컨테이너를 사용할 준비가되었습니다.

Linux 컨테이너에서 다중 배포판 사용

컨테이너 시작하기

lxc-start 명령을 사용하여 컨테이너를 시작하십시오.

[소스 코드] lxc-start -n ubu1 -d [/ sourcecode]

여기서 -n 매개 변수 시작하려는 컨테이너의 이름 (이 경우 ubu1 )을 지정하고 -d 매개 변수 는 백그라운드에서 실행되도록합니다 .

lxc-ls 명령을 사용하여 컨테이너가 시작되었는지 확인할 수 있습니다.

[소스 코드] lxc-ls -f [/ sourcecode]

-f 매개 변수는 공상적인 보고를 가능하게합니다. 여기서 데비안 (정지)과 우분투 (실행 중) 라는 두 개의 컨테이너 가 있다는 것을 알 수 있습니다.

컨테이너 액세스 및 사용

lxc-attach 명령을 사용하여 컨테이너의 콘솔에 액세스 할 수 있습니다.

[소스 코드] lxc-attach -n ubu1 [/ sourcecode]

이제 컨테이너에 루트 셸 이 생깁니다. 루트 사용자에 대한 암호를 설정 하고 일반 사용자 계정을 만드는 것이 좋습니다.

[소스 코드] passwd
adduser beebom [/ sourcecode]

물론 beebom 을 원하는 사용자 이름으로 바꿉니다 . 그런 다음 소프트웨어를 설치하고 일반 시스템에서와 같이 컨테이너를 구성 할 수 있습니다. 예를 들어, 데비안 또는 우분투 컨테이너 :

[소스 코드] apt install wget openssh-server htop tmux nano iptables [/ sourcecode]

컨테이너 멈추기

컨테이너로 게임을 마친 후에는 exit 명령 사용 하여 호스트 시스템으로 돌아가십시오 . 이제 lxc-stop 명령 을 사용하여 컨테이너를 중지하십시오 .

[소스 코드] lxc-stop -n ubu1 [/ sourcecode]

이렇게하면 컨테이너가 완전히 종료되고 디스크 공간을 제외하고 시스템에서 더 이상 자원을 소비하지 않습니다.

복제 및 스냅 샷

클론

컨테이너에 프로그램을 설치하고 원하는대로 구성한 후에는 프로비저닝을 쉽게하기 위해 하나 또는 여러 개의 복사본만들 수 있습니다. 컨테이너의 정확한 복제본 인 복제본을 만들어이 작업을 수행 할 수 있습니다.

예를 들어 ubu1 컨테이너의 복제본을 만들려면 ( 먼저 ubu2 라고 ubu2 ) lxc-stop 사용 하여 컨테이너lxc-stop 한 다음 lxc-copy 명령을 사용합니다.

[소스 코드] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ sourcecode]

여기서 -n 옵션은 소스 컨테이너를 지정하고 -N 옵션은 복제 이름을 지정합니다 . 컨테이너가 복제 되었는지 확인 하려면 lxc-ls 명령을 사용하십시오.

스냅 샷

웹 서버를 다시 구성하는 것과 같이 콘테이너의 변경으로 인해 잠재적으로 위험하거나 복구하기 어려운 항목을 만들려고한다고 가정합니다. 손상을 최소화하기 위해 변경하기 전에 컨테이너의 스냅 샷을 만들 수 있습니다. 구성 중에 문제가 발생하면 스냅 샷을 복원하여 컨테이너를 중지하고 이전 작업 상태로 복구 할 수 있습니다.

스냅 샷을 만들려면 먼저 컨테이너를 중지하십시오 .

[소스 코드] lxc-stop -n ubu1 [/ sourcecode]

그런 다음 lxc-snapshot 명령을 사용하여 스냅 샷만듭니다 .

[소스 코드] lxc-snapshot -n ubu1 [/ sourcecode]

그러면 snap0 이라는 스냅 샷이 생성됩니다. 이 명령을 사용하여 만든 모든 후속 스냅 샷은 snap1, snap2 등으로 불 립니다 .

그런 다음 컨테이너를 시작 하고 원하는대로 변경할 수 있습니다. 작성한 스냅 샷으로 되돌리려 고 할 때 언제든지 컨테이너를 중지 하고 -r 매개 변수와 함께 lxc-snapshot 명령을 사용하여 lxc-snapshot복원하십시오 .

[소스 코드] lxc-snapshot -r snap0 -n ubu1 [/ sourcecode]

스냅 샷 snap0ubu1 컨테이너로 복원됩니다.

부팅시 자동 시작 컨테이너

시스템을 부팅 할 때 컨테이너 (예 : 웹 서버 컨테이너)를 자동으로 시작할 수 있습니다. 이렇게하려면 $HOME/.local/share/lxc//config 에있는 컨테이너의 config 파일 로 이동 하여 다음 행을 추가하십시오 .

[소스 코드] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

첫 번째 줄은 부팅 할 때 컨테이너를 시작하도록 지정합니다. 두 번째는 다음 컨테이너를 시작하기 전에 시스템에 5 초 동안 기다리 라고 알려줍니다.

문제 해결

컨테이너를 시작하는 데 문제가 있으면 먼저 포어 그라운드 모드에서 lxc-start 명령을 실행하십시오. 예 :

[소스 코드] lxc-start -n ubu1 -F [/ sourcecode]

이렇게하면 현재의 오류 메시지표시 되어 문제의 성격을 파악하는 데 매우 유용합니다.

여러 컨테이너를 동시에 실행하는 데 따른 문제

한 번에 여러 컨테이너를 실행하려고하면 "할당량 도달"또는 "구성된 네트워크를 만들지 못했습니다."와 같은 오류가 표시 될 수 있습니다 . 이는 할당 된 것보다 더 많은 네트워크 인터페이스를 실행하고 있기 때문입니다. /etc/lxc/lxc-usernet 파일을 루트 로 수정하여 사용자가 실행할 수있는 네트워크 브릿지 수를 늘릴 수 있습니다. 다음과 같이 보일 수 있습니다.

[소스 코드] # USERNAME TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ sourcecode]

마지막 숫자 (이 예에서는 5)를 10과 같은 더 큰 숫자로 변경할 수 있습니다. 이렇게하면 최대 10 개의 컨테이너를 한 번에 실행할 수 있습니다.

Linux 컨테이너의 다른 용도

Linux 컨테이너에는 다양한 용도가 있습니다. 예를 들어 프로덕션 서버로 커밋하기 전에 웹 또는 데이터베이스 서버의 다양한 구성을 테스트 할 때 가벼운 테스트 상자로 사용할 수 있습니다. 또 다른 사용 사례는 응용 프로그램이 다양한 버전의 서로 다른 버전에서 어떻게 실행되는지 테스트하는 것입니다.

또한이를 사용하여 신뢰할 수없는 응용 프로그램을 격리 할 수 ​​있습니다. 이러한 응용 프로그램의 손상은 자체 컨테이너로 제한되며 호스트 시스템에는 영향을 미치지 않습니다. 컨테이너에서 GUI 응용 프로그램을 실행할 수는 있지만 상당한 시간과 노력이 소요되므로 권장하지 않습니다. 샌드 박스에서 GUI 응용 프로그램을 실행하려면 Linux에서 응용 프로그램을 샌드하는 방법에 대한 기사를 참조하십시오.

Linux 컨테이너와 동시에 여러 배포판 실행

따라서 풀 사이즈 가상 머신의 오버 헤드없이 단일 컴퓨터에서 여러 Linux 배포판을 실행하는 방법을 끝내십시오. 이 기술의 유용성은 귀하의 창의력에 의해서만 제한되므로 실험을하고 새로운 사용 사례를 찾아보십시오. 컨테이너를 설치하는 데 어려움이 있으면 의견 란에 질문하십시오.

Top