웹사이트 검색

RHEL, Rocky 및 AlmaLinux에 LXC(Linux 컨테이너) 설치


LXD는 컨테이너 내부에서 실행되거나 가상 머신으로 실행되는 Linux 시스템에 몰입형 기능을 제공하는 차세대 컨테이너 및 가상 머신 관리자로 설명됩니다.

다양한 스토리지 백엔드 및 네트워크 유형을 지원하여 엄청나게 많은 Linux 배포판에 대한 이미지를 제공합니다. 또한 개별 PC/노트북은 물론 클라우드 인스턴스에도 이미지를 설치할 수 있는 옵션도 제공합니다.

LXD를 사용하면 세 가지 방법으로 컨테이너와 VM을 관리할 수 있습니다. lxc 클라이언트나 명령줄 도구, REST API 또는 타사 통합을 활용할 수 있습니다.

LXD 기능

주목할만한 LXD 기능은 다음과 같습니다.

  • LXD는 다양한 Linux 배포판을 위한 이미지 기반 이미지입니다.
  • 보안을 최우선으로 고려하여 제작되었습니다.
  • 컨테이너와 상호 작용하기 위한 REST API 및 lxc 명령줄 도구를 제공합니다.
  • 광범위한 스토리지 백엔드, 스토리지 볼륨 및 스토리지 풀을 지원합니다.
  • 네트워크 관리는 브리지 네트워크와 교차 호스트 터널 생성을 통해 이루어집니다.
  • CPU, RAM, 디스크 사용량, 블록 I/O, 커널 리소스 등의 리소스를 고급으로 제어합니다.
  • 유연성과 확장성 – PC에 컨테이너를 배포하고 다양한 노드에 수천 개의 컨테이너를 집계할 수 있는 클러스터를 구성할 수 있습니다.

LXC란 무엇인가요?

LXD에서 제공하는 lxc 명령줄 클라이언트 도구와 혼동하지 마세요. LXC(Linux 컨테이너)는 강력한 API 및 기타 도구를 사용하여 사용자가 단일 호스트에서 컨테이너와 가상 머신을 원활하게 생성하고 관리할 수 있도록 하는 널리 사용되는 OS 수준 가상화 기술입니다. 이는 템플릿, 도구 언어 및 라이브러리 바인딩으로 구성됩니다.

LXC 특징

LXC는 다음 커널 기능을 활용하여 프로세스를 처리합니다.

  • 커널 네임스페이스: pid, mount, uts network 및 user.
  • CGroup(제어 그룹).
  • Chroots – 피봇루트를 사용합니다.
  • Seccomp 정책.
  • SELinux 및 Apparmor 프로필.

Linuxcontainers.org는 LXDLXC를 모두 지원하는 포괄적인 프로젝트입니다. 그 목표는 Linux 컨테이너 기술을 위한 배포판 및 공급업체 중립적 플랫폼을 제공하는 것입니다.

소개를 마치고 이제 CentOS, Rocky Linux<와 같은 RHEL 기반 Linux 배포판에서 LXC 컨테이너를 생성하고 관리하는 방법을 시연하겠습니다.AlmaLinux.

요구사항

최소한의 설치로 작동하는 Linux 운영 체제:

  • RHEL 리눅스 설치
  • CentOS 리눅스 설치
  • 록키 리눅스 설치
  • AlmaLinux 설치

1단계: SELinux를 허용 모드로 설정

즉시 SELinux를 구성하고 이를 허용으로 설정하는 것부터 시작하겠습니다. 하지만 그렇게 하기 전에 다음과 같이 시스템 패키지를 업데이트해 보겠습니다.

sudo dnf update

SELinux를 허용으로 설정하려면 다음 명령을 실행하세요.

sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

이를 적용하려면 서버를 재부팅하십시오.

sudo reboot

그리고 SELinux의 상태를 확인하세요.

getenforce

2단계: EPEL 저장소 설치

EPELRedHat Enterprise Linux 및 기타 RHEL 기반 배포판을 위한 고품질 패키지 세트를 제공하는 Fedora 프로젝트의 저장소입니다.

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo yum install epel-release

3단계: 커널 매개변수 추가

LXD를 설치하기 전에 몇 가지 추가 매개변수가 필요합니다. 따라서 루트 사용자로 전환하십시오.

su -

그리고 아래와 같이 매개변수를 추가합니다.

grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)"
echo "user.max_user_namespaces=3883" | sudo tee -a /etc/sysctl.d/99-userns.conf

매개변수가 설정되면 계속 진행하여 스냅을 활성화합니다.

4단계: Snap 설치 및 활성화

RHEL 8LXD를 설치하는 가장 간단한 방법은 스냅 패키지로 설치하는 것입니다. 하지만 먼저 다음과 같이 snap을 설치해 보겠습니다.

sudo dnf install snapd

그러면 표시된 대로 다른 Python 종속성과 함께 snapd 데몬 또는 서비스가 설치됩니다.

스냅이 설치된 상태에서 진행하여 기본 스냅 통신 소켓을 활성화합니다.

sudo systemctl enable --now snapd.socket

또한 /var/lib/snapd/snap에서 /snap으로의 심볼릭 링크를 생성하여 클래식 지원을 활성화합니다.

sudo ln -s /var/lib/snapd/snap  /snap

스냅 경로를 업데이트하려면 시스템을 다시 시작하세요.

sudo reboot

5단계: LXD 컨테이너화 관리자 설치

스냅에서 LXD를 설치하는 방법에는 두 가지가 있습니다. 그림과 같이 최신 버전의 LXD를 설치할 수 있습니다.

sudo snap install —-classic lxd

또는 다음과 같이 안정적인 최신 LTS 버전을 설치할 수 있습니다.

sudo snap install lxd --channel=4.0/stable

sudo 사용자로 전환하지 않고 lxc 명령을 실행하려면 현재 로그인된 사용자를 lxd 그룹에 추가하세요.

sudo usermod -aG lxd $USER

사용자가 속한 모든 그룹을 나열하여 사용자가 lxd 그룹에 추가되었는지 확인합니다.

groups tecmint

그런 다음, 다음과 같이 newgrp 명령을 실행합니다.

newgrp lxd

이 명령은 로그인 세션 중에 현재 그룹 ID를 변경합니다. 현재 그룹 ID를 lxd라는 이름의 그룹으로 설정합니다.

6단계: LXD 환경 초기화

LXD 컨테이너 생성 및 관리를 시작하기 전에 명령을 실행하여 LXD 환경을 초기화해야 합니다.

lxc init

다음은 환경을 설정할 수 있는 일련의 프롬프트입니다. 기본값은 잘 작동하지만 원하는 대로 자유롭게 지정할 수 있습니다.

백엔드로 lvm 옵션을 사용하여 tec-pool이라는 스토리지 풀을 생성했습니다.

방금 구성한 LXD 환경을 확인하기 위해 사용할 수 있는 여러 명령이 있습니다. 예를 들어 기본 LXD 프로필을 표시하려면 다음을 실행합니다.

lxc profile show default

네트워크 어댑터와 IPv4IPv6 주소를 표시하려면 다음을 실행하세요.

lxc network list

다음과 같이 범위를 더 좁히고 lxdbr0 인터페이스에 대한 더 자세한 정보를 표시할 수 있습니다.

lxc network show lxdbr0

스토리지 풀을 확인할 수도 있습니다.

lxc storage list

스토리지 풀에 대한 복잡한 세부 정보를 추가로 얻을 수 있습니다.

lxc storage show tec-pool

실행 중인 lxc 컨테이너를 나열하려면 다음 명령을 실행하세요.

lxc list

현재로서는 아직 실행 중인 컨테이너가 없습니다. 따라서 열 레이블만 있는 빈 테이블을 얻게 됩니다.

7단계: 사전 빌드된 LXC 컨테이너 이미지 나열

Docker와 마찬가지로 LXC 플랫폼은 컨테이너를 만들 수 있는 사전 구축된 이미지 저장소를 제공합니다. 가상 머신을 포함하여 모든 운영 체제에 대해 사전 빌드된 모든 이미지를 나열하려면 다음 명령을 실행하십시오.

lxc image list images: 

이는 모든 운영 체제에 대한 거대한 컨테이너 이미지 및 가상 머신 목록을 채웁니다. 특정 Linux 배포판으로 범위를 좁히려면 다음 구문을 사용하세요.

lxc image list images: grep -i os-type

예를 들어 Rocky Linux에 사용 가능한 이미지를 검색하려면 다음 명령을 실행합니다.

lxc image list images: grep -i rocky

Debian 이미지를 검색하는 경우 다음 명령을 실행하세요.

lxc image list images: grep -i debian

8단계: LXC 컨테이너 시작

lxc 컨테이너를 시작하려면 다음 구문을 사용하세요.

lxc launch images:{distro}/{version}/{arch} {container-name-here}

여기서는 Debian 10tec-container1Rocky Linux 8tec-container2라는 2개의 컨테이너를 실행합니다. .

lxc launch images:debian/10/amd64 tec-container1
lxc launch images:rockylinux/8/amd64 tec-container2 

lxc 컨테이너를 나열하려면 다음 명령을 실행하세요.

lxc list

출력에는 컨테이너에 대한 다양한 정보가 표시됩니다. 여기에는 컨테이너 이름, 상태(실행 중인지 중지됨), IPv4 및 IPv6 주소, 유형(컨테이너인지 가상 머신인지), 스냅샷 수가 포함됩니다.

실행 중인 컨테이너만 나열하려면 다음 명령을 실행합니다.

lxc list | grep -i running

마찬가지로 중지된 컨테이너의 경우 다음을 실행합니다.

lxc list | grep -i stopped

다음 명령을 사용하여 실행 중인 프로세스, CPU 및 메모리 사용률, 대역폭 등 컨테이너의 정보와 측정항목을 조사할 수 있습니다.

lxc info tec-container1 

9단계: LXC 컨테이너에 대한 셸 액세스 권한 얻기

다음 구문을 사용하여 컨테이너에 대한 bash 액세스 권한을 얻을 수 있습니다.

lxc exec container-name  name-of-the-shell

tec-container1에 대한 쉘 액세스 권한을 얻으려면 다음 명령을 실행합니다.

lxc exec tec-container1 bash

셸 액세스 권한을 얻은 후에는 다음과 같이 시스템 업데이트를 포함한 일반적인 셸 명령을 실행하여 루트 사용자로서 컨테이너와 상호 작용을 시작할 수 있습니다.

apt update

컨테이너를 종료하려면 다음 명령을 실행합니다.

exit

또는 다음 형식을 사용하여 셸에 액세스하지 않고 컨테이너에서 직접 명령을 실행할 수 있습니다.

lxc exec container-name command

예를 들어 패키지 목록을 업데이트하는 다음 명령을 실행하고 Debian 컨테이너에서 실행 중인 OS 버전을 확인하고 날짜를 확인할 수 있습니다.

lxc exec tec-container1 apt update
lxc exec tec-container1 cat /etc/debian_version
lxc exec tec-container1 date

10단계: 파일을 LXC 컨테이너로 끌어오기/푸시하기

수행할 수 있는 또 다른 작업은 컨테이너와 파일을 전송하는 것입니다. 이를 시연하기 위해 LXD 컨테이너에 새 디렉토리를 생성하고 해당 디렉토리로 이동하겠습니다.

mkdir data && cd data

다음으로 샘플 파일을 만들고 일부 데이터를 추가하겠습니다. 이를 위해 vim 편집기를 사용하여 샘플 파일을 만듭니다.

vim file1.txt

다음으로 샘플 텍스트를 입력하고 파일을 저장하겠습니다.

Hello World, Welcome to LXD containers.

컨테이너에서 로컬 호스트 시스템으로 파일을 가져오려면 다음 구문을 사용합니다.

lxc file pull {container-name}/{path/to/file} {/path/to/local/dest}

이 경우 명령은 다음과 같습니다.

lxc file pull tec-container2/root/data/file1.txt /home/tecmint

로컬 디렉터리에서 컨테이너로 파일을 푸시하거나 복사하려면 다음 구문을 사용하세요.

lxc file push {/path/to/file} {container-nane} /path/to/dest/dir/

이 경우 tec-container2<의 /root/data/ 경로로 복사되는 file2.txt라는 홈 디렉토리의 샘플 파일이 있습니다. 컨테이너.

lxc file push /home/tecmint/file2.txt tec-container2/root/data/

컨테이너에 파일이 있는지 확인하기 위해 다음을 실행합니다.

lxc exec tec-container2 ls /root/data

11단계: LXC 컨테이너 중지/시작/다시 시작 및 삭제

lxc 명령줄 유틸리티를 사용하면 컨테이너 중지, 시작, 다시 시작, 삭제와 같은 컨테이너 관리 작업을 수행할 수 있습니다.

lxc 컨테이너를 중지하려면 다음 구문을 사용하세요.

lxc stop container-name

예를 들어, tec-container1을 중지하려면 다음 명령을 실행합니다.

lxc stop tec-container1

lxc 컨테이너를 시작하려면 다음 구문을 사용하세요.

lxc start container-name

예를 들어 tec-container1을 시작하려면 다음을 실행합니다.

lxc start tec-container1

lxc 컨테이너를 모두 다시 시작하려면 다음 명령을 실행합니다.

lxc restart tec-container1
lxc restart tec-container2

lxc 컨테이너를 삭제하려면 먼저 컨테이너를 중지한 후 삭제해야 합니다. 예를 들어 삭제하려면 다음 명령을 실행합니다.

lxc stop tec-container1
lxc delete tec-container1

또는 표시된 대로 이 두 명령을 결합할 수 있습니다.

lxc stop tec-container1 && lxc delete tec-container1

12단계: LXC 명령줄 옵션에 대한 도움말 보기

LXC에서 제공하는 다른 명령 옵션에 대한 도움말을 보려면 다음 명령을 실행하면 됩니다.

lxc --help
OR
lxc command --help e.g
lxc file --help

결론

지금까지 LXD 컨테이너와 lxc 명령줄 유틸리티 도구를 사용하여 컨테이너를 만들고 관리하는 방법에 대해 자세히 알아보았습니다. 이 가이드가 도움이 되셨다고 믿습니다.