Docker容器實踐之運行Python程序


Python鏡像文件及PyCode

項目目錄

Dockerfile

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt

COPY ./hello.py /usr/src/app/
VOLUME /usr/src/app

ENTRYPOINT ["python"]

Requirements.txt

PyMySQL
opencv-python

Hello.py

print('hello world!')

Calander.py

import calendar
yy = int(input("輸入年份: "))
mm = int(input("輸入月份: "))
print(calendar.month(yy,mm))

Mysql.py

import pymysql
 
# 打開數據庫連接
db = pymysql.connect("laughing_satoshi","ra9zer","123456","docker_mysql" )
 
# 使用 cursor() 方法創建一個游標對象 cursor
cursor = db.cursor()
 
# 使用 execute()  方法執行 SQL 查詢 
cursor.execute("SELECT VERSION()")
 
# 使用 fetchone() 方法獲取單條數據.
data = cursor.fetchone()
 
print ("Database version : %s " % data)

# 使用 execute() 方法執行 SQL,如果表存在則刪除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
 
# 使用預處理語句創建表
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""
 
cursor.execute(sql)

# SQL 插入語句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 執行sql語句
   cursor.execute(sql)
   # 提交到數據庫執行
   db.commit()
except:
   # 如果發生錯誤則回滾
   db.rollback()

# SQL 更新語句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
   # 執行SQL語句
   cursor.execute(sql)
   # 提交到數據庫執行
   db.commit()
except:
   # 發生錯誤時回滾
   db.rollback()

# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > %s" % (1000)
try:
   # 執行SQL語句
   cursor.execute(sql)
   # 獲取所有記錄列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
       # 打印結果
      print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
             (fname, lname, age, sex, income ))
except:
   print ("Error: unable to fetch data")

# 關閉數據庫連接
db.close()

Opencv.py

import cv2

#
src=cv2.imread('test.jpg')

# 垂直翻轉
img=cv2.flip(src,0)


# 寫入文件
cv2.imwrite("test-rotated.jpg", img)
print('Successed.')

部署運行

Hello world

  • sudo docker run --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy hello.py

日歷

  • sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy calander.py
  • 注意:由於用到了input,需要輸入內容,因此運行容器的時候需要用到-it參數,否則會報EOFError: EOF when reaeding a line的錯誤。

MySql

  • 注意:運行mysql.py前要先運行數據庫容器。然后通過 --link=容器名:容器別名 命令可以實現容器間的互訪,否則由於容器間的隔離性,py容器會找不到數據庫容器,即出現下圖錯誤

  • sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app --link=laughing_satoshi:laughing_satoshi dockerpy mysql.py

OpenCv

  • sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy opencv.py

實驗心得

  • 這次實驗花費時間在3個小時左右,相對前倆次實驗可以說是簡單多了,屬於比較入門的內容,感覺跟直接在linux下運行py代碼差別不大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM