우분투의 LXD 컨테이너 소개

컨테이너는 여러 가지 이유로 유용합니다. 그들은 앱을 시스템의 나머지 부분과 분리합니다. 이식성이 좋고 복제 및/또는 다른 운영체제로 이동하기 쉽습니다. 리눅스의 경우에는 어떤 배포판에서도 동일하게 작동하며, 적응이 필요 없습니다. 만약 RedHat에서 Ubuntu로 컨테이너를 이동해야 한다면, 단순히 복사 작업만 하면 됩니다.

Docker는 단일 애플리케이션을 포함하기 위해 설계된 인기 있는 솔루션입니다: 예를 들어, MySQL 데이터베이스 서버입니다. LXD는 몇 가지 면에서 유사하지만 전체 운영 체제를 포함하도록 설계되었습니다. 이것은 특정 시나리오에서 유용합니다. 예를 들어, LXD 컨테이너를 생성하고, 데이터베이스 서버와 HTTP 서버를 설치할 수 있습니다. 그 안에 WordPress 웹사이트를 생성할 수 있습니다. 이제 이전 제공업체에 만족하지 않을 때 필요한 곳으로 이 LXD 컨테이너를 이동하여 클라우드 간 전환이 가능합니다. 그리고 컨테이너 복제가 쉬우므로 여러 클라우드 제공업체에 웹사이트를 업로드하여 중복적인 고가용성 설정을 만들 수 있습니다.

LXD는 QEMU나 VirtualBox처럼 하드웨어를 가상화하지 않기 때문에 매우 빠르며, 거의 네이티브 속도로 실행됩니다.

LXD 설치 및 구성

터미널을 열고 LXD와 ZFS 유틸리티를 설치하여 일부 작업의 속도를 높이고 컨테이너 작업 시 디스크 공간을 절약하세요.

sudo apt install zfsutils-linux lxd

lxd-apt-install

LXD 구성을 시작합니다.

sudo lxd init

기본값을 선택하려면 ENTER를 누릅니다.

Size in GB of the new loop device (1GB minimum) [default=15GB]에서 많은 컨테이너를 생성할 것이라면 “50GB”와 같은 다른 값을 선택할 수 있습니다.

lxd-init-questions

LXD 배포 이미지 찾기 및 시작

모든 우분투 이미지 목록을 보려면:

lxc image list ubuntu: arch=amd64

lxd-ubuntu-images

많은 결과가 나올 것입니다. ARM 프로세서(예: Raspberry Pi 장치)는 장치와 같은 아키텍처의 이미지를 필요로 할 경우 arch=amd64를 생략할 수 있습니다.

앞의 그림에서는 읽기 쉽게 하기 위해 결과가 제한되었습니다(|head). 우분투 18.04의 핑거프린트(84a71299044b)가 강조 표시되었습니다. 해당 배포판으로 컨테이너를 시작하려면 다음과 같은 명령어를 사용합니다:

lxc launch ubuntu:84a71299044b

현재 이 명령은 권한 거부 오류를 반환할 것입니다. “lxd” 그룹에 있어야 합니다. 사용자 계정이 이미 이 그룹에 추가되었지만 활성화하려면 로그아웃 후 다시 로그인해야 합니다. 이를 피하고 싶다면 다음 명령어를 사용하고 “user”를 사용자 이름으로 교체하세요:

execsu - user

lxd-user-active-groups

이제 lxc 명령이 sudo 없이 작동합니다.

우분투가 아닌 배포판으로 LXD 컨테이너 시작

다음 명령은 다른 배포판이 무엇이 있는지 보여줍니다:

lxc image list images: arch=amd64

이미지를 시작하려면 핑거프린트 대신 목록에서 사용 가능한 별칭 이름도 사용할 수 있습니다.

lxc launch images:debian/9

lxd-launch-debian-9

문자열을 끝에 추가하면 컨테이너에 이름을 선택할 수 있습니다:

lxc launch images:debian/9 wordpress-site

LXD 컨테이너 관리

모든 컨테이너 목록을 보려면:

lxc list

lxd-lxc-list

“IPV4” 열은 인스턴스에서 실행 중인 서비스가 있는 경우 특히 중요합니다. 예를 들어, 인스턴스에서 Apache HTTP 서버가 실행되고 있다면 브라우저에 “10.234.232.246”을 입력하면 컨테이너에서 호스팅되는 웹사이트가 표시됩니다.

컨테이너를 중지하려면:

lxc stop name_of_container

이것은 비우분투 배포판에서는 매우 오랜 시간이 걸릴 수 있으며(또는 실패할 수 있습니다). 컨테이너에 접근한 후, 그 안에서 systemctl poweroff를 입력하여 중지하는 것이 좋습니다.

모든 방법이 실패할 경우, 다음과 같이 강제로 중지할 수 있습니다:

lxc stop name_of_container --force

시작하려면:

lxc start name_of_container

컨테이너 내부로 이동하려면:

lxc shell name_of_container

lxd-shell-debian

“sudo apt install”를 통해 프로그램을 설치하고 정상적인 리눅스 배포판에서 하는 모든 작업을 수행할 수 있습니다. 예를 들어 Apache 서버를 구성합니다. 컨테이너에서 나가고 싶을 땐 단순히:

exit

LXD 컨테이너 간 파일 전송

컨테이너에 파일을 업로드하려면:

lxc file push /path/to/local/file name_of_container/path/to/uploaded/file

생성할 파일의 이름을 포함시켜야 하며, 업로드할 디렉토리만 포함하면 안 됩니다. 예를 들어:

lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.png

파일 대신 디렉토리를 업로드하려면:

lxc file push /path/to/local/directory name_of_container/path/to/remote/directory --recursive--verbose

예제:

lxc file push /bin accurate-colt/tmp --recursive--verbose

컨테이너에서 메인 운영 체제로 디렉토리를 다운로드하려면:

lxc file pull name_of_container/path/to/remote/directory /path/to/local/directory --recursive--verbose

예제:

lxc file pull accurate-colt/tmp /tmp --recursive--verbose

결론

이것은 LXD 컨테이너의 기본 사용을 다룹니다. 스냅샷 및 롤백, CPU 및 RAM과 같은 리소스 제한 설정, 컨테이너 복제 등이 있는 고급 기능이 있습니다. 독자들이 이 주제에 관심이 있다면 향후 튜토리얼에서 다룰 수 있습니다.