Docker踩坑記錄
最近剛好在測試如何在Docker裡面執行Python程式的方式,由於我自己對Docker也不是太熟,然後就花了一些在踩坑 (~>.<~),雖然最後有實作出來,但發現自己還是很多地方不清楚的,不過,還是就先把過程先記錄下來吧 (不想面對現實 XD)
首先,我在Docker裡面有先下載了一個python images,雖然畫面上有兩個版本,不過因為是測試,所以我就刻意選用python:alpine這個版本 (而且這兩個檔案容量也差太多了吧,而且精簡版竟然還有內建vi、完整版竟然沒有 -.-)

所謂的Run Container就是把images去執行起來即可,不過這邊就先踩了第一個坑,而且還讓我困惑了很久,因為正常來說這邊是可以做port mapping的,若不能做,那我的Flask怎麼連? (然後我又很天真的以為這是不是這個images沒有網路服務的關係?)

後來在查了一些資料後才知道若是透過指令執行,其實是可以忽略這個問題的,然後這邊還學到另外一個指令是NOPOSE,不過這邊就先不提了
docker run -dt --name app1 -p 8080:8080 -v c:/app1:/app -d python:alpine
所以在指令執行之後,就順利把container給執行起來了

接著就踩了第二個坑 Orz
先來看原始程式碼,這個很常見的Flask的結構,有IP有指定特定的PORT,為了簡化問題,我還刻意把docker上開的port跟flask做成一致

然後也可以順利啟動Flask

然後開啟web也可以正常連得到

但用樣方式去啟用第二個Flask就不行了 Orz

Flask App的檔案

這是第二個Flask的連線畫面 (Port 8081)

確認一下,是真的有執行起來

然後又查了一下才發現,似乎Flask在Docker裡面的host ip都要改成0.0.0.0才可以,所以我就來嘗試看看
然後沒想到就這樣成功了 =.=

重點摘要
針對整個踩坑過程,我自己覺得學到滿多東西的
- Flask的host ip要改成0.0.0.0,這跟我自己在本機上寫的方式還有觀念有出入,查了一下,127.0.0.1 是一個環回地址,並不表示「本機」,「0.0.0.0」才是真正表示「本機端」,不過,在我自己的實體檔案上,Flask上打成0.0.0.0是沒辦法連到的 Orz
- 不要太習慣UI介面,指令可以解決的事情就用指令去解決 (不過這部分是我自己的觀念不足問題)
- 此外,在過程中我又多瞭解到在vscode裡面可以連線docker去處理事情,請搜尋套件「docker」跟「Remote Development」,前者是可以讓你管理Docker、後者則是可以讓你直接開啟container裡面的檔案 (不過速度有點慢就是了)
- 在作業系統上,同一個時間python預設只能啟動一個.py檔案,但透過Docker的方式,我就可以快速的部署不同的web app做測試,使用起來會方便許多