Docker操作實踐(3):Docker的操作詳解
- 2019 年 10 月 11 日
- 筆記
如果你還沒看過前面的內容:
一張圖了解docker命令

上圖摘自:
http://bingohuang.com/simplify-docker-image-2/
1. 概念介紹:
Images:docker鏡像。可將容器轉化為鏡像,也可從鏡像運行出一個個的容器實例。類似於虛擬機模板的概念。
Container:容器。
有runningstoppedpause三種狀態,類似於虛擬機的概念。
Tar files:可以將鏡像打包為tar文件,也可以將打包後的tar文件重新load為鏡像
Dockerfile:構建鏡像的聲明式配置文件。Docker技術的核心亮點之一。當我們從一個基礎鏡像(centos鏡像)構建一個另一個基礎鏡像(如java鏡像)時,一般不會使用的在centos鏡像中直接安裝java的方式,而是將java軟體與centos鏡像放置於一起,在相同目錄下編寫好dockerfile,dockerfile中定義了java鏡像安裝的命令和環境配置參數等安裝資訊,然後使用docker build命令就可以將這些軟體及配置文件打包成一個java鏡像。這樣做的好處就是通過這種聲明式的構建方式最終構建了一個純凈的鏡像文件。
Registry:鏡像倉庫。用於存儲鏡像文件。
Engine:docker引擎
2. 與Engine相關的命令
Docker version 查看docker版本
Docker info 顯示 Docker 系統資訊,包括鏡像和容器數.
Docker events 從伺服器獲取實時事件
3. 與容器相關的命令
狀態操作命令:
- Docker start 從stop到running
- Docker kill 從running到stop,直接kill容器進程
- Docker stop 從running到stop,容器在停止前先完成一些保護性的動作之後再停止容器
- Docker pause 暫停容器中所有的進程
- Docker unpause 恢復容器中所有的進程
容器與鏡像相關的操作命令:
- Docker commit 將容器保存為一個新的鏡像
- Docker create 從鏡像創建一個容器,該容器狀態為stop
- Docker run 從鏡像創建一個容器並將該容器啟動
- Docker diff 檢查自鏡像運行之後,容器里文件結構的更改
容器與tar文件相關的操作命令:
- Docker export 將容器導出為一個tar文件
容器自身的其他操作命令:
- Docker inspect 獲取容器/鏡像的元數據
- Docker attach 連接到正在運行中的容器
- Docker port 列出指定的容器的埠映射
- Docker ps 查看系統中的容器
- Docker top 查看容器中運行的進程資訊
- Docker rm 刪除容器
- Docker logs 獲取容器的日誌
- Docker wait 阻塞運行直到容器停止,然後列印出它的退出程式碼
- Docker exec 在運行的容器中執行命令
- Docker network 操作容器網路
4. 與鏡像相關的命令
容器與鏡像相關的操作命令:
- Docker commit 將容器保存為一個新的鏡像
- Docker create 從鏡像創建一個容器,該容器狀態為stop
- Docker run 從鏡像創建一個容器並將該容器啟動
- Docker diff 檢查自鏡像運行之後,容器里文件結構的更改
鏡像與tar files相關的命令:
- Docker import 將tar文件load為鏡像,會丟失相關的元數據和歷史記錄
- Docker load 將tar文件load為鏡像
- Docker save 將鏡像保存為tar文件
鏡像與dockerfile相關的命令:
- Docker build 基於dockerfile構建鏡像
鏡像與倉庫相關的命令:
- Docker pull 從倉庫下載鏡像
- Docker push 將鏡像上傳至倉庫
鏡像自身的命令:
- Docker images 列舉鏡像
- Docker rmi 刪除鏡像
- Docker tag 為鏡像打上標籤
- Docker inspect 列出鏡像的詳細資訊
- Docker history 列出鏡像的構建歷史
5. 與 tar files相關的命令
- Docker export 將容器導出tar文件
- Docker import 將tar文件load為鏡像,會丟失相關的元數據和歷史記錄
- Docker load 將tar文件load為鏡像
- Docker save 將鏡像保存為tar文件
6. 與dockerfile相關的命令:
- Docker build 基於dockerfile構建鏡像
7. 與Registry相關的命令:
鏡像與倉庫相關的命令:
Docker pull 從倉庫下載鏡像
Docker push 將鏡像上傳至倉庫
倉庫自身的命令:
Docker search 在倉庫中查找某個鏡像
Docker login 登錄倉庫
Docker logout 登出倉庫
其他docker命令學習示意圖
Docker命令學習示意圖:

圖片來源:https://blog.csdn.net/yuanfenger/article/details/73316481
Docker命令學習示意圖:

圖片來源:https://www.twblogs.net/a/5c290471bd9eee01606d2e41
Docker run命令簡介
Docker run命令的作用在於從一個容器鏡像生成一個容器實例並將其啟動。
Docker run的主要命令參數如下:
主要參數 |
說明 |
|
---|---|---|
-d |
後台運行容器,並返回容器ID |
|
-i |
以交互模式運行容器,通常與 -t 同時使用 |
|
-t |
為容器重新分配一個偽輸入終端,通常與 -i 同時使用 |
|
–name="nginx-lb" |
為容器指定一個名稱 |
|
–dns 8.8.8.8 |
指定容器使用的DNS伺服器,默認和宿主一致 |
|
-h "mars" |
指定容器的hostname |
|
-e username="tom" |
設置環境變數 |
|
-m |
設置容器使用記憶體最大值 |
|
–net="bridge" |
指定容器的網路連接類型,支援 bridge/host/none/container: 四種類型 |
|
–link=[] |
添加鏈接到另一個容器 |
|
–expose=[] |
開放一個埠或一組埠 |
|
-p |
將一個docker主機的埠映射到容器中 |
|
-v |
將一個docker主機的目錄映射到容器中 |
|
–ip |
為容器指定ip地址 |
Docker run命令關鍵參數說明
1. -i -t -d
使用docker run -it [IMAGE_NAME] 可以啟動一個容器,並進入命令行交互介面:

使用exit可退出此容器
使用-d可以讓容器在後台運行:

2. –ip
–ip可以為容器指定ip地址,先使用docker network ls查看主機上的docker網路:


使用–ip參數啟動容器:

此時會報錯,如果要使用自定義ip,只能使用自定義的容器網路。先創建自定義的容器網路:

也可以在創建時手動指定容器的子網:

重新運行指定容器ip的命令:

執行成功,查看容器ip地址:

3. -h –name
-h指定容器中的主機名,–name指定容器的名字


4. -p
-p 可以將主機上的埠映射到容器中。-p 8088:80 表示將主機的8088埠映射到容器的80埠上:


5. -v
–privileged表示將對主機的文件更改的許可權賦予此容器, -v 表示將主機的 /host/v1 目錄映射給容器上的 /con/logs目錄 ,如果容器中沒有此目錄,則會自動創建。執行命令
docker run -it –privileged -v /host/v1:/con/logs centos

在主機上的相應目錄可看到容器中對該目錄寫入的內容

為容器掛載主機上的卷並設置容器只有對此卷的只讀許可權:
docker run -it –privileged -v /host/v1:/con/logs:ro centos

6. -m -c
-m用來指定容器記憶體,-c可用於指定容器的cpu配額
我們可以下載progrium/stress容器來測試容器的配額指定。使用以下命令查看該容器有哪些測試功能:

使用docker run -m 2000m可啟動一個記憶體佔用2000MB的容器,但該容器中未進行什麼進程時,該容器並不會直接佔用主機2000MB的記憶體。此時我們可以啟動stress容器,並使用–vm 1和 –vm-bytes 2000M表示啟動stress容器時在其中啟動一個佔用記憶體2000M的進程:

如果我們在一個總限額為2000MB的stress容器中啟動3個佔用500MB的進程,總共1500MB,那麼情況如下:

在容器中是運行超過容器記憶體限額的進程的:

關於cpu限制,–cpu-share表示主機上運行的容器的cpu使用權重的定義。由於主機上有4個cpu核,所有需 –cpu 4參數在容器中啟動4個進程以便將主機的cpu全部佔滿。

關於docker run中的 –cpus 參數,則是指定cpu的個數。當主機上有4個cpu時,容器只會使用總共1個cpu,也就是4分之1。

此數值也可以為小數,如0.5 ,那麼容器只會使用此主機8分之1的cpu。

當數值與主機的cpu核數相同時,將可使用此主機的所有cpu配額,可以看到4個cpu全滿。

我們可以啟動5個佔滿cpu的進程而不是4個,情況如下:

作者:沈曉龍