背景故事

話說去年年底給另外一個組的同僚寫了一個簡單的工單查詢系統,用flask寫的,當時是部署在我們組的一台測試實體機上,作業系統是Redhat 7。後來我們組的這台測試實體機要做其它用途,上司給兩天時間讓把應用遷走,問了使用這個應用的同僚,他們組自己有一台測試機,可以部署到他們自己的測試機上,于是又搞一通部署。最近使用這個應用的同僚又跑過來找我,說他們那台測試機要重裝系統,有其它用途。徹底無語,忍無可忍了,用docker吧!搞完之後總結一下,記個筆記。
準備環境
Linux OS
Docker Engine
Docker安裝請參考官網:https://docs.docker.com/engine/install/centos/#install-using-the-repository
環境準備好之後開搞
Dockerfile内容如下:
接下來我們來建構我們自己的docker image:(注意不要把點号給遺漏了!-t參數指定tag,也就是你的docker image叫什麼名字)
恭喜你,你已經成功建構了一個自己的docker image:mypyalpine,那我們現在來讓他跑起來:
簡單介紹一下:
docker run:想要跑一個docker,必須要敲的指令
-p 5050:5000:指定端口映射,冒号前面的是暴露到外面的端口号,冒号後面的是在docker裡面的端口号
--name myflask:指定将要跑起來的docker的名稱,可選參考,但是推薦加上,否則docker服務會自己随機給你的docker起個名字,你都不認識,是以自己的孩子還是起個好聽點的名字,友善自己記憶和使用。
mypyalpine:這個是上一步我們建構docker image時,給image起的名字,這個必須指定,别指定錯了。
小夥伴發現了沒有,上面我們運作docker之後,終端直接顯示的我們的flask程式啟動的資訊,沒辦法再輸入其它指令了,如果你想繼續輸入指令怎麼搞?是以上面運作docker的指令格式不是太好,我們再來改造一下,讓我們的docker啟動之後在背景運作,隻需加上一個 -d參數即可,然後我們再用docker ps來檢視正在運作的container資訊:
注意:如果你第一次運作docker run沒有加 -d參數,想再次運作docker run加-d參數,是會報錯的,此時你需要先停止目前運作的container,然後删除container,最後再運作加上 -d參數的指令就可以了。
我們現在來通路一下flask網站:http://192.168.137.200:5050
可能大家對上面我們拉取的base image有點疑問,為什麼選擇python:3.7-alpine這個image作為我們的base image來建構我們的docker?原因很簡單:身材苗條。我們可以看一下build好的image mypyalpine大小和一個ubuntu或者centos的image大小比較:
myflask這個是我用python:3.6這個base image建構的,925MB,将近1GB.
mypyalpine這個是我們用python:3.7-alpine建構的,隻有83.8MB,不到100MB.
最後,Enjoy your Docker!
後記:
如果你的網絡環境中有代理,可能在運作到dockerfile裡pip install包的時候出現下面的錯誤:
解決辦法:
在dockerfile裡,在FROM那一行下面,添加如下格式的ENV http_proxy和ENV https_proxy資訊,儲存即可。
ENV http_proxy http://UserName:[email protected]:911/
ENV https_proxy http://UserName:[email protected]:911/