使用docker容器进行项目开发

一、在容器中运行数据库

在容器中运行 MySQL 之前,我们将创建几个卷,Docker 可以管理这些卷来存储我们的持久数据和配置。在容器中运行 MySQL 之前,我们将创建几个卷,Docker 可以管理这些卷来存储我们的持久数据和配置。

$ docker volume create mysql
$ docker volume create mysql_config

2. 现在我们将创建一个网络,我们的应用程序和数据库将使用该网络相互通信。该网络称为用户定义的桥接网络,它为我们提供了一个很好的 DNS 查找服务,我们可以在创建连接字符串时使用它。

$ docker network create mysqlnet

3.  现在我们可以在容器中运行 MySQL 并附加到我们上面创建的卷和网络。

docker run --rm -d -v mysql:/var/lib/mysql -v mysql_config:/etc/mysql -p 3306:3306 --network mysqlnet --name mysqldb -e MYSQL_ROOT_PASSWORD=149789 mysql:8.0

4. 现在,让我们确保我们的 MySQL 数据库正在运行并且我们可以连接到它。使用以下命令连接到容器内正在运行的 MySQL 数据库,并在提示输入密码时输入“149789”:

<span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code><span style="color:#00688b">$ </span>docker <span style="color:#658b00">exec</span> <span style="color:#8b008b">-ti</span> mysqldb mysql <span style="color:#8b008b">-u</span> root <span style="color:#8b008b">-p</span>
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or <span style="color:#cd5555">\g</span><span style="color:#658b00">.</span>
Your MySQL connection id is 8
Server version: 8.0.23 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type <span style="color:#cd5555">'help;'</span> or <span style="color:#cd5555">'\h'</span> <span style="color:#8b008b">for </span>help. Type <span style="color:#cd5555">'\c'</span> to clear the current input statement.

mysql></code></span></span>

5.  将应用程序连接到数据库

import pymysql
import json
from flask import Flask

app = Flask(__name__)

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

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


  cursor.execute("SELECT * FROM widgets")

  row_headers=[x[0] for x in cursor.description] #this will extract row headers

  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 = pymysql.connect(
    host="mysqldb",
    user="root",
    password="149789"
  )
  cursor = mydb.cursor()

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

  mydb = pymysql.connect(
    host="mysqldb",
    user="root",
    password="149789",
    database="inventory"
  )
  cursor = mydb.cursor()

  cursor.execute("DROP TABLE IF EXISTS widgets")
  cursor.execute("CREATE TABLE widgets (name VARCHAR(255), description VARCHAR(255))")
  cursor.execute('insert into widgets(name, description) values("bbb", "bbb"), ("aaa", "aaa");')
  mydb.commit()
  cursor.close()

  return 'init database'

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

6.  根据镜像创建容器添加到数据库网络,然后运行我们的容器。这允许我们通过其容器名称访问数据库。

docker run --rm -it --network mysqlnet --name flask_demo_cn -p 8000:5000 flask_demo_img

7. 打开浏览器访问三个接口试试吧:

使用docker容器进行项目开发使用docker容器进行项目开发使用docker容器进行项目开发

 成功了。

二、使用compose在本地开发

未完待续...

上一篇:Android获取视频文件列表


下一篇:Android 获取图片文件列表