본문 바로가기

About/Linux

[Linux] Ubuntu에서 LXC 컨테이너 사용하기

Docker의 베이스 기술인 LXC를 사용해보겠습니다.


실행하는 모든 명령어는 root 권한으로 실행하길 바랍니다.


Ubuntu에 LXC 설치하는 명령어는 다음과 같습니다

apt update
apt install lxc

Ubuntu 컨테이너 실행

lxc-create 명령어를 통하여 ubuntu 컨테이너를 생성합니다.

lxc-create -n myContainer -t ubuntu

-n 플래그에 전달된 값은 컨테이너 이름이며, -t 플래그는 Ubuntu 템플릿으로 컨테이너를 만들라고 lxc에 명령합니다.

 

(처음에 시간이 조금 소요될 수 있습니다.)

간단하게 Ubuntu 템플릿으로  컨테이너를 생성해보았습니다.

 

사용할 수 있는 템플릿은 여러개 있는데 /usr/share/lxc/templates 디렉토리에 사용할 수 있는 템플릿 목록이 있습니다.

ls /usr/share/lxc/templates/

 

lxc templates

(Ubuntu에서는 Ubuntu 템플릿을 사용하는 것이 안전합니다..)

 

컨테이너 생성이 완료되었다면 lxc-ls --fancy 명령어를 통해 컨테이너의 상태를 확인해봅니다.

lxc-ls --fancy

 

생성된 컨테이너 확인

myContainer라는 이름으로 생성된 컨테이너가 있지만, 실행된 상태는 아닙니다.

(STATE의 값이 STOPPED 입니다.)

 

lxc-start 명령어를 통해 컨테이너를 실행시킵니다.

lxc-start -d -n myContainer

생성할 때와 마찬가지로 -n 플래그로 실행할 컨테이너명을 지정합니다.

-d 플래그는 분리(detach)를 의미하며, 컨테이너가 현재 세션에 들어가지 않게 합니다.

 

이후 다시 lxc-ls 명령어를 통해 컨테이너의 상태를 확인하면 다음과 같습니다.

 

실행된 컨테이너 확인

컨테이너의 STATE가 RUNNING으로 바뀌었으며, ip 10.0.3.179가 할당된 것을 볼 수 있습니다.

(시큐어 셸(secure)을 이용하면 이 주소로 로그인할 수 있습니다.)

 

lxc-attach 명령어로 실행 중인 컨테이너의 root shell을 실행해보겠습니다.

lxc-attach -n myContainer

새로운 명령 프롬프트로 변경된 것을 볼 수 있습니다.

root@myContainer:/#

ip addr을 입력하여 네트워크 인터페이스를 확인해보겠습니다.

 

root@myContainer:/# ip addr

 

 결과는 다음과 같습니다.

 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
93: eth0@if94: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:67:0b:bc brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.3.179/24 brd 10.0.3.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe67:bbc/64 scope link
       valid_lft forever preferred_lft forever
root@myContainer:/# ^C

 

eth0 인터페이스에 IP 10.0.3.179가 할당되었는데, 이 IPv4 값이 앞에 실행한 lxc-ls --fancy 명령어에서 확인한 ip 주소입니다.

 

exit 명령어로 컨테이너에서 빠져나옵니다. 또는 shutdown -h now 명령어로 컨테이너를 종료할 수 있습니다.

 

root@myContainer:/# exit
root@weflnefkl:/home/ubuntu/user#    <-- 원래 명령 프롬프트로 돌아옴

컨테이너의 실체를 알아보겠습니다.

 

다음 디렉토리로 이동하여 내용을 확인합니다. (컨테이너를 종료하지 않은 채로)

# cd /var/lib/lxc
# ls
myContainer

 

좀 전에 생성한 컨테이너의 이름이 출력됩니다. 또 한번 이동하여 내용을 보겠습니다.

 

config 파일에는 컨테이너의 기본 환경 값이 설정되어있습니다.

 

container config 파일 내용

 

rootfs 디렉토리로 이동하여 내용을 살펴보겠습니다.

 

# cd rootfs
# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

 

익숙한 내용들이 보입니다.

이 디렉토리들은 FHS의 일부입니다, 컨테이너에서는 root 디렉토리 이지만, 호스트 컴퓨터의 파일 시스템 안에 있습니다호스트 컴퓨터의 관리자 권한이 있으면 디렉토리를 돌아다니며 어떤 파일이든 수정할 수 있습니다. ( 컨테이너가 실행되지 않은 경우에도)

 

이러한 특징 때문에 언젠가 컨테이너에 접근할 수 없게 되었을 때, 다음과 같이 접근하여 파일을 둘러보고 잘못된 설정 파일을 수정하여 다시 작동할 수 있게 할 수 있습니다.

 


Docker에 사용된 리눅스의 LXC 기술을 사용해보았습니다.