Cloud Study - Docker, mysql

2021. 3. 17. 02:35Work/Cloud_Devops

728x90
반응형

-> 컨테이너에서 데이터 베이스 실행

-> mysql을 실행하고 볼륨과 네트워크에 연결, 허브에서 이미지를 가져와 로컬에서 실행

-> mysql이 docker에 있는것을 확인할 수 있다.

-> 현재 생성된 mysql의 이름값이 sysqdb라는 것을 확일 할 수 있다.

: 컨테이너 내에서 실행중인 MySQL 데이터 베이스에 연결 합니다.

-> 애플리 케이션을 데이터 베이스(DB)에 연결

import mysql.connector
import json
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
  return 'Hello, Docker!'

@app.route('/widgets')
def get_widgets() :
  mydb = mysql.connector.connect(
    host="mysqldb",
    user="root",
    password="p@ssw0rd1",
    database="inventory"
  )
  cursor = mydb.cursor()


  cursor.execute("SELECT * FROM widgets")

  row_headers=[x[0] for x in cursor.description] 

  results = cursor.fetchall()
  json_data=[]
  for result in results:
    json_data.append(dict(zip(row_headers,result)))

  cursor.close()

  return json.dumps(json_data)

@app.route('/initdb')
def db_init():
  mydb = mysql.connector.connect(
    host="mysqldb",
    user="root",
    password="p@ssw0rd1"
  )
  cursor = mydb.cursor()

  cursor.execute("DROP DATABASE IF EXISTS inventory")
  cursor.execute("CREATE DATABASE inventory")
  cursor.close()

  mydb = mysql.connector.connect(
    host="mysqldb",
    user="root",
    password="p@ssw0rd1",
    database="inventory"
  )
  cursor = mydb.cursor()

  cursor.execute("DROP TABLE IF EXISTS widgets")
  cursor.execute("CREATE TABLE widgets (name VARCHAR(255), description VARCHAR(255))")
  cursor.close()

  return 'init database'

if __name__ == "__main__":
  app.run(host ='0.0.0.0')

-> 변경 사항을 포함하도록 이미지를 다시 빌드

$ pip3 install mysql-connector-python
$ pip3 freeze -r requirements.txt

-> 이제 이미지를 구축할 수 있다.

$ docker build --tag python-docker .

-> 컨테이너를 데이터베이스 네트워크에 추가한 다음 컨테이너를 실행

$ docker run \
  -it --rm -d \
  --network mysqlnet \
  --name rest-server \
  -p 5000:5000 \
  python-docker

 

-> 해당 IP를 통해 mysql 접근 가능한지 확인 할 수 있다.

-> 의심이 가서 test 사용자를 만들고 연결을 시도해 보았다.

: 잘 나오는 것을 확인 할 수 있다.

 

docker conatiner 삭제
-> docker rm id

docker conatiner 확인
-> docker ps 
-> docker ps -a

docker images 삭제
-> docker rim id

 

 

 

*본 내용은 코멘토 직무 부트 캠프를 진행하면서 공부, 혹은 배용 내용들을 정리한 글입니다.

(AWS 해커톤 우승자 출신 글로벌 엔지니어와 클라우드 직무 A to Z)
728x90
반응형

'Work > Cloud_Devops' 카테고리의 다른 글

Cloud Study - AWS docker container, RDS  (0) 2021.03.23
Cloud Study - DevOps  (0) 2021.03.19
Cloud Study - Docker, Python, Flask  (0) 2021.03.16
Cloud Study - Docker  (0) 2021.03.15
Cloud Study - AWS EC2 설치, Ubuntu  (0) 2021.03.15