Docker 相關命令彙總

来源:https://www.cnblogs.com/lcry/archive/2018/05/20/9064558.html
-Advertisement-
Play Games

操作容器的命令 鏡像中的容器啟動之後可以在 docker 中操作和查看容器的信息 l docker ps 查看運行的容器,如果想查看全部加上參數-a 即可 l docker create 完整的鏡像名字# 創建容器但是不啟動它 l docker run 完整的鏡像名字# 創建並啟動容器 l dock ...


操作容器的命令

鏡像中的容器啟動之後可以在 docker 中操作和查看容器的信息

l   docker ps 查看運行的容器,如果想查看全部加上參數-a 即可

l   docker create 完整的鏡像名字# 創建容器但是不啟動它

l   docker run 完整的鏡像名字# 創建並啟動容器

l   docker stop CONTAINER ID# 停止容器運行

l   docker start CONTAINER ID# 啟動停止狀態的容器

l   docker restart CONTAINER ID# 重啟容器

l   docker rm CONTAINER ID# 刪除容器

 

獲取容器相關信息

l   docker ps # 顯示狀態為運行(Up)的容器

l   docker ps -a # 顯示所有容器,包括運行中(Up)的和退出的(Exited)

l   docker inspect # 深入容器內部獲取容器所有信息

 

 

l   docker logs # 查看容器的日誌(stdout/stderr)

l   docker events # 得到 docker 伺服器的實時的事件

l   docker port # 顯示容器的埠映射

l   docker top # 顯示容器的進程信息

l   docker diff # 顯示容器文件系統的前後變化

 

導出容器

l   docker cp # 從容器里向外拷貝文件或目錄

l   docker export # 將容器整個文件系統導出為一個 tar 包,不帶 layers、tag 等信息

 

鏡像操作命令

l   docker images # 顯示本地所有的鏡像列表

l   docker import # 從一個 tar 包創建一個鏡像,往往和 export 結合使用

l   docker build # 使用 Dockerfile 創建鏡像(推薦)

l   docker commit # 從容器創建鏡像

l   docker rmi # 刪除一個鏡像

l   docker load # 從一個 tar 包創建一個鏡像,和 save 配合使用

l   docker save # 將一個鏡像保存為一個 tar 包,帶 layers 和 tag 信息

l   docker history # 顯示生成一個鏡像的歷史命令

l   docker tag # 為鏡像起一個別名

 

鏡像倉庫命令

l   docker login # 登錄到一個 registry

l   docker search # 從 registry 倉庫搜索鏡像

l   docker pull # 從倉庫下載鏡像到本地

l   docker push # 將一個鏡像 push 到 registry 倉庫中

 

Dockerfile 命令

 

(1)  FROM(指定基礎 image)

構建指令,必須指定且需要在 Dockerfile 其他指令的前面。後續的指令都依賴於該指令指定的 image。FROM 指令指定的基礎 image 可以是官方遠程倉庫中的,也可以位於本地倉庫。

該指令有兩種格式: FROM <image>

指定基礎 image 為該 image 的最後修改的版本。或者: FROM <image>:<tag>

指定基礎 image 為該 image 的一個 tag 版本。

(2)  MAINTAINER(用來指定鏡像創建者信息)

構建指令,用於將 image 的製作者相關的信息寫入到 image 中。當我們對該 image 執行docker inspect 命令時,輸出中有相應的欄位記錄該信息。

格式:

MAINTAINER <name>

 

 

(3)  RUN(安裝軟體用)

構建指令,RUN 可以運行任何被基礎 image 支持的命令。如基礎 image 選擇了 ubuntu, 那麼軟體管理部分只能使用 ubuntu 的命令。

該指令有兩種格式:

RUN <command> (the command is run in a shell - `/bin/sh -c`) RUN ["executable", "param1", "param2" ... ] (exec form)

(4)  CMD(設置 container 啟動時執行的操作)

設置指令,用於 container 啟動時指定的操作。該操作可以是執行自定義腳本,也可以是執行系統命令。該指令只能在文件中存在一次,如果有多個,則只執行最後一條。

該指令有三種格式:

CMD ["executable","param1","param2"] (like an exec, this is the preferred form) CMD command param1 param2 (as a shell)

當 Dockerfile 指定了 ENTRYPOINT,那麼使用下麵的格式:

CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

ENTRYPOINT 指定的是一個可執行的腳本或者程式的路徑,該指定的腳本或者程式將會以

param1 和 param2 作為參數執行。所以如果 CMD 指令使用上面的形式,那麼 Dockerfile 中必須要有配套的 ENTRYPOINT。

(5)  ENTRYPOINT(設置 container 啟動時執行的操作)

設置指令,指定容器啟動時執行的命令,可以多次設置,但是只有最後一個有效。    兩種格式:

l   ENTRYPOINT ["executable", "param1", "param2"] (like an exec, the preferred fo

 

 

rm)

l   ENTRYPOINT command param1 param2 (as a shell)

該指令的使用分為兩種情況,一種是獨自使用,另一種和 CMD 指令配合使用。

當獨自使用時,如果你還使用了 CMD 命令且 CMD 是一個完整的可執行的命令,那麼 CMD 指令和 ENTRYPOINT 會互相覆蓋只有最後一個 CMD 或者 ENTRYPOINT 有效。

# CMD 指令將不會被執行,只有 ENTRYPOINT 指令被執行CMD echo “Hello, World!”

ENTRYPOINT ls -l

另一種用法和 CMD 指令配合使用來指定 ENTRYPOINT 的預設參數,這時 CMD 指令不是一個完整的可執行命令,僅僅是參數部分;ENTRYPOINT 指令只能使用 JSON 方式指定執行命令,而不能指定參數。

FROM ubuntu CMD ["-l"]

ENTRYPOINT ["/usr/bin/ls"]

(6)  USER(設置 container 容器的用戶)

設置指令,設置啟動容器的用戶,預設是 root 用戶。

# 指定 memcached 的運行用戶ENTRYPOINT ["memcached"]

USER daemon 或

ENTRYPOINT ["memcached", "-u", "daemon"]

 

 

(7)  EXPOSE(指定容器需要映射到宿主機器的埠)

設置指令,該指令會將容器中的埠映射成宿主機器中的某個埠。當你需要訪問容器的時候,可以不是用容器的 IP 地址而是使用宿主機器的 IP 地址和映射後的埠。要完成整個操作需要兩個步驟,首先在 Dockerfile 使用 EXPOSE 設置需要映射的容器埠,然後在運行容器的時候指定-p 選項加上 EXPOSE 設置的埠,這樣 EXPOSE 設置的埠號會被隨機映射成宿主機器中的一個埠號。也可以指定需要映射到宿主機器的那個埠,這時要確保宿主機器上的埠號沒有被使用。EXPOSE 指令可以一次設置多個埠號,相應的運行容器的時候,可以配套的多次使用-p 選項。

格式:

EXPOSE <port> [<port>...]

 

# 映射一個埠EXPOSE port1

# 相應的運行容器使用的命令docker run -p port1 image

 

# 映射多個埠

EXPOSE port1 port2  port3 # 相應的運行容器使用的命令

docker run -p port1 -p port2 -p port3 image

# 還可以指定需要映射到宿主機器上的某個埠號

 

 

docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image

埠映射是 docker 比較重要的一個功能,原因在於我們每次運行容器的時候容器的 IP 地址不能指定而是在橋接網卡的地址範圍內隨機生成的。宿主機器的 IP 地址是固定的,我們可以將容器的埠的映射到宿主機器上的一個埠,免去每次訪問容器中的某個服務時都要查看容器的 IP 的地址。對於一個運行的容器,可以使用 docker port 加上容器中需要映射的埠和容器的 ID 來查看該埠號在宿主機器上的映射埠。

(8)  ENV(用於設置環境變數)

構建指令,在 image 中設置一個環境變數。格式:

ENV <key> <value>

設置了後,後續的 RUN 命令都可以使用,container 啟動後,可以通過 docker inspect 查看這個環境變數,也可以通過在 docker run --env key=value 時設置或修改環境變數。假如你安裝了 JAVA 程式,需要設置 JAVA_HOME,那麼可以在 Dockerfile 中這樣寫: ENV JAVA_HOME /path/to/java/dirent

(9)  ADD(從 src 複製文件到 container 的 dest 路徑)

構建指令,所有拷貝到 container 中的文件和文件夾許可權為 0755,uid 和 gid 為 0;如果是一個目錄,那麼會將該目錄下的所有文件添加到 container 中,不包括目錄;如果文件是可識別的壓縮格式,則 docker 會幫忙解壓縮(註意壓縮格式);如果<src>是文件且<dest> 中不使用斜杠結束,則會將<dest>視為文件,<src>的內容會寫入<dest>;如果<src>是   文件且<dest>中使用斜杠結束,則會<src>文件拷貝到<dest>目錄下。

 

 

ADD <src> <dest>

<src> 是相對被構建的源目錄的相對路徑,可以是文件或目錄的路徑,也可以是一個遠程的文件 url;

<dest>  是 container 中的絕對路徑

(10)   VOLUME(指定掛載點))

設置指令,使容器中的一個目錄具有持久化存儲數據的功能,該目錄可以被容器本身使用, 也可以共用給其他容器使用。我們知道容器使用的是 AUFS,這種文件系統不能持久化數據, 當容器關閉後,所有的更改都會丟失。當容器中的應用有持久化數據的需求時可以在

Dockerfile 中使用該指令。格式:

VOLUME ["<mountpoint>"] FROM base

VOLUME ["/tmp/data"]

運行通過該 Dockerfile 生成 image 的容器,/tmp/data 目錄中的數據在容器關閉後,裡面的數據還存在。例如另一個容器也有持久化數據的需求, 且想使用上面容器共用的

/tmp/data 目錄,那麼可以運行下麵的命令啟動一個容器: docker run -t -i -rm -volumes-from container1 image2 bash

container1 為第一個容器的 ID,image2 為第二個容器運行 image 的名字。

(11)   WORKDIR(切換目錄)

設置指令,可以多次切換(相當於 cd 命令),對 RUN,CMD,ENTRYPOINT 生效。

 

 

WORKDIR  /path/to/workdir

# 在 /p1/p2 下執行 vim a.txt

WORKDIR /p1 WORKDIR p2 RUN vim a.txt

(12)   ONBUILD(在子鏡像中執行) ONBUILD <Dockerfile 關鍵字>

ONBUILD 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • NET Core應用框架之BitAdminCore框架應用篇系列 一、簡介 增刪查改是管理程式最基礎的模式,以下介紹BitAdminCore是如何用最快的效率創建一個模塊。 二、建表 第一件事就是建表,本示例提供最簡單表結構,複雜的功能會在後續一步步釋放。 三、生成實體 1、生成實體之前項目要保證編 ...
  • 自定義配置信息的高級應用 通過上篇博文對簡單的自定義配置信息的學習,使得更加靈活的控制系統配置信息。實際項目中,這種配置的靈活度往往無法滿足項目的靈活度和擴展性。 比如,一個配置信息有三部分組成,而每部分中有包括一些配置信息。僅僅使用簡單的自定義配置無法滿足,因此,需要提供更多的自定義配置方法來靈活 ...
  • 20180519更新內容 昨天更新的版本,早上自己下載下來發現創建項目不成功。 這個問題已經多次出現,主要是cookiecutter編碼問題,項目引用大量外部js文件,部分文件在複製的時候編碼較驗不通過,但我們又不得不用。 所以解決方法沒得選,肯定是打包的時候不要包含這些文件,在項目生成後再還原。 ...
  • 經過那麼長時間的學習,終於想給自己這段時間的學習工作做個總結了。記得剛開始學習的時候,什麼資料都沒有,光就啃文檔。不過,值得慶幸的是,自己總算還有一些Web開發的基礎。至少ASP.NET的WebForm和MVC那一套還是有所瞭解的,雖然也不是很精通。說起來,那時候對整個網路應用的整體流程以及什麼HT ...
  • grep命令 作用:從文本文件或管道數據流中篩選匹配的行及數據,配合正則表達式一起使用,功能更加強大。 格式: grep [options] [pattern] [file] 1,匹配包含"ghostwu"的行 2,-v: 不包含,相當於取反 3,-n 添加行號 4,-E,使用擴展的egrep命令, ...
  • ssh遠程登陸到某台機器後,終端經常出現You have new mail in /var/spool/mail/root的提示信息。在不經常查看系統自動生成的郵件或是想查看的時候使用命令查看。停用郵件自動提示:echo "unset MAILCHECK" >> /etc/profile然後sour... ...
  • 最近幾天家裡的筆記本在使用ivacy的時候,老是連接不上,但是用手機登陸同樣帳戶卻可以使用。 排除了帳戶和伺服器端的問題,那應該就出在電腦上了(而且台式機Win7系統沒有問題)。 搜索了一番,終於發現一個有用的方法,將本次解決過程記錄如下。 1,問題現象: VPN連接時,提示“VPN Error: ...
  • uniq命令 作用:輸出或者忽略文件中的重覆行 格式: uniq [option] [file|stdin] 去掉了連續的重覆行.如果只想保留文件中的唯一,可以用選項-u -c:去重覆,並計算每行出現的次數 可以用sort命令排序後,再去重覆,得到的結果 也是唯一的 -d: 只顯示重覆的行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...