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/
(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 파일에는 컨테이너의 기본 환경 값이 설정되어있습니다.
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 기술을 사용해보았습니다.
'About > Linux' 카테고리의 다른 글
[Linux] LVM(Logical Volume Manager) 구성하기(CentOS 7) (0) | 2022.05.26 |
---|---|
[Linux] rsync로 아카이브 동기화(Linux 백업 동기화) (2) | 2021.07.19 |
[Linux] find 명령어로 파일 모으기(특정 파일만 압축하기) (0) | 2021.06.05 |
[Linux] Ubuntu에서 ssh 통신을 이용한 tar 아카이브 원격 저장 (0) | 2021.05.16 |
[Linux] Ubuntu에서 OpenSSH(openssh-client, openssh-server) 사용 (0) | 2021.05.13 |