寫在前面的話:
本人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/