① 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
② 日誌的查看
1.首先需要堡壘機的地址,可能涉及許可權,找相應的開發開一個許可權,堡壘機上會有web終端的入口,或者終端裡面命令 ssh [email protected]
2.找到對應的模塊,進入到模塊裡面查看日誌
eg:student的日誌可以進入下面模塊查看
日誌的查詢模式:
1.按照時間節點查詢
2.不按照日期,直接進到業務日誌下面找
3.關鍵字過濾
4.動態實時查詢日誌
tail -f stdout.log 退出 ctrl+C
日誌常用的命令:
tail -f stdout.log
tail -f stdout.log | grep 'demo'
grep 'demo' stdout.log
grep 'demo' stdout.log -A 10 前 10 行
grep 'demo' stdou.log -B 10 後 10 行
grep 'demo' stdout.log -C 10 前後 10 行
grep 'fb51b67c01de0392b0d50f3bfe1 29df0' info-2020-06.log
grep正則
告警標記有機器、logID
mq 日誌(公司內用的是rocketmq,先知道mq消費事件,在查messagevent)
grep '發送消息' stdout.log,查詢到 messageId
grep 'messageId' stdout.log,到消費者機器查詢消費信息
某個介面404怎麼辦
常見原因:1)可能是Java服務沒啟動 2)url請求錯誤(全鏈路適用)
調試方法:找到對應的模塊,看下tomcat是否啟動,未啟動先啟動服務
ps -ef|grep tomcat可查看狀態;查出對應的pid
可以對進程進行強制殺死等操作【kill -1365 pid】
③ Docker常用命令,值得收藏
使用指定的鏡像來運行容器,並可選地在容器中運行指定的命令。
分離模式 :通過 -d 選項指定;容器會在任務(進程)結束時退出。
前台模式 :可以將控制台連接到容器中進程的標准輸入、輸出、錯誤;通過 -t 選項可以為其分配一個偽終端;通過 -i 選項可以保持標准輸入處於打開狀態。
--rm 選項能夠在容器退出時自動刪除容器。
羅列容器。
-a 選項可以列出所有的容器。
查看容器的詳細信息。
查看容器中運行的進程。
持續輸出容器的資源使用情況。
查看容器的埠映射。
查看容器的日誌(標准輸出、錯誤的內容)。
-f 選項可以持續輸出容器的日誌。
將本地終端的標准輸入、輸出、錯誤連接到容器。
在運行的容器中執行指定的命令。
使用 freezer cgroup 掛起容器中的所有進程(進程對掛起操作是無感知的)。
恢復容器中掛起的進程。
停止容器,終止容器中的進程:首先發送 SIGTERM 信號給容器中的進程,一段時間之後發送 SIGKILL 信號。
啟動停止的容器(還是運行之前給定的命令)。
刪除指定的容器。
--force 選項可以強制性刪除運行的容器。
在容器和主機之間拷貝文件、目錄。
將容器的文件系統(不包括卷的內容)導出為 tar 文件,後續可通過 docker import 來載入鏡像。
查看所有的頂層鏡像。
-a 選項可以查看所有的鏡像。
搜索 docker hub。
拉取鏡像。
基於源鏡像創建一個包含 tag 的鏡像。
推送鏡像。
從 tar 文件中載入鏡像。
保存鏡像為 tar 文件,後續可通過 docker load 來載入。
可通過 -o 選項將鏡像保存至指定的文件,默認輸出到標准輸出。
從標准輸入或 tar 文件中載入鏡像。
-i 選項指定從 tar 文件中載入鏡像。
刪除本地鏡像。如果 IMAGE 包含了 tag,且該鏡像具有多個 tags,則此命令只是移除該 tag,而不會刪除鏡像。
-f 選項可強制刪除運行容器所用的鏡像。
④ Docker logs 命令參數&使用場景
Docker logs 用於查看容器運行日誌
docker logs :用於輸出容器的所有日誌,需要注意容器的日誌總量
docker logs --detail:顯示詳細信息
docker logs -t :針對每行日誌添加時間戳
docker logs -f:跟蹤實時日誌輸出
docker logs --tail n :輸出倒數N行的日誌
docker logs --since 絕對時間/相對時間 (s,m,h):獲取從since開始的日誌
docker logs --until 絕對時間/相對時間(s,m,h):獲取until以前的日誌
⑤ linux查看日誌的命令是具體怎麼用
Linux查看日誌的命令有很多,比如tail、cat、tac、head、echo等,今天給大家介紹幾種常用的方法:
1、tail-實時查看變化的日誌
命令格式:tail [必要參數][選擇參數][文件]
-f:循環讀取
-q:不顯示處理信息
-v:顯示詳細的處理信息
-c<數目>:顯示的位元組數
-n<行數>:顯示行數
-q, --quiet, --silent:從不輸出給出文件名的首部
-s, --sleep-interval=S:與-f合用,表示在每次反復的間隔休眠S秒
2、head
跟tail相反,head是看日誌的前多少行
head -n 10 test.log:查詢日誌文件中的前10行日誌;
head -n -10 test.log:查詢日誌文件除了最後10行的其他所有日誌;
3、cat-搜索關鍵字附近的日誌
cat是由第一行到最後一行連續顯示在屏幕上
最常用的命令:cat -n filename | grep "關鍵字"
cat app.log | grep -C 5 '關鍵字':顯示日誌里匹配字串那行以及前後5行;
cat app.log | grep -B 5 '關鍵字':顯示匹配字串及前5行;
cat app.log | grep -A 5 '關鍵字':顯示匹配字串及後5行;
4、more
more命令是一個基於vi編輯器文本過濾器,它以全屏幕的方式按頁顯示文本文件的內容,支持vi中的關鍵字定位操作。
more的語法:more 文件名
⑥ linux查看日誌的命令是具體怎麼用
tail -f 日誌文件路徑主要用於查看實時的日誌記錄,屬於動態記錄查看。
cat日誌路徑主要用於查看靜態的歷史日誌記錄,一般跟路徑名稱,常見的這周類型的日誌記錄一般用管道符進行過濾篩選自己所需的記錄。
dmesg主要用於調試腳本或者命令,出現異常中斷來排查錯誤原因顯示的。
tail -n 10 test.log,查詢日誌尾部最後10行的日誌。
tail -n +10 test.log,查詢10行之後的所有日誌。
head -n 10 test.log,查詢日誌文件中的頭10行日誌。
head -n -10 test.log,查詢日誌文件除了最後10行的其他所有日誌。
操作命令
首先介紹一個名詞「控制台(console)」,它就是我們通常見到的使用字元操作界面的人機介面,例如dos。我們說控制台命令,就是指通過字元界面輸入的可以操作系統的命令。
例如dos命令就是控制台命令。要了解的是基於Linux操作系統的基本控制台命令。有一點一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)對大小寫是敏感的,也就是說,如果你輸入的命令大小寫不對的話,系統是不會做出你期望的響應的。
⑦ 2021-07-10 docker 啟動milvus失敗
之前在win10上啟動 milvus是正常的,現在換了一台centos筆記本,啟動失敗了。嘗試了不同版本的milvus,問題依舊。
docker ps 命令看不到啟動的容器。 docker ps -a 可以看到容器在剛啟動,就退出了
milvus的log文件夾下是空的
查看容器的日誌,命令為 sudo docker logs container_id
可以看到容器的啟動日誌里顯示:
Invalid cpu cache size: 4G
因為這台centos的筆記本配置弱雞,內存僅有4G。而milvus默認的要求是4+1=5G,因此啟動失敗
在milvus/conf/server_config.yaml 配置文件中,將cache_size 改為1GB。啟動成功
⑧ linux下web工程運行期間怎麼在控制台查看日誌
tail -f 日誌文件
⑨ Linux中的查看伺服器運行的日誌的命令是什麼呢
在 Linux 系統中,各種日誌文件(*.log)都存放於 /var/log 子目錄下面,你可以在超級用戶的狀態 # 下,進入 /var/log 子目錄,然後可以使用 more 命令查看你需要進行查看的日誌。
例如:
#cd /var/log<cr>
#more last.log<cr> (查看最後登錄 Linux 系統的用戶名都有誰)
⑩ linux伺服器中怎麼查看日誌內容
登錄
kbkiss
Linux查看日誌常用命令
1.查看日誌常用命令
tail:
-n 是顯示行號;相當於nl命令;例子如下:
tail -100f test.log 實時監控100行日誌
tail -n 10 test.log 查詢日誌尾部最後10行的日誌;
tail -n +10 test.log 查詢10行之後的所有日誌;
head:
跟tail是相反的,tail是看後多少行日誌;例子如下:
head -n 10 test.log 查詢日誌文件中的頭10行日誌;
head -n -10 test.log 查詢日誌文件除了最後10行的其他所有日誌;
cat:
tac是倒序查看,是cat單詞反寫;例子如下:
cat -n test.log |grep "debug" 查詢關鍵字的日誌
2. 應用場景一:按行號查看---過濾出關鍵字附近的日誌
1)cat -n test.log |grep "debug" 得到關鍵日誌的行號
2)cat -n test.log |tail -n +92|head -n 20 選擇關鍵字所在的中間一行. 然後查看這個關鍵字前10行和後10行的日誌:
tail -n +92表示查詢92行之後的日誌
head -n 20 則表示在前面的查詢結果里再查前20條記錄
3. 應用場景二:根據日期查詢日誌
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特別說明:上面的兩個日期必須是日誌中列印出來的日誌,否則無效;
先 grep '2014-12-17 16:17:20' test.log 來確定日誌中是否有該 時間點
4.應用場景三:日誌內容特別多,列印在屏幕上不方便查看
(1)使用more和less命令,
如: cat -n test.log |grep "debug" |more 這樣就分頁列印了,通過點擊空格鍵翻頁
(2)使用 >xxx.txt 將其保存到文件中,到時可以拉下這個文件分析
如:cat -n test.log |grep "debug" >debug.txt