當前位置:首頁 » 存儲配置 » 更換容器配置文件如何生效

更換容器配置文件如何生效

發布時間: 2023-12-04 13:53:36

Ⅰ Docker:容器管理(啟動參數,查看容器和日誌,進入和修改容器)

摘要: Docker

容器是一個精簡版的操作系統,一般一個容器只運行一個應用,容器通過鏡像創建,使用 docker run 命令創建,容器起到了 隔離 作用,容器和容器之間獨享空間和網路等

容器的基本操作包括創建(啟動),停止,重啟,查看,檢查等,容器通過鏡像創建,使用 docker run 命令創建,需要指定run參數,鏡像名,容器執行命令,語句格式如下

在實際使用中啟動一個鏡像,例如

-e 設置環境變數,格式是 -e k1=v1 -e k2=v2 ,使得在docker鏡像中的程序能夠直接訪問到環境變數,同時可以作為配置參數放在docker run啟動鏡像的時候設置,而不是寫死在dockerfile在build的過程中,-e和dockerfile中的 ENV 變數作用相同,當變數重名時-e替換ENV,下面測試一些-e參數,在Dockerfile指定環境變數

直接構建成容器

開啟一個終端啟動容器內部,列印指定的環境變數a

此時在run指令中增加-e設置環境變數,可見-e替換了Dockerfile中指定的環境變數

因為一個鏡像可以啟動多個容器,所以可以通過設置不同-e達到設置不同配置參數的目的,比如下一個例子在Dockerfile中設置和將環境變數寫入yaml文件再供Python調用,執行的內容為列印yaml配置文件的參數內容,比如下面這個例子先看下目錄結構

其中config.yml是一個空配置文件,在run.sh中先使用echo寫入追加配置參數到config.yml在執行Python腳本

Dockerfile中啟動run.sh腳本作為容器執行命令

在啟動容器時,使用-e指定環境變數,在run.sh中echo將環境變數拿到和寫入配置文件,測試多次以不同的配置參數啟動容器如下

-v 設置掛載運行,將宿主機當前目錄下的文件掛載到容器中/home目錄下,例如

如果掛載的目錄和Dockerfile中的COPY的目錄不一致, -v會替代COPY或者ADD ,例如現在Docker中COPY一個文件到容器/home目錄下

同目錄下start.sh內容是列印1

構建鏡像結束後,指定-v啟動,起始掛載另外一個目錄,目錄下start.sh內容是列印2

docker run參數中最後的COMMAND會覆蓋Dockerfile中指定的 CMD ,例如執行echo 2替換原始Dockerfile中的CMD echo 1,輸出結果是2且執行完畢後退出

對於Dockerfile中的 ENTRYPOINT 指定的啟動命令docker run的COMMAND不會覆蓋,如果要覆蓋Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 參數,格式是

測試一個Dockerfile輸出1

在docker run中使用--entrypoint覆蓋Dockerfile中的ENTRYPOINT

容器啟動後通過 docker ps 或者 docker container ls 查看容器,可以增加額外參數比如 -a 顯示所有容器,默認只顯示運行的容器,可以增加 --no-trunc 參數使得顯示結果不截斷,例如

顯示結果分別顯示了容器的ID,鏡像,執行命令,創建時間,狀態,埠映射(宿主機->容器)和容器名稱。對於已經運行的容器可以使用 docker stop 停止,如果在docker run時增加--rm參數則停止的容器保留不會自動刪除,例如

除了docker stop命令還有一種停止容器的命令 docker kill ,相比於docker stop,docker kill是 強制立即停止 ,而docker stop是先給了容器10秒(默認)的時間,使得容器有一定的時間處理、保存程序執行現場, 優雅的退出程序 ,例如

在容器停止之後可以使用 docker start 再啟動一個停止的容器,例如

除此之外可以使用 docker restart ,此時容器可以使停止的也可以是在運行中的,例如

查看容器詳情使用 docker inspect ,比如

在以上截取的內容中展示了容器詳情,包括容器id,創建時間,執行命令和參數,執行狀態,容器pid,落腳點,環境變數,網路設置,埠映射等,也可以使用Go語言風格輸出指定的詳情,比如分別只看容器的pid和容器的執行命令

容器是一個操作系統,可以進入這個操作系統查看容器的運行情況,有多種方式進入容器,其中主要是使用 docker exec 進入容器,在一個運行中的容器中執行一個命令,使用 -it 並帶有 /bin/bash 命令就可以進入容器,比如

除了/bin/bash也可以是其他命令掛載exec後面則可以直接對一個運行中的容器執行命令,比如查看容器的進入落腳點路徑,容器中的內存情況

當容器以後台 -d 運行時,日誌運行在容器內部,可以進入容器內部查看日誌,也可以使用 docker logs 查看日誌,以一個flask api介面的容器為例,日誌寫入文件,同時也會輸出在flask的控制台

創建Dockerfile以及構建鏡像,啟動容器

啟動一個腳本不斷請求api介面

進入容器內部查看日誌

另一種方式是直接使用 docker logs 命令,比如使用 -f 追蹤輸出,並且從最後的第1行開始輸出

此時宿主機的logs目錄下為空,容器中的logs目錄下存在detail.log文件,如果使用 -v 將宿主機目錄掛載到容器作為容器寫入的目錄,則容器中數據的變動會同步到本地,這樣可以直接在本地查看日誌,修改容器啟動為 -v 掛載的形式

此時本地logs目錄下開始產生日誌,且這個日誌和容器內的logs目錄下一致

如果容器內的內容改變了,此時刪除容器從鏡像重新啟動容器則改動的內容將不會存在,如果相對修改過的容器保留下來則可以從容器生成新的鏡像,先測試以下容器內修改在刪除的容器後將不再生效,在已有容器中使用pip安裝Python包

此時退出容器,並且刪除容器,最後從鏡像重新生成容器

此時進入容器檢查,並不存在pymongo包

如果要容器變化保存下來需要以這個新容器生成一個鏡像,使用 docker commit ,語法如下

以新安裝pymongo的容器為例,對新容器使用docker commmit

新生成的鏡像叫做xiaogp/my_image_test:v2

從新鏡像啟動容器並進入容器查看存在新安裝的pymongo

熱點內容
maven3編譯jdk6項目 發布:2024-10-07 03:19:57 瀏覽:44
緩存的視頻無法剪輯 發布:2024-10-07 03:19:40 瀏覽:89
解壓工具RAR 發布:2024-10-07 02:42:49 瀏覽:352
蘋果網盤解壓 發布:2024-10-07 02:42:49 瀏覽:159
為什麼安卓蘋果手游不互通 發布:2024-10-07 02:31:28 瀏覽:280
如何刪除手機中的游戲緩存 發布:2024-10-07 02:11:28 瀏覽:874
解鎖資料庫用戶 發布:2024-10-07 01:55:54 瀏覽:828
關系資料庫的關鍵字是指 發布:2024-10-07 01:55:54 瀏覽:518
java資料庫date 發布:2024-10-07 01:55:21 瀏覽:459
安卓12如何開通運用許可權 發布:2024-10-07 01:29:54 瀏覽:137