ubuntu 18.0.6LTS에 LXC설치하고 CentOS 7 64bit 컨테이너 작성하기

linux Linux

“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
제목과 URL을 복사했습니다