# Docker練習 ## Dockerfile ![](https://hackmd.io/_uploads/HkBjLJkvn.png) ### CMD注意事項 1. Dockerfile中只能有一行CMD,若有多行CMD,則只有最後一行會生效。 2. 若在建立Container時有帶執行的命令,則CMD的指令會被蓋掉。 例如:單純執行docker run 時,CMD所定義的指令一樣會被執行,但當執行docker run bash時,因為多了bash指令,Container就會執行bash,而原本CMD中定義的值就會被覆蓋 ## 建立image ![](https://hackmd.io/_uploads/HJDxYnaLn.png) repository 為dockerimage_kuanru tag為latest ## 建立container並執行 ![](https://hackmd.io/_uploads/r1-eJ3RI2.png) 利用volume將本機的目錄映射到container中 偽輸入终端交互(-it)模式啟動一個容器以免docker自動關閉 ## 利用attach進入 #### 退出後會關閉container ![](https://hackmd.io/_uploads/HJx_Wp0L3.png) ![](https://hackmd.io/_uploads/rJLE4n0L2.png) ### Docker 啟動容器後馬上又自動關閉 #### 退出原因 1. docker容器執行需要有一個前台行程(process), 如果没有前台行程執行,容器認為空閒,就會自行退出 2. 容器執行的命令如果不是那些一直掛起的命令( 比如執行top、tail等),就是會自動退出 3. docker的機制問題 #### 解決方法 1. 增加-it 参數交互執行,且增加-d參數後台執行,這樣就能啟動一個一直停留在後台執行的容器了。 2. docker run -dit ubuntu /bin/bash ## 利用exec進入 #### 退出後container不會停止運作 ![](https://hackmd.io/_uploads/Skd3gT0I3.png) ## curl存圖片 ![](https://hackmd.io/_uploads/H1k0U3CI2.png) ## 利用flask建立伺服器 ![](https://hackmd.io/_uploads/Bk8zR2CU2.png) ## 執行結果 ![](https://hackmd.io/_uploads/rk1616RIn.png)