Skip to content

linux container `lxc`

  • 리눅스 컨테이너 (시스템 레벨) [도커보다 빠름]
  • 도커 (애플리케이션 레벨)
  • 리눅스 컨테이너 안에서 도커 컨테이너를 구동할 수 있다.

리눅스 커널의 가상화, 격리 기능을 활용한 시스템 컨테이너 기술이기 때문에 리눅스 OS에서만 사용 가능하다. 도커는 리눅스가 아닌 윈도우, 맥에서도 실행할 수 있도록 하기 위해 OS 위에서 애플리케이션 레벨 가상화 레이어를 추가한 것이다. 도커의 이식성이 좀 더 자유롭기는 하지만, 생각해보자. 맥이나 윈도우 서버에 도커 프로젝트를 배포할 일이 있는가? lxc를 활용하면 도커가 아니더라도 배포하는 환경과 동일한 환경에서 개발할 수 있고, 게다가 애플리케이션 레벨 추상화 레이어가 없어 OS 레벨에서 동작하기 때문에 도커보다 더 빠르다.

위의 원리대로 맥에서 lxc를 구동하기 위한 초경량 alpine VM을 생성하고 그 안에서 간편하게 lxc를 사용할 수 있는 프로젝트가 있다. [macpine]을 사용하면 맥북에서도 lxc를 네이티브처럼 사용할 수 있다.

sknk-dev 구형 개발 서버는 multipass 버리고 이제는 lxc 호스트로만 사용한다. 컨테이너 전체 백업과 복원도 간편하다. 다만 재생성 시 인스턴스 ip가 바뀐다.

$ lxc ls
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
| dcamp-api | RUNNING | 10.165.216.190 (eth0) | fd42:47b8:578e:66c:216:3eff:fe87:ec93 (eth0) | CONTAINER | 0 |
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
| dcdc | STOPPED | | | CONTAINER | 0 |
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
| mcfamily | STOPPED | | | CONTAINER | 0 |
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
| mozo | RUNNING | 10.165.216.9 (eth0) | fd42:47b8:578e:66c:216:3eff:fe38:6347 (eth0) | CONTAINER | 0 |
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
| pgsql | STOPPED | | | CONTAINER | 0 |
+-----------+---------+-----------------------+----------------------------------------------+-----------+-----------+
# 백업 (컨테이너 전체)
$ lxc export dcamp-api /backup/lxc/damp-api.tar.gz --optimized-storage --instance-only --compression=gzip
# 복원
$ lxc import /backup/lxc/damp-api.tar.gz
# 생성
$ lxc launch ubuntu:noble drupal-cms --config=user.user-data="$(cat ~/cloud-init/mariadb.yml)"
$ lxc launch ubuntu:noble drupal-cms --config=user.user-data="$(cat ~/cloud-init/drupal-cms.yml)"