“Ubuntu 18.04.6 LTS bionic” 버전으로 구축한 환경(hostname 예 : ubuntu-host)에 LXC(LinuX Containers)패키지를 설치하고 CentOS 7 컨테이너(hostname 예 : centos-guest)를 구축하는 방법을 소개합니다.
“LXC(리눅스 컨테이너)는 가상화 머신?” 에 대한 의문점은 다음 사이트를 참조 하십시오.
작업 환경
이 글은 Windows 10 Pro컴퓨터 환경에서 Hyper-V 기능(가상화 머신 구축)을 추가하고 “Ubuntu 18.04.6 LTS bionic”버전으로 설치한 Hyper-V 가상화 머신(hostname 예 : ubuntu-host)에 로그인 해서 작업했습니다.
명령 실행 대상 컴퓨터를 구분하기 위해 이 글에서는 다음과 같은 색으로 명령 프롬프트를 구분합니다.
- “Ubuntu 18.04.6 LTS bionic”를 설치한 호스트 환경 명령 프롬프트 [root@ubuntu-host]#
- “Centos 7” 컨테이너를 설치한 게스트 환경 명령 프롬프트 [root@centos-guest]#
Hyper-V 기능을 이용하여 “Ubuntu 18.04.6 LTS bionic”를 설치하는 방법은 다음 글을 참조 하십시오.
LXC 설치하기
lxc패키지를 다음과 같이 설치합니다. 의존관계에 있는 bridge-utils, libpam-cgfs, lxc-utils 패키지도 같이 설치됩니다. 이 글에서는 ifupdown, lxc-templates, lxctl 패키지는 설치하지 않았습니다.
[root@ubuntu-host]# apt -y install lxc
...중간 생략...
The following additional packages will be installed:
bridge-utils libpam-cgfs lxc-utils
Suggested packages:
ifupdown lxc-templates lxctl
The following NEW packages will be installed:
bridge-utils libpam-cgfs lxc lxc-utils
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 420 kB of archives.
...중간 생략...
Setting up lxc dnsmasq configuration.
Setting up lxc (3.0.3-0ubuntu1~18.04.1) ...
...중간 생략...
lxc패키지를 설치하면 다음과 같이 브릿지 네트워크 lxcbr0가 추가됩니다. 작성되는 컨테이너는 lxcbr0에 지정된 네트워크 어드레스(10.0.3.x)가 부여됩니다.
[root@ubuntu-host]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.214.153 netmask 255.255.240.0 broadcast 172.17.223.255
...중간 생략...
lxcbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.3.1 netmask 255.255.255.0 broadcast 0.0.0.0
“Centos 7 64bit” 컨테이너 작성하기
lxc-create 명령으로 CentOS 7 64bit 컨테이너를 작성합니다. (주의 사항) 인터넷 접속이 안 되거나, “— –keyserver hkp://keyserver.ubuntu.com” 옵션을 지정하지 않으면 다운로드 에러가 발생할 수 있습니다.
[root@ubuntu-host]# lxc-create -t download -n centos-guest -- --keyserver hkp://keyserver.ubuntu.com
Setting up the GPG keyring
Downloading the image index
---
DIST RELEASE ARCH VARIANT BUILD
---
...중간 생략...
centos 7 amd64 default 20221214_07:08
...중간 생략...
centos 8-Stream amd64 default 20221214_07:08
...중간 생략...
ubuntu bionic amd64 default 20221214_07:43
...중간 생략...
voidlinux current armhf default 20221213_17:25
이용 가능한 OS 목록이 표시되면 다음과 같이 Distribution: 표시 후에 centos를, Release: 표시 후에 7을, Architecture: 표시 후에 amd64 를 입력합니다.
---
Distribution:
centos
Release:
7
Architecture:
amd64
Using image from local cache
Unpacking the rootfs
---
You just created a Centos 7 x86_64 (20221214_07:08) container.
작성된 컨테이너 확인하기
lxc-ls 명령으로 작성된 컨테이너 상태 목록을 표시합니다. centos-guest 컨테이너는 정지(STOPPED) 상태입니다.
[root@ubuntu-host]# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
centos-guest STOPPED 0 - - - false
작성된 컨테이너 시작하기
lxc-start 명령으로 컨테이너를 시작하고 lxc-ls 명령으로 컨테이너 상태 목록을 표시합니다. centos-guest 컨테이너는 10.0.3.77 IP 어드레스로 “운영 중” 상태입니다. (주의 사항) IPV4 항목에 IP 어드레스가 표시되지 않는다면 네트워크 설정에 문제가 발생하였음을 의미합니다.
[root@ubuntu-host]# lxc-start -n centos-guest -d
[root@ubuntu-host]# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
centos-guest RUNNING 0 - 10.0.3.77 - false
다운로드 image 저장 장소
다음과 같이 /var/cache/lxc/download 장소에는 컨테이너 작성을 위해 다운로드 한 image가 저장됩니다.
[root@ubuntu-host]# ls /var/cache/lxc/download/centos/7/amd64/default
build_id config.2 config-user config-user.3 excludes-user templates
config config.3 config-user.1 config-user.4 expiry
config.1 config.4 config-user.2 create-message rootfs.tar.xz
참고로 /var/cache/lxc/download에 이전에 다운로드한 image가 존재하면 다음과 같은 “— -d centos -r 7 -a amd64” 옵션 지정으로 다운로드를 하지 않고 캐시에 존재하는 다운로드 image를 이용하여 컨테이너를 작성 할 수 있습니다. 캐시에 존재하는 다운로드 image를 이용한 컨테이너 작성 명령은 다음과 같습니다.
[root@ubuntu-host]# lxc-create -t download -n centos-guest -- -d centos -r 7 -a amd64
Using image from local cache
Unpacking the rootfs
---
You just created a Centos 7 x86_64 (20221214_07:08) container.
작성된 컨테이너에 접속하기
작성된 직후의 centos-guest 컨테이너는 sshd 서비스가 설치 되어있지 않아 ssh로 접속할 수 없습니다. lxc-attach 명령을 사용하면 root유저로 패스워드 인증 없이 호스트 환경에서 게스트 환경(centos-guest 컨테이너)으로 접속할 수 있습니다. 접속에 성공하면 명령 프롬프트가 [root@centos-guest]#로 변경됩니다.
[root@ubuntu-host]# lxc-attach -n centos-guest
[root@centos-guest]#
다음 명령으로 설치된 centos-guest 컨테이너의 버전을 확인합니다.
[root@centos-guest]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
다음 명령들을 실행하여 root 이외 관리자로서 centos를 작성합니다. wheel그룹에 소속하도록 변경하면 관리자 역할이 부여됩니다.
[root@centos-guest]# adduser centos
[root@centos-guest]# usermod -G wheel centos
[root@centos-guest]# id centos
uid=1000(centos) gid=1000(centos) groups=1000(centos),10(wheel)
passwd 명령으로 게스트 환경의 root, centos 유저의 패스워드를 지정합니다.
[root@centos-guest]# passwd root
New password: ********
Retype new password:: ********
[root@centos-guest]# passwd centos
New password: ********
Retype new password: ********
ssh로 접속 sshd패키지 설치하기
LXC컨테이너로 만든 게스트 환경에는 기본으로 sshd 서비스가 설치 되어있지 않습니다. 다음 명령으로 설치 합니다.
[root@centos-guest]# yum -y install openssh-server
[root@centos-guest]# systemctl start sshd.service
net-tools패키지 설치하기
그리고 기본으로 ifconfig 실행 파일이 존재하지 않습니다. 다음 명령으로 ifconfig 실행 파일을 설치합니다.
[root@centos-guest]# yum -y install net-tools
[root@centos-guest]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.3.77 netmask 255.255.255.0 broadcast 10.0.3.255
작성된 컨테이너에 console 접속하기
[root@ubuntu-host]# lxc-console -n centos-guest
Connected to tty 1
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
CentOS Linux 7 (Core)
Kernel 4.15.0-200-generic on an x86_64
centos-guest login:root
[root@centos-guest]#
호스트에서 게스트로 ssh접속하기
[root@ubuntu-host]# ssh 10.0.3.77 -l centos
호스트에서 게스트로 파일 전송하기
호스트 환경에서 게스트 환경으로 데이터를 전송하려면 다음과 같이 scp명령을 사용합니다.
[root@ubuntu-host]# scp /tmp/test.tar centos@10.0.3.77:/tmp/test.tar
작성된 컨테이너 정지하기
lxc-ls -f 명령으로 현재 기동 상태를 확인하고 lxc-stop -n centos-guest 로 정지 시킵니다. 다시 한 번 lxc-ls -f 명령을 통해 정지 상태로 변경되었음을 확인합니다.
[root@ubuntu-host]# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
centos-guest RUNNING 0 - 10.0.3.77 - false
[root@ubuntu-host]# lxc-stop -n centos-guest
[root@ubuntu-host]# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
centos-guest STOPPED 0 - - - false
작성된 컨테이너 재기동(정지/시작)하기
[root@ubuntu-host]# lxc-stop -r -n centos-guest
작성된 컨테이너 삭제하기
lxc-destroy명령으로 작성된 컨테이너를 삭제할 수 있습니다.
[root@ubuntu-host]# lxc-destroy -n centos-guest