docker

[kosa20241120] docker를 이용해 서버 구동하기 실습 (node.js, mariaDB)

jeri 2024. 11. 20. 17:02
반응형

1)  docker를 이용해 node.js 서버 구동하기 

  • centOS 에 simpleweb.js 작성하기
    • nano 로 작성함
//simpleweb.js 파일을 편집
const http = require('http');


http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
}).listen(7777);

 

 

 

 

 

 

 

 

docker run --privileged -d -p 7777:7777 -v /root:/root --name nodeweb node:lts-alpine node /root/simpleweb.js

  • 1) docker : 도커
  • 2) run : 이미지로 부터 새로운 인스턴스를 만든다.
  • 3) --privileged : 도커가 내 시스템에 접근해도 된다. - 보안적으로 허용해줘 (단, 레드햇 계열 리눅스들에만 필요!!!! centOS, rocky) 
  • 4) -d : 백그라운드
  • 5) -p : 포트 연결
  • 6) -v : 도커 볼륨 (디렉터리 연결)
  • 7) --name : 별칭
  • 8) 이미지 이름
  • 9) node /root/simpleweb.js   (도커 내에서 실행할 명령)

구동된 서버 확인

 

 

 

 

 

 

2)  docker를 이용해 MariaDB 서버 구동하기 

  •  mariaDB  이미지 받기 : docker pull mariadb

  • docker run --privileged -d -p 3306:3306 -v /var/kosa/mariadb:/var/lib/mysql --name mariadb -e MYSQL_ROOT_PASSWORD=admin  mariadb

  • centOS의 /var/kosa/mariadb 들어가서 파일들이 생겨났을 경우 서버가 구동되고 있다는것임

 

  • mariadb에 접속하기 : docker exec -it mariadb /bin/bash
    • 1) exec : 명령을 실행
    • 2) -it : 나한테 터미널 주세요
    • 3) mariadb : 인스턴스 별칭
    • 4) /bin/bash : 인스턴스 안에 있는 명령 (실행할 내용)

성공

 

 

3) 윈도우에 MariaDB client 설치 후 접속하기

  • mysql tools 설치 (command line) : https://mariadb.com/products/community-server/
  • 설치 후 cmd에 mysql --version 입력
  • 만일 설치했는데도 mysql 명령이 동작안하면 => cmd+R > sysdm.cpl  ->  고급옵션 (환경변수) 설정하기
  • 윈도우 -> CentOS의 MariaDB 접속

성공

 

 

 

4) 학점정보를 sqlite로 저장한 것을 mariadb로 변경 후 동작하도록 수정하기

   0) python에서 mariadb 사용하기 위한 라이브러리 -> pip install mariadb

   1) mariadb 연결위한 ip, port, 계정

   2) 연결하는 방법

   3) SQL 일부 변경

 

1) mariadb에 연결할 때 필요한 것이 무엇인가?

  • CentOS에서 docker start mariadb 로 실행시켜두기
  • mariadb root 계정으로 접속하기
    • mysql -h 192.168.56.104 -u root -p 혹은 (root/admin) => 윈도우에서 mariaDB client실행 사용 가능한 명령어
    • docker exec -it mariadb /bin/bash => centOS에서 mariaDB 실행
  • kosa database 만든 후 권한 부여해주기
    • create database kosa  => kosa database 생성
    • grant all privileges on kosa.* to 'kosa'@'%' identified by 'kosa1234' => 계정/권한 부여
  • 윈도우 cmd에서 kosa 계정으로 접속하기
    • mysql -h 192.168.56.45 -u kosa -p (kosa/kosa1234)

2) CSV를 maridb에 insert하는 코드로 수정 후 실행하기 (수정할 부분만 작성)

insert_CSV.py 수정 전
import sqlite3
conn = sqlite3.connect('./data/grade.db')
insert_CSV.py 수정 후

 

import mariadb
# MariaDB에 연결
conn = mariadb.connect(
    host="192.168.56.104",   # 호스트 이름 (예: "localhost")
    user="kosa",  # 사용자 이름
    password="kosa1234",  # 비밀번호
    database="kosa"  # 데이터베이스 이름
)
insert_CSV.py 수정 전
c.execute('''CREATE TABLE IF NOT EXISTS students
             (ID TEXT PRIMARY KEY NOT NULL,
             KOR INT NOT NULL,
             MATH INT NOT NULL,
             GRADE TEXT NOT NULL)''')
insert_CSV.py 수정 후
c.execute('''CREATE TABLE IF NOT EXISTS students (
             ID INT PRIMARY KEY NOT NULL,
             KOR INT NOT NULL,
             MATH INT NOT NULL,
             GRADE varchar(4))''')
show_CSV.py 수정 전
import sqlite3
def display_table():
    conn = sqlite3.connect('./data/grade.db')

 

show_CSV.py 수정 후
import mariadb
def display_table():
    conn = mariadb.connect(
    host="192.168.56.104",   # 호스트 이름 (예: "localhost")
    user="kosa",  # 사용자 이름
    password="kosa1234",  # 비밀번호
    database="kosa"  # 데이터베이스 이름
    )

 

 

3) 웹화면에도 출력해보자~ (flask 이용)

webGrade.py
# import flask

# 필요한 라이브러리 가져오기
# import sqlite3
import mariadb
from flask import Flask, render_template

# Flask 앱 초기화
app = Flask(__name__)

# 루트 경로("/") 정의
@app.route('/')
def display_table():
    
    # 데이터베이스 연결 및 데이터 조회
    # conn = sqlite3.connect('./data/grade.db')
    conn = mariadb.connect(
    host="192.168.56.104",   # 호스트 이름 (예: "localhost")
    user="kosa",  # 사용자 이름
    password="kosa1234",  # 비밀번호
    database="kosa"  # 데이터베이스 이름
    )
    c = conn.cursor()
    c.execute("SELECT * FROM students WHERE GRADE = 'A'")
    rows = c.fetchall()
    conn.close()
    print(rows)
    
    # 데이터를 웹 페이지로 전달
    return render_template('table.html', rows=rows)

# 애플리케이션 실행
if __name__ == '__main__':
    app.run()

 

반응형