部署python項目:將需要輸入文件的python程序制作Docker鏡像並運行容器


寫在前面的話:

       本人Docker小白一枚,由於前一陣需要將實習單位的代碼利用Docker打包成images然后供多用戶使用,所以從頭開始學習Docker,參考了一些書、視頻,發現除了講解大家都知道的基本操作之外,對於程序制作鏡像這一我需要重點學習的部分,講解的程序都十分簡單,例如打印Hello Docker!或簡單的flask網頁程序。但我需要打包的程序是需要讀入文件的程序,網上查了很多資料沒有找到類似的,所以在這里想要分享出來,因為我技術有限,在完成打包鏡像這一任務的時候,很可能有更為簡單的方法,請多多指教,這篇文章使用的Docker命令都十分簡單,只要看過一點Docker,應該都可以看懂~

  •  這篇博客講什么?

    我要將一個簡單的讀取txt並輸出的python程序打包制作成鏡像后,使用scp命令把python程序需要的文件從另一個服務器上傳輸進docker容器,並讓該python程序鏡像的容器輸出結果

  • 我的工作環境:硬件環境:兩台均搭載Centos 7的Linux服務器,且兩台服務器之間可以ping通互相訪問,一台安裝了docker,另一台有沒有docker無所謂,如果你只是想試試,那么兩台虛擬機也應該是可以的

1.制作鏡像


 

  • 我使用的制作鏡像方法是Dockerfile+python程序制作鏡像,我的python文件名為docker_test.py

1.1 python文件代碼

該python文件實現了一個簡單的讀入VID.txt文件,然后輸出txt文件內容的簡單功能,但該文件特點是需要讀入文件,若你有更復雜、大型的項目,原理是一樣的。

import os

def main():

    with open(r'VID.txt', encoding="utf-8") as file:
        # file 文件類型的對象
        print(type(file))
        print(file)

        # 讀文本的全文並打印出來
        print(file.read())

        # 這個時候再讀的話,返回EOF
        print(file.read())


if __name__ == '__main__':
    main()

1.2 Dockerfile   

Dockerfile是我使用制作鏡像方法的必要內容,若對其參數有困惑,可以查看文檔,鏈接如下:https://docs.docker.com/engine/reference/builder/

# 基於的基礎鏡像
 FROM python:3.6
#
# # 維護者信息
#
# MAINTAINER xiaobao  543010129@qq.com
#
# # 代碼添加到code文件夾
 COPY pythontest.py /code/
# # 設置code文件夾是工作目錄
#
  WORKDIR /code
#
# # 安裝支持
#
#
  CMD ["python", "pythontest.py"]

 

1.3創建鏡像流程:

  • 利用ssh登陸服務器,我用的是xshell登陸的
  • 創建一個dockertest文件夾並進入
mkdir dockertest

 

cd dockertest

 

  • 將上面的python程序和Dockerfile通過vim寫入到dockertest文件夾中,這里如果報錯很有可能是因為你沒有安裝vim,參考這篇博客:https://www.cnblogs.com/raorao1994/p/8890751.html
vim pythontest.py

 

vim Dockerfile
  • 這個時候用 ls命令查看一下 你寫的文件是否在文件夾下,如果顯示 Dockerfile  pythontest.py 就沒有問題
  • 利用docker build命令進行創建鏡像
  • docker build官方文檔:https://docs.docker.com/engine/reference/commandline/build/    我實際上輸入的是下面這個,最后有個點不要忘記了
 
        
 docker build -t pythontest 
  • 然后顯示制作鏡像成功



2.運行容器


前面我們已經成功地制作了pythontest程序的鏡像,現在我們運行一下鏡像看看docker run 命令文檔:https://docs.docker.com/engine/reference/commandline/run/

2.1運行容器

docker run --name pythontest -d pythontest

 

  •  結果不出所料,有問題,顯示容器被創建了,可什么結果都沒返回,利用docker ps -a查詢,發現容器確實存在,並且是exited狀態
  • 這里為方便對比,我們再創建一個容器pythontest_new,還是基於pythontest程序鏡像,使用如下命令創建
docker run --name pythontest_new -d -it pythontest /bin/bash

 

  •  這樣我們又創建了一個名為pythontest_new的容器,查看一下狀態發現他是持續運行的

3.傳輸文件到容器


  • 現在我們將python程序所需要的VID.txt文件傳輸到容器里
  • 在另一台服務器上,已經有用VIM寫好的VID.txt文件,內容是隨便寫的幾行字符串
  • 使用docker exec進入容器 docker exec命令教程:https://www.cnblogs.com/xhyan/p/6593075.html
  • 我們將另一台服務器上的文件通過scp命令傳輸到前面使用的這台服務器上,scp命令:scp [可選參數] file_source file_target如果不懂,可以看看這篇博客:https://www.cnblogs.com/linuxprobe-sarah/p/9902649.html
  • 我們可以看到,另一台服務器上的VID.txt文件被傳輸進docker 容器了,然后exit退出容器。


4.運行傳輸了文件的docker 容器


  • 這時候用docker命令查看一下容器列表
docker ps -a

 

  • 可以看到 我們前面創建的兩個容器,我們使用的是up狀態的名為pythontest_new的容器,按名字找到他在運行一下就好了
docker exec -it pythontest_new python pythontest.py

 

  • 可以看到結果被輸出了。這樣,我們就完成了將一個需要輸入文件的python程序打包成鏡像並且用scp命令給容器輸入文件並且啟動容器輸出結果。

參考資料:《第一本docker書》

     《Docker技術入門與實戰》

      docker官方文檔 :https://docs.docker.com/


免責聲明!

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



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