환경 설정

D+22 [ LXD, Docker, Flask 앱] 이해 & 실습

goodjop79 님의 블로그 2026. 5. 7. 17:53

ㅇ 일자 : 2026년 5월 7일(목)
ㅇ 주요 내용 : 우분투 리눅스 환경의 이해 및 실습 (Ubuntu, LXD, Docker, Flask 앱)

※ 아래 내용은 가상의 실습환경에서 실습한 예시 이므로  ip 호스트 등은 확인해서 수정해 주어야 함
 
1. 전체 구조

내 PC(Ubuntu)
 └─ LXD 컨테이너(kiosk-study)
      └─ Docker
           └─ Flask 앱(app.py)
      브라우저 → Flask 서버 → 메뉴 JSON 출력


2. 우분투 리눅스 환경에서 도커 사용 앱연동 실습 (Ubuntu, LXD, Docker, Flask 앱)



[0단계] — 시스템 업데이트
sudo apt update && sudo apt upgrade
또는
sudo apt update && sudo apt upgrade -y

 
[1단계] — LXD 설치


sudo snap install lxd

* 권한 적용:    newgrp lxd
* 진행이 안될 경우 명령문에서 sudo 추가 입력해서    권한을 부여해 준다
* 초기화:
  sudo lxd init --auto
 
[2단계] — 컨테이너 생성
lxc launch ubuntu:22.04 kiosk-study
또는
sudo lxc launch ubuntu:22.04 kiosk-study

* 정상적으로 생성되었는지 확인:
lxc list


 
[3단계] — Docker 최적화 사용 설정


# 권한설정이 안되어 있는 경우에는 sudo 를 추가해서 입력한다.
sudo lxc config............  
lxc config set kiosk-study security.nesting true
lxc config set kiosk-study security.privileged true
lxc restart kiosk-study

[4단계] — 컨테이너 접속 
# 권한설정이 안되어 있는 경우에는 sudo 를 추가해서 입력한다.
lxc exec kiosk-study -- bash
sudo lxc exec kiosk-study -- bash

# 사이뜨기1칸 -- 사이띄기 1칸 bash
# 컨테이너 접속이 완료되면 이렇게 표시됨: 
  root@kiosk-study:~#
# ~# 보이면 루트가 변경되었음을 확인할 수 있다. 나가려면 exit Enter


[5단계] — Docker 설치


컨테이너 내부에서 실행:
apt update
또는 
apt install docker.io -y

Docker 실행:
service docker start

정상실행 여부 확인:
docker --version
 


[6단계] — Flask 앱 만들기


# app.py 생성하기
  touch app.py   
# 나노화면창으로 이동해서 프로그램 코드 작성하기
  nano app.py
결과 : 나노화면창으로 이동(GNU nano 6.2 / root@kiosk-study:~)

# nano창에서 아래 코드를 작성해서 app.py 파일
내용을 작성한다.
from flask import Flask, jsonify
app = Flask(__name__)

# 메뉴 데이터
menu = [
    {"id": 1, "name": "Americano", "price": 4500},
    {"id": 2, "name": "Cafe Latte", "price": 5000},
    {"id": 3, "name": "Cheese Cake", "price": 6500}
]

@app.route("/")
def home():
    return "---- Kiosk Terminal Active ----"

@app.route("/menu")
def get_menu():
    return jsonify(menu)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

* 저장: Ctrl + O  Enter
* nano나가기: Ctrl + X


[7단계] — Dockerfile 만들기


nano Dockerfile

아래 내용 입력:

FROM python:3.10-slim

WORKDIR /app

RUN pip install flask

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]

 


 
[8단계] — Docker 이미지 빌드 (도커이미지 만들기)


docker build -t kiosk-app .
맨 끝 . 꼭 필요

정상적으로 성공하면:
Successfully tagged kiosk-app:latest


[9단계] — 컨테이너 실행  (아래 호스트는 예시이며 실제로 확인해서 기록해야 함)
docker run -d -p 0080:4000 kiosk-app
의미: 호스트 8080 → Flask 4000 연결
 
[10단계] — 실행 확인


# 컨테이너 내부에서 테스트
curl http://localhost:0080/menu

#결과: 정상 실행이 되었다면 기 작성한 값들이 나타난다.
[
 {"id":1,"name":"Americano","price":4500},
 ...
]


[11단계] — 외부(내 PC 브라우저)에서 접속
* 컨테이너 IP 확인: 도커창(:~#) 에서는 확인이 안되고, 터미널창(:~s) 열어서 명령 실행 
lxc list
예시 ip 확인 결과:      kiosk-study RUNNING 00.00.000.0:0080


[12단계] - 웹 브라우저 접속해서 주소창 입력 실행 (예시 IP)
예시: http://000.00.0.0:4000/menu     
#결과 화면
크롬 웹브라우저에 JSON 메뉴가 출력된다:

[
  {
    "id": 1,
    "name": "Americano",
    "price": 4500
  }
]

※  "터미널창"에서 결과값을 확인해 보고 "웹브라우저 주소창"에 hppt 링크를 입력해서 실행해 본다.
      또는 "터미널창"에 예시 http://localhost:0000 입력해서 로컬호스트를 확인해 본다.
 
<<최종 목표 흐름>>
브라우저
   ↓
Flask(/menu)
   ↓
JSON 메뉴 출력
   ↓
키오스크 화면 표시


   
<< 참고 사항 >>
- 개발툴이 뭔가? : nano창에서 입력한 코드들이 모두 개발툴이다.
- 파이썬은 절차지향 계산, 좌에서 우로, 상에서 하로,  그런데 대입연산자(=, !=)만 우에서 좌로 계산한다
-  리디렉션(redirection)은 표준 입출력의 방향을 바꾼다
   예) sort < list.txt
     sort < list.txt > out.txt
- 백그라운드 실행 : 명령어 맨끝에 한칸띄고 & 입력한다
- 교재 276~282 프로세스 관련 개념과 명령어 (찾아보기)

1. 리눅스 핵심 도구: 파이프, 필터, 리디렉션 

  가. 파이프 (|) : 한 명령의 출력을 다른 명령의 입력으로 연결하는 통로.  명령어1 | 명령어2 형태로 사용하며, 앞선 명령어의 결과를 다음 명령어가 처리하도록 전달한다.    예시: ls -l /etc | more (긴 목록을 페이지 단위로 확인)

  나. 필터 (Filter) : 입력을 받아 필요한 것만 걸러내어 출력하는 명령어들, 주로 파이프(|)와 함께 사용되어 데이터를 가공함.

                             예시: grep (문자열 검색), tail (끝부분 표시), wc (행/단어 수), sort (정렬), awk, sed.

  다. 리디렉션 (Redirection) : 표준 입출력(stdin, stdout, stderr)의 방향을 파일이나 다른 장치로 바꾸는 기술,

        > (새로 쓰기), >> (이어 쓰기), < (파일 입력)를 사용.

      예시: ls -l > filelist.txt (명령 결과를 파일로 저장)

 

2. RAID (Redundant Array of Independent Disks)
  • 정의 / 개념 : 여러 개의 하드 디스크(HDD/SSD)를 묶어 하나의 고성능·고용량 논리 디스크처럼 사용하는 기술.
  • 목적 : 데이터 안정성(이중화) 향상 및 입출력 성능 향상.

                   하드웨어 RAID (Hardware RAID)                                                  소프트웨어 RAID (Software RAID)

구현 방식 전용 RAID 컨트롤러 카드 사용 운영체제(커널)가 관리
성능 우수함 (독립적 CPU 사용) 하드웨어 대비 상대적으로 낮음 (CPU 공유)
비용 고가 (카드/장비 필요) 저렴함 (디스크만 있으면 됨)
안정성 높음 (컨트롤러 고장 시 같은 모델 필요) 유연함 (OS 재설치 시에도 구성 유지 가능)
주요 용도 고성능/대규모 엔터프라이즈 서버 소규모 서버, 워크스테이션
안정성과 성능이 필수적이면 하드웨어 RAID, 비용 효율성과 유연성이 중요하면 소프트웨어 RAID를 선택한다.