Docker 安裝ELK及Docker常見命令


最近搭建基於Spring Cloud的微服務框架,日誌系統當然最佳選擇就是ELK。看著MAC 那緊巴巴的配置,又不想熱情退去而留下一堆軟件,果斷選擇Docker安裝來節省那可憐的資源。當然這只是鵬哥的一點點小心思。

為什麼使用docker 這裡就不在贅述了,相信就算現在豬肉貴你沒吃過,但是新聞裡至少有豬的圖片你應該看過吧。這篇文章的主旨是搭建一個ELK(主要是elasticsearch + kibana,logstash會在spring cloud 繼承ELK的文章中介紹),Docker充其量是一個工具,但是磨刀不誤砍柴工,我們還是先來看看安裝ELK過程中用到的Docker命令吧。

Docker 常見命令

search 命令

下載鏡像之前我們應該先搜索到鏡像,搜索鏡像的命令:

<code>docker search [OPTIONS] TERM/<code>

OPTIONS說明:

  • --automated :只列出 automated build類型的鏡像;
  • --no-trunc :顯示完整的鏡像描述;
  • -s :列出收藏數不小於指定值的鏡像。
Docker 安裝ELK及Docker常見命令

  • NAME: 鏡像倉庫源的名稱
  • DESCRIPTION: 鏡像的描述
  • OFFICIAL: 是否 docker 官方發佈
  • stars: 類似 Github 裡面的 star,表示點贊、喜歡的意思。
  • AUTOMATED: 自動構建。

pull 命令

搜索之後找到對應的鏡像,然後我們調用pull命令將鏡像拉到本地:

<code>docker pull [OPTIONS] NAME[:TAG|@DIGEST]/<code>

OPTIONS說明:

  • -a :拉取所有 tagged 鏡像
  • --disable-content-trust :忽略鏡像的校驗,默認開啟


Docker 安裝ELK及Docker常見命令

run命令

鏡像下來之後,我們的最終目的是要運行這個鏡像,運行鏡像需要用到run命令。

<code>docker run [OPTIONS] IMAGE [COMMAND] [ARG...]/<code>

OPTIONS說明:

  • -a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;
  • -d: 後臺運行容器,並返回容器ID;
  • -i: 以交互模式運行容器,通常與 -t 同時使用;
  • -P: 隨機端口映射,容器內部端口隨機映射到主機的高端口
  • -p: 指定端口映射,格式為:主機(宿主)端口:容器端口
  • -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
  • --name="nginx-lb": 為容器指定一個名稱;
  • --dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 設置環境變量;
  • --env-file=[]: 從指定文件讀入環境變量;
  • --cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
  • -m :設置容器使用內存最大值;
  • --net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;
  • --link=[]: 添加鏈接到另一個容器;
  • --expose=[]: 開放一個端口或一組端口;
  • --volume , -v: 綁定一個卷


Docker 安裝ELK及Docker常見命令


logs命令

鏡像啟動之後,會在容器裡運行,那我們如何查看運行的情況呢?logs命令會幫我們輸出運行的日誌。

<code>docker logs [OPTIONS] CONTAINER/<code>

OPTIONS說明:

  • -f : 跟蹤日誌輸出
  • --since :顯示某個開始時間的所有日誌
  • -t : 顯示時間戳
  • --tail :僅列出最新N條容器日誌

ps 命令

鏡像啟動之後,會在有一個容器,如果我們想查看當前容器的信息,需要執行ps命令。

<code>docker ps [OPTIONS]/<code>

OPTIONS說明:

  • -a :顯示所有的容器,包括未運行的。
  • -f :根據條件過濾顯示的內容。
  • --format :指定返回值的模板文件。
  • -l :顯示最近創建的容器。
  • -n :列出最近創建的n個容器。
  • --no-trunc :不截斷輸出。
  • -q :靜默模式,只顯示容器編號。
  • -s :顯示總的文件大小。


Docker 安裝ELK及Docker常見命令

輸出詳情介紹:

  • CONTAINER ID: 容器 ID。
  • IMAGE: 使用的鏡像。
  • COMMAND: 啟動容器時運行的命令。
  • CREATED: 容器的創建時間。
  • STATUS: 容器狀態。狀態有7種:created(已創建)restarting(重啟中)running(運行中)removing(遷移中)paused(暫停)exited(停止)dead(死亡)
  • PORTS: 容器的端口信息和使用的連接類型(tcp\\\\udp)。
  • NAMES: 自動分配的容器名稱。

exec 命令

有時候我們需要進入到鏡像的內部,exec 命令會幫助我們在容器內部執行命令。

<code>docker exec [OPTIONS] CONTAINER COMMAND [ARG...]/<code>

OPTIONS說明:

  • -d :分離模式: 在後臺運行
  • -i :即使沒有附加也保持STDIN 打開
  • -t :分配一個偽終端

start/stop/restart 命令

  • docker start :啟動一個或多個已經被停止的容器
  • docker stop :停止一個運行中的容器
  • docker restart :重啟容器
<code>docker start [OPTIONS] CONTAINER [CONTAINER...]/<code>
<code>docker stop [OPTIONS] CONTAINER [CONTAINER...]/<code>
<code>docker stop [OPTIONS] CONTAINER [CONTAINER...]/<code>

rm 命令

如果我們認為這個容器已經沒有存在的意義了,我們可以執行rm 命令刪除這個容器。

<code>docker rm [OPTIONS] CONTAINER [CONTAINER...]/<code>

OPTIONS說明:

  • -f :通過 SIGKILL 信號強制刪除一個運行中的容器。
  • -l :移除容器間的網絡連接,而非容器本身。
  • -v :刪除與容器關聯的卷。

images命令

<code>如果我們長期不使用,就會忘記我們之前拉取過那些,images 命令會列出我們本地所有的鏡像。docker images [OPTIONS] [REPOSITORY[:TAG]]/<code>

OPTIONS說明:

  • -a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
  • --digests :顯示鏡像的摘要信息;
  • -f :顯示滿足條件的鏡像;
  • --format :指定返回值的模板文件;
  • --no-trunc :顯示完整的鏡像信息;
  • -q :只顯示鏡像ID。


Docker 安裝ELK及Docker常見命令

rmi

本地鏡像如果不在需要,放在本地就會佔用寶貴的存儲資源,鵬哥就非常在意這個,所以我會定期使用rmi命令清理本地不用的鏡像。

<code>docker rmi [OPTIONS] IMAGE [IMAGE...]/<code>

OPTIONS說明:

  • -f :強制刪除;
  • --no-prune :不移除該鏡像的過程鏡像,默認移除;

介紹完我們會用到的docker命令之後,安裝ELK就是水到渠成的事了,下邊我們來安裝ELK。

Docker 安裝 elasticsearch

在elastic 6.0 版本之後 elastic 官方開始維護自己的Docker鏡像包,所以如果我們要搭建elk的花,官方的包當然是首選,我們選用最新的7.5.1 版本來搭建。首先我們執行pull命令 將鏡像拉到本地:

<code>docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1/<code>

執行完pull命令之後,我們起一個容器,為了後邊方便kibana 鏈接,這裡最好指定一個名稱:

<code>docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:7.5.1/<code>

啟動完之後在瀏覽器輸入 http://localhost:9200 ,如果能看到如下的輸出,說明我們已經安裝啟動成功。


Docker 安裝ELK及Docker常見命令

Docker 安裝 Kibana

安裝完elasticsearch ,就像安裝了一個命令行的操作系統,如果我們想直觀的查看日誌情況,我們需要一個GUI,kibana就是elastic的GUI,這也是elastic的核心競爭力。

同樣的,我們先執行pull 命令拉下來7.5.1 版本的kibana,版本的選擇有一定的要求:我們不能選高於elasticsearch的版本,同時又必須和elasticsearch 保持同樣的大版本。當然簡單起見我們選擇同樣的版本號是不會有問題的。

<code>docker pull docker.elastic.co/kibana/kibana:7.5.1/<code>

拉完鏡像之後,起一個容器,這裡說明一下ELASTICSEARCH_URL 這個參數,鵬哥試下來似乎是沒有作用的,可能是鵬哥不知道怎麼用,如果有網友知道,也請幫忙告知一下,不勝感激。

<code>docker run -d -p 5601:5601 --link elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 --name kibana docker.elastic.co/kibana/kibana:7.5.1/<code>

我們在起kibana的時候需要知道elasticsearch容器的名稱,ELASTICSEARCH_URL的規則可以是 http://[elasticsearch 容器名稱]:9200,也可以是elasticsearch的無理IP地址,但是不能是localhost, 因為這樣會解析到kibana容器內部,導致無法連接elasticsearch 服務器。

這裡我們設置的elasticsearch 容器名稱跟kibana 默認的 名稱重合了,所以我們不用修改任何配置,這個時候打開瀏覽器 輸入 http://localhost:5601 就能看到kibana的歡迎頁面。但是如果我們沒有設置 elasticsearch 的容器名稱或者設置的其他的字符串,那麼需要我們修改kibana.yml 來指定這個名稱。

首先使用 exec 進入容器:

<code>docker exec -it [你的容器id] /bin/bash/<code>

然後使用vim 打開 kibana.yml

<code>vi /usr/share/kibana/config/kibana.yml/<code>

修改完之後輸入 exit 推出當前的容器。然後使用restart 命令,重啟容器,就能看到效果了。

kibana 默認是英文界面,如果需要支持中文,可以按照上邊的方式修改 kibana.yml ,在最後一行追加:

<code>i18n.locale: zh-CN/<code>

重啟kibana ,刷新瀏覽器就能看到效果了。


Docker 安裝ELK及Docker常見命令

總結

按照這套教程,你可以無腦的安裝ELK而不用修改任何東西,也就是這是最簡單的demo,如果你需要更高級別的配置,可以持續關注鵬哥的文章,因為鵬哥也在開始學習elastic 的東西。這套教程就是鵬哥花了兩天的時間從零摸索出來的。雖然意義不大,但是沒辦法,鵬哥就是這麼愛折騰。


分享到:


相關文章: