Docker小白到實戰之常用命令演示,通俗易懂

2021-12-24 dotNET跨平臺

前言

上一篇大概認識了Docker,主要是從概念、架構、優點及流程方面進行闡述,並進行安裝和體驗;接下來就開始進行實操學習,在演示過程中會針對關鍵的知識點進行歸納和總結,這裡先從常用命令說起,來吧,小夥伴們。

正文1. 預覽

Docker和我們熟悉的Git很類似,都是通過命令執行相關操作,當然也有一些界面管理工具(點按鈕的那種),但大家似乎更喜歡直接敲命令,畢竟這種方式更加靈活、更加容易理解操作本質;有大神將常用命令用一張圖很好的展現出來,這裡借用一下(圖片來源於網絡,侵刪):

cmd_logic

不熟悉Docker的小夥伴可能看見這圖直接懵圈了,別急,接著往下看, 看完再回過頭來瞅這張圖,絕對感覺很給力。

2. 常用命令實操2.1 全局命令

docker version:查看docker版本信息。

docker info:查看docker詳情信息,比如倉儲信息、加速器配置信息、有多少個鏡像、有多少個容器、CPU、內存等。

docker events:從docker 服務獲取實時事件,通俗一點理解就是操作日誌,比如對鏡像、容器、網絡、掛載卷等操作,就會記錄對應的事件信息;最多能返回最近的1000條日誌信息

先在一個終端執行命令,終端會阻塞:

開啟另一個終端,執行根據鏡像運行容器的命令:

此時開啟的第一個終端就實時輸出事件消息,如鏡像拉取、容器啟動、容器結束等信息,如下:

既然可以把這個命令當做操作日誌理解,那肯定可以根據條件查看對應的數據,如下:

如圖所示,會先顯示符合條件的事件信息,然後會繼續阻塞,如果對服務端有操作,信息還會實時顯示。常用的參數指定如下:

-f :根據條件過濾事件,如上圖指定的是鏡像為hello-world相關的事件信息;

--since :從指定的時間戳後顯示所有事件,可以理解為開始時間,支持多種時間格式,默認使用本地主機的時區;

--until :顯示到指定的時間為止,可以理解為結束時間;

2.2 鏡像常用命令

鏡像(image)可以理解為一種輕量級、可獨立運行的軟體包,包含了應用程式及其他運行需要的基礎設施,如運行時、配置文件、依賴的庫等,所以沒有鏡像就沒法啟動容器;就好比開發中沒有類(class),又怎麼去根據類創建實例呢。

鏡像是只讀的,所以操作命令不多,一般就是增、刪、查。

docker images:列出Docker主機上的鏡像

可以指定參數,比較常用的如下:

-a :列出本地所有的鏡像(含中間鏡像層,默認過濾掉中間鏡像層)。

-q :只顯示鏡像ID。

上圖中的-aq就是顯示所有鏡像的ID,一般用於批量刪除

docker search:從遠程倉儲中搜索鏡像,後面直接根鏡像名稱即可

可以指定條件進行搜索,如下:

--filter:指定條件搜索,is-official表示是否為官方的,stars表示要找多少星星以上的

對於搜索,我還是比較喜歡用界面,直觀好看:

docker pull:從遠程倉儲中拉取鏡像,後面跟鏡像名和tag即可,即指定版本拉取,如果不指定tag,默認就latest,最新的

鏡像的分層原理就是採用UnionFS(聯合文件系統),是一種分層、輕量級的高性能文件系統;鏡像可以通過分層來進行繼承,可以基於基礎鏡像製作出各種具體的應用鏡像,比如我們剛拉取下來的nginx鏡像,這裡先了解,後續我們自己製作鏡像的時候就明白了。

docker pull 鏡像名:tag:指定版本拉取;

docker rmi:刪除指定鏡像,後面可以跟名稱或鏡像ID

刪除指定版本,如下:

根據鏡像ID刪除,可以一下刪除多個,中間用空格隔開:

刪除全部鏡像,就是找出所有鏡像ID,然後刪除就行了,當然肯定不是一個一個的拷貝鏡像ID;docker images -aq可以顯示所有鏡像ID ,所以兩個命令結合用即可,如下:

docker rmi -f $(docker images -aq)

-f:代表強制刪除,比如一些鏡像和容器有依賴,會提示不能直接刪除,加上這個選項就可以強制刪除。

docker save:導出鏡像,可以離線拷貝到其他主機上使用,避免沒有網絡不能下載鏡像的場景。

生成的tar文件就可以根據需要拷貝到對應設備上加載使用,不用在線拉取,因為很多場景是不允許連外網的。

docker load:加載鏡像,根據拷貝過來的tar文件可以直接加載鏡像到主機上。

這裡演示就將原來拉取的鏡像刪除,然後通過load命令重新加載,如下:

加載鏡像,如下:

換一種寫法,如下:

選項說明:

--input , -i : 指定導入的文件。

--quiet , -q : 簡化輸出信息,不顯示具體加載過程。

註:這裡因為是在TestDockerImage目錄下執行命令,所以指定tar的文件時,就在當前目錄下。

2.3 容器常用命令

容器是用鏡像創建的運行實例, 它可以被啟動、開始、停止、刪除,每個容器都是相互隔離;可以把容器看做是一個極簡版的Linux環境和在其中運行程序的組合;

容器和鏡像幾乎一樣,唯一的區別就是鏡像層上面加載了一個可寫層,這層稱為容器層

以下對容器的操作,可以指定容器名稱,也可以指定容器ID,演示統一用容器ID,不再重複截圖。

docker run:根據鏡像啟動容器;語法如下:docker run [OPTIONS] IMAGE [COMMAND] [ARG...];

常用選項參數說明,如下:

--name="容器名" : 為容器指定一個名稱;

-d: 後臺運行容器,並返回容器ID;

-i: 以交互模式運行容器,一般和 -t 同時使用;

-t: 為容器重新分配一個偽輸入終端,一般和 -i 同時使用;

-P: 隨機埠映射,容器內部埠隨機映射到主機的埠

-p: 指定埠映射,格式為:主機埠:容器埠

演示如下:

上圖可以看到終端阻塞了,這種模式稱為attached默認,即前臺運行,與之對應的是detached模式,及後臺運行,接下來會演示。由於終端阻塞,這裡另開一個終端執行docker ps命令看運行的容器,如下:

前臺運行模式終端很容易被關閉,啟動的nginx容器也會停掉,這種情況對於很多場景是不允許的,所以可以指定為後臺模式運行,即detached模式,如下:

現在只是在容器內啟動了一個nginx,並監聽80埠,如果需要通過主機能訪問到容器裡面的nginx,還需進行埠映射,如下:

這裡啟動了兩個nginx容器,都是監聽80埠,但並沒有報埠被佔用的錯,所以容器之間是互不影響的。通過-p選項進行埠映射,這下就可以通過主機的9999埠訪問到容器內部的80埠,如下:

既然剛開始說可以將容器理解為簡易版的Linux,那就應該可以進入容器內部操作一把,如下:

在容器裡面只能執行一些核心的命令,因為是極簡版,所以內部只包含重要的功能,如果需要其他功能可以自己安裝擴展。

退出容器的兩種方式:

a、容器中執行exit命令,容器停止並退出,回到主機;

b、利用組合鍵ctrl+p+q,容器不停止退出,回到主機;

docker ps [OPTIONS] :顯示主機中的容器,不加選項默認只列出運行中的容器

-a : 顯示所有的容器,包括未運行的;

-n : 列出最近創建的n個容器;

演示如下:

啟動和停止容器的命令;

docker start 容器id  # 啟動被停止的容器
docker stop 容器id  # 停止運行中的容器
docker restart 容器id # 重啟容器
docker kill 容器id  # 強制停止容器

docker stop停止容器,後面可以跟一個或多個容器ID:

docker start:啟動被停止的容器,後面可以跟一個或多個容器ID:

docker restart重啟命令和docker kill強制停止命令就不截圖啦

docker exec和docker attach兩種方式進入正在運行的容器。

很多場景容器都是後臺運行,但有時需要進入容器內部進行相關配置的更改。

docker exec:進入容器後開啟一個新的終端,正常執行Linux相關命令。

docker attach:進入容器正在執行的終端,不會啟動新的進程。

退出容器模式:

容器中執行exit命令,容器停止並退出;

利用組合鍵ctrl+p+q,容器不停止退出;

docker logs [OPTIONS] 容器ID:查看指定容器的日誌;

常用OPTIONS如下:

-f :跟蹤日誌輸出

--since :顯示指定開始時間之後所有日誌

-t : 顯示時間戳

--tail :列出最新N條容器日誌

可以指定選項,查看需要的日誌,如下:

docker top 容器ID:列出指定容器內部的進程,可以看到容器內的應用進程是否正常運行,如下:

docker inspect 容器ID:查看指定容器的詳細信息,比如運行狀態、網絡配置、掛載的卷等信息都有,如下:

docker commit:根據容器生成一個新的鏡像;容器是可編輯的,有些時候需要將已更改的容器生成一個新的鏡像給其他人用。

命令說明:

-a :提交的鏡像作者;

-m :提交時的說明文字;

命令中testcommitimage:v1是自定義的鏡像名和tag;

根據新生成的鏡像啟動容器,則內部就會有創建的對應文件(容器內部可以根據需要任意改,這裡只是演示創建文件而已)。

docker export和docker import將容器方便離線導出和導入;

命令說明:

#將容器導出為tar文件
docker export -o testexport.tar 030aa6fcd7f3
# -o 指定輸出位置和文件名
# 030aa6fcd7f3 這個是容器ID

#根據生成的tar文件導入為鏡像
docker import testexport.tar testexportimagename:v2
# 指定對應的tar文件
# testexportimagename:v2 鏡像名和版本, 可以自己定義

這對命令是不是和鏡像的docker save、docker load這對命令用法很相似,但兩種方式不能混用,因為export導出的僅僅是容器快照,save保存的是完整的鏡像文件。

docker rm 容器ID:刪除指定容器,運行中的容器默認不讓刪除,可以增加-f選項強制刪除,如下:

以上只是總結了平時比較常用的命令,並沒有全部列出,更多細節可以進入官網:https://docs.docker.com/engine/reference/commandline/rm/;

總結

上面內容主要針對鏡像和容器的常用命令進行演示和說明,關於數據卷、dockerfile、網絡相關的命令後面單獨分享;

看到這裡,相信文章開頭的那張圖小夥伴們已經差不多看懂了,而且圖片中的模塊劃分、箭頭指向都很有意義;還有好多乾貨在後面,關注「Code綜藝圈」,和我一起學習吧;

圖片

相關焦點

  • Docker小白到實戰之Dockerfile解析及實戰演示,果然順手
    "<目標地址>"] COPY requirements.txt /tmp/2.8 VOLUME 關鍵字掛載數據卷,之前在常用命令那說到通過命令的方式進行數據卷掛載,在Dockerfile中使用VOLUME指定掛載路徑即可,根據構建出來的鏡像運行容器時,默認就有構建時掛載的信息。
  • Docker小白到實戰之Docker網絡簡單了解一下
    Docker網絡模式簡介當Docker進程啟動時,會在主機上創建一個名為docker0的虛擬網橋,此主機上啟動的Docker容器默認會連接到這個虛擬網橋上。這樣所有容器通過這個虛擬網橋就打通了,所以這裡的docker0工作方式和物理交換機很像。
  • Docker小白到實戰之Docker Compose在手,一鍵足矣
    以下演示平臺為Linux,其他平臺請參照文檔:https://docs.docker.com/compose/install/2.1 下載文件其實Docker Compose是一個可執行文件,直接下載對應文件即可,執行如下命令:# 下載Docker Compose文件, 這個地址下載比較慢sudo curl -L "https
  • Docker之Dockerfle實戰(一)
    在前面的技術文章中介紹了Docker中鏡像的管理和Docker容器的管理,本系列文章主要詳細的介紹Dockerfile的案例應用和實戰
  • 10 分鐘帶你從入門到精通的 Docker 小白實戰教程
    本篇文章詳細而又簡短的介紹了:一名完全不了解 Docker 小白,將全站 Docker 化的過程。接下來我們實戰遷移一個純前端的 SPA 單頁站點:網址:pea3nut.info源碼:github/pea3nut-info在沒遷移 Docker 之前,若我想更新線上網站中內容時,需要:本地打包產出靜態文件手動通過 FTP 上傳到伺服器git push 更新 GitHub
  • docker實戰(四)
    我們在docker實戰(三)中聊了一些docker架構之Docker Daemon相關的內容,今天接著聊聊剩下的幾位,也就是Docker Image
  • Docker常用命令總結,隨用隨取!
    強大的功能需要繁雜的命令來支撐,docker命令很多,多得記不住。好記性不如爛筆頭,爛筆頭不如實戰練習,本文匯總docker常用的命令,並對命令進行說明和舉例,可以隨用隨取。># 通過鏡像ID刪除docker rmi -f 鏡像ID# 通過鏡像ID刪除多個docker rmi -f 鏡像名1:TAG 鏡像名2:TAG # 刪除全部# docker images -qa : 獲取所有鏡像IDdocker rmi -f $(docker images -qa)容器命令
  • Linux安裝Docker與Docker常用命令
    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux或Windows
  • Docker鏡像常用命令
    Docker常用命令docker version   --- 查看docker版本信息
  • 【Docker 系列】docker 學習 二,Docker 的常用命令
    【Docker 系列】docker 學習 二,Docker 的常用命令基本幫助命令# 查看 docker 的基本版本信息docker version# 查看 docker 的系統信息,如鏡像和容器數量docker info# 查看某個命令的幫助docker xx命令 --help
  • Docker 常用命令(.NET Core示例)
    前言本篇文章,整理docker中常用的命令,方便大家學習和命令查詢。>systemctl restart docker:重啟dockerDocker倉庫Docker Hub:https://hub.docker.com/docker login -u 用戶名 -p 密碼 [倉庫地址]:登陸到一個Docker鏡像倉庫,如果未指定鏡像倉庫地址
  • docker常用命令詳解
    docker attach命令對應開發者很有用,可以連接到正在運行的容器,觀察容器的運行狀況,或與容器的主進程進行交互。查看容器的信息container(ps)docker ps命令可以查看容器的CONTAINER ID、NAME、IMAGE NAME、埠開啟及綁定、容器啟動後執行的COMMNAD。最常用的功能是通過ps來找到CONTAINER_ID,以便對特定容器進行操作。
  • 快速安裝Docker及配置及Docker配置、Docker常用命令.
    一、安裝docker服務命令行輸入curl -fsSL https://get.docker.com | bash -s docker --mirror
  • 國慶之Docker 常用命令匯總
    本文來源:http://r6d.cn/nQVMDocker 鏡像命令列出鏡像列表$ docker images$ docker image ls -a運行 Docker 鏡像(守護態方式)$ docker run -d {鏡像名}刪除指定 Docker 鏡像$ docker  image rm {鏡像名}刪除 Docker
  • Docker 容器常用命令
    啟動docker2.新建並啟動容器常用選項:-d :表示後臺運行(不加此選項,退出命令行後,容器將自動停止運行)-v :掛載宿主機目錄到容器例:docker run -v  /宿主機絕對路徑:/容器內目錄-P :隨機埠映射-p :指定埠映射,一般為 hostPort:containerPort 或 containerPort
  • DockerFile 命令總結
    它的意思差不多就是啟動容器後執行的默認命令。docker 常用命令如下管理命令:  container   管理容器  image       管理鏡像  network     管理網絡  node        管理Swarm節點  plugin      管理插件  secret
  • Dockerfile企業實戰教程
    什麼是dockerfile?Dockerfile是一個包含用於組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。
  • Docker入門到精通
    ://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum makecache fastyum -y install docker-ceservice docker startdocker versiondocker pull hello-worlddocker imagesdocker run hello-world
  • Docker 核心概念、安裝、埠映射及常用操作命令,詳細到令人髮指.
    api/docker_remote_api)與Docker的守護進程進行通信docker主機(Host):一個物理或虛擬的機器用來執行Docker守護進程和容器docker倉庫(Registry):Docker倉庫用來存儲鏡像,可以理解為代碼控制中的代碼倉庫,Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用Docker
  • Docker-compose命令大全及配置文件詳解
    使用 docker-compose 後不再需要逐一創建和啟動容器。您可以使用 YML 文件來配置應用程式需要的所有服務,然後使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。本章將介紹如何安裝Docker-compose,並對docker-compose.yml配置文件及常用命令進行詳細總結和演示。