docker常用命令& 3種docker日誌查看

一、概念

理念:容器化,把應用打包

定義:docker是一個開源的應用容器引擎,可以把任何應用以及他們的依賴包打包到一個 輕量級、可移植的容器中,然後發佈到流行的Linux機器上,實現虛擬化。

VM和docker區別:

​ VM結構:server-》host OS -》hypervisor -> Guest OS -> Bins/libs ->app

​ docker : server-》host OS -》-> docker engine ->bins/libs ->app

從以上結構可以看出,hostOS直接安裝一個docker engine,就可以從遠程倉庫【Registry】只中下載對應軟件的docker鏡像【images】,然後docker鏡像運行起來就是一個容器【Containers】,這個容器像一個正常的操作系統一樣,可以讀寫文件 並且運行起來的docker鏡像,在刪除和遷移的時候,也非常方便。

二、docker架構圖

在這裏插入圖片描述

hostOS在安裝完docker之後,會啓動一個docker守護進程【docker daemon】,這個守護進程相當於docker命令行的解釋器【類似於shell】,用戶只要在hostOS的shell中執行docker對應的命令,就可以完成相應的操作。

三、docker命令

現在假設你已經安裝好docker了。

1、驗證是否安裝成功

$ docker info

2、docker需要有自己的守護進程才能運行自己的命令,如果你沒有的話,可以這樣啓動

用systemctl 或者service啓動

$ sudo systemctl start docker
$ sudo service docker start

3、列出本機所有的docker images

$ docker images

4、下載並運行自己的鏡像,假設我們現在下載一個hello-world

$ docker image pull hello-world #下載
$ docker run  -d  -p 8080:80  hello-world #運行  -p 端口映射  -d守護進程
$ docker run -it ubuntu /bin/bash  # -i 交互模式  -t 終端  使用Ubuntu鏡像啓動一個容器

5、查看在運行的container

$ docker ps

6、運行失敗,要刪除原來的container,重新運行

$docker rm hello-world
$docker rmi [imagesName]  #刪除鏡像文件
$docker container kill [containerID]  #手動停止容器

可以先在 Docker官方倉庫 docker hub中搜索一下想要用的images https://hub.docker.com ,獲取他對應的文件名稱路徑,然後在用 pull 下載

7、把host主機中的文件和容器相互拷貝

$docker cp 容器名:要拷貝的文件在容器裏面的路徑       要拷貝到宿主機的相應路徑 
$docker cp 宿主機的相應路徑  容器名:要拷貝的文件在容器裏面的路徑

8、服務運行之後,產生的文件需要保存下來,但是直接停止container,一般來說是不會在容器中保存產生的文件的。這時候需要先commit,把文件保存下來,生成新的鏡像

$docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
-a 提交鏡像作者
-m 提交時說明文字
a404c6c174a2  原imagesID

四、查看docker日誌

注意:docker有關的命令都要有管理員權限,可以把用戶添加到管理員組,或者每次都接sudo

1、直接進入該容器,找到對應日誌

$ sudo docker exec -it a95cee23942d /bin/bash  #在鏡像a95cee23942d中執行/bin/bash 
root@a95cee23942d:/# ls
bin  boot  dev	etc  home  lib	lib64  logs  media  mnt  opt  proc  requirements.txt  root  run  sbin  srv  sys  tmp  usr  var
#進入該container之後,就直接找到 /var/logs查看了

docker logs是根據containers而創建的

2、在主機中 ,實時查看docker容器日誌

$sudo docker logs -f -t --tail 行數 容器名[containerID]  
-f  按日誌輸出
-t  顯示時間戳

3、在主機中 ,docker容器的日誌目錄

1、查看容器詳細信息
$docker inspect 7a20f9671dbd 
2、通過詳細信息找到LogPath,那麼它就在主機的目錄結構下面
"LogPath": "/var/lib/docker/containers/7a20f9671dbd972d1e94355c15b74236e36a9eb72da4636cb7e996e1a9cdd40c/7a20f9671dbd972d1e94355c15b74236e36a9eb72da4636cb7e996e1a9cdd40c-json.log"
3、用less 或者cat查看日誌
$ sudo less /var/lib/docker/containers/7a20f9671dbd972d1e94355c15b74236e36a9eb72da4636cb7e996e1a9cdd40c/7a20f9671dbd972d1e94355c15b74236e36a9eb72da4636cb7e996e1a9cdd40c-json.log

五、定製鏡像,並推送到 Registry --> dockerfile

定義: Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

1、dockerfile 語法
在這裏插入圖片描述

from    base鏡像
maintainer  作者
run   執行命令
copy  把文件拷貝到鏡像中
add   添加文件
expose  暴露端口號
copy能拷貝命令和 文件夾,add可以添加遠程的文件,比如ftp上的
entrypoint 容器入口
workdir  指定路徑
env      設定環境變量
user     指定用戶

2、docker存儲 :鏡像分層

dockerfile中每一行都產生一個新層
在這裏插入圖片描述

已經存在的鏡像:只讀

運行起來,就是可讀可寫的層

分層技術,在有層共享的時候,存儲壓力會小很多

3、dockerfile 創建一個 images

$docker build -t hello:tag .  
 # hello:tag 容器名:標籤; . 是上下文,把該路徑裏面的所有東西打包成hello【images】

4、推送到遠程registry,公共【Docker hub】或私人【需要另外購買】

首先得先註冊,然後在登錄,最後推送

$docker login
# 輸入用戶名和密碼即可 
$docker push hello/ubuntu:v2.4 
#添加tag是爲了在鏡像分層上傳時候,只要上傳新增加的就可以了,如果想上傳全部鏡像層,不添加tag即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章