Docker基本操作

IT王小二發表於2021-07-12

Docker容器及映象的基本操作,操作命令和Linux極其相似,比較簡單,本文僅演示部分命令。

同時個人學習過程中命令參考來自 菜鳥教程 ,個人認為入門命令或許最輕鬆簡單的就是這裡了,每條命令執行完都有示例結果。

系列文章歡迎訪問:系列文章

一、映象操作

1. 映象操作常用命令

# 列出本地映象列表
docker images

# 獲取映象
docker pull [映象名:版本]

# 刪除映象
docker rmi [映象名:版本或映象ID]

# Dockerfile 建立映象
docker build -t [映象名:版本] [path]

# 檢視指定映象的建立歷史
docker history [映象名:版本]

# 將映象儲存成 tar 歸檔檔案的兩種方式,通常不使用,都是使用映象倉庫儲存
docker save -o xxx.tar [映象名:版本]
save [映象名:版本]>xxx.tar

# 從歸檔檔案載入映象的兩種方式,通常不使用,都是使用映象倉庫獲取
docker load --input xxx.tar / docker load<xxx.tar

列出本地映象列表

docker images

列出本地映象列表

  • REPOSITORY:映象所在倉庫的名稱
  • TAG:映象標籤(映象版本)
  • IMAGEID:映象ID
  • CREATED:映象的建立日期(不是獲取該映象的日期)
  • SIZE:映象大小

獲取映象

docker pull [映象名:版本]

當不加入版本號時預設最後一個版本,即最新的版本。

例如獲取 MySQL5.7 版本,命令:

獲取mysql5.7映象

刪除映象

docker rmi [映象名:版本或映象ID]

例如刪除 hello-world 映象。

刪除hellor-world映象

二、容器操作

1. 容器生命週期管理命令

# 檢視容器列表(預設檢視正在執行的容器,-a檢視所有容器)
docker ps

# 建立一個新的容器並執行一個命令,run為建立並執行,create僅建立不執行
docker run/create [引數] [映象名:版本]

# 啟動/停止/重啟一個容器
docker start/stop/restart [容器名或容器ID]

# 直接殺掉容器,不給程式響應時間
docker kill [容器名或容器ID]

# 刪除已經停止的容器
docker rm [容器名或容器ID]

# 暫停/恢復容器中的程式
docker pause/unpause [容器名或容器ID]

這部分命令比較簡單,僅解釋容器列表含義、容器啟動引數詳解。

容器通常情況下都是隨用隨刪,要注意資料掛載儲存!

檢視容器列表

docker ps

檢視容器列表

  • CONTAINER ID:容器ID,具有唯一性
  • IMAGE:容器例項化出來的映象名稱和版本號
  • COMMAND:啟動容器時執行的命令
  • CREATED:容器建立時間
  • STATUS:容器狀態,有七種
    • created(已建立)
    • restarting(重啟中)
    • running(執行中)
    • removing(遷移中)
    • paused(暫停)
    • exited(停止)
    • dead(死亡)
  • PORTS:容器的埠對映資訊
  • NAMES:容器名稱

建立並執行容器

docker run [引數] [映象名:版本]

常用引數:

-d:後臺執行容器,並返回容器ID;
-i:以互動模式執行容器,通常與 -t 同時使用
-t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用
-p:埠對映,格式為:宿主機埠:容器埠
--restart=always:代表 docker 重啟時,dockerHub 容器也總是隨之啟動
--name 容器名稱:為容器指定一個名稱
-v:掛載宿主機目錄到容器目錄,格式為-v [宿主機目錄]:[容器目錄]
-m:設定容器使用記憶體最大值
後臺啟動容器

建立一個tomcat8.0服務,以後臺方式執行,對映主機埠8090,容器名稱tomcat8090,命令如下:

docker run -d --name tomcat8090 -p 8090:8080 tomcat:8.0

後臺啟動tomcat8090

啟動成功之後,訪問看下tomcat服務是否正常,當然前提宿主機的8090埠需要開放,我的地址為:http://192.168.5.33:8090

互動式建立容器並進入容器

建立一個tomcat8.0服務,,以互動式方式執行,對映主機埠8091,容器名稱tomcat8091,命令如下:

docker run -it --name tomcat8091 -p 8091:8080 tomcat:8.0

互動式建立容器並進入容器

可以看到兩者的不同,但是需要注意,互動式啟動容器,一旦執行 exit 命令那麼容器也會 stop,檢視結果如下圖,tomcat8091 已經處於停止狀態。

image-20210627203710815

如果需要互動式執行卻不退出容器,可以使用 ctrl + q + p 退出互動式頁面,這樣容器不會退出執行。

掛載宿主機目錄到容器

當我們想掛載宿主機的檔案目錄到容器,或者持久化容器某些內容時,例如 MySQL 資料持久化,往 tomcat 容器執行專案,此處就以 tomcat 容器執行專案掛載為例。

此處使用的專案為開源專案: https://github.com/jgraph/drawio,這也是我用來畫圖的開源工具,工具支援中文,如果你不想使用付費工具,那麼這個開源工具絕對值得你嘗試,話不多說,命令寫上:

1、首先幹掉所有容器

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

2、這裡我就使用 https://github.com/jgraph/drawio 這個畫圖的開源專案來示例

# 宿主機建立掛載目錄
mkdir -p /itwxe/tomcat/webapps

# wget下載 war 包到建立的目錄,也可以下載 war 後上傳
cd /itwxe/tomcat/webapps
wget https://github.com/jgraph/drawio/releases/download/v14.8.0/draw.war

# 啟動 tomcat 容器,掛載的路徑都必須是絕對路徑
docker run -d --name tomcat_drawio -p 8090:8080 -v /itwxe/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.0

啟動成功後訪問 http://192.168.5.33:8090/draw 看看效果,效果如下圖:

draw掛載目錄執行效果

可以看到,war 包正常掛載到了容器,draw專案也部署執行起來了。

2. 容器操作運維

# 檢視容器配置後設資料
docker inspect [容器名或容器ID]

# 進入容器環境中互動操作
docker exec -it [容器名或容器ID] /bin/bash

# 檢視容器日誌
docker logs [--since="2019-02-01"] [-f] [--tail=10] [容器名或容器ID]

# 容器檔案系統作為一個 tar 歸檔檔案
docker export -o test.tar [容器名或容器ID]
docker export [容器名或容器ID]>test.tar

# 匯入歸檔檔案,成為一個映象
docker import test.tar [映象名:版本]

檢視容器配置後設資料

docker inspect [容器名或容器ID]

例如檢視啟動的 tomcat_drawio 後設資料:docker inspect tomcat_drawio

裡面可以看到繫結ip,掛載目錄,容器ip 等資訊,通常情況下得網段 ip 為:

docker容器預設網段ip

通常情況無需修改,預設即可,需要修改是可以在 /etc/docker/daemon.json 新增 bip 配置

vim /etc/docker/daemon.json

# 新增bip配置,修改網段為 172.17.5.1,通常預設 172.17.0.1
{
  "bip": "172.17.5.1/24",
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}

# 更新配置
systemctl daemon-reload
systemctl restart docker

再次檢視資訊,可以看到網段已經更改了,通常預設即可

docker更改網段ip

同樣宿主機和docker相互訪問也是通過網路卡來訪問的,docker安裝後會新增一個網路卡,使用 ip addr 命令檢視。

docker網路卡

進入容器環境中互動操作

docker exec -it [容器名或容器ID] /bin/bash

例如進入已經啟動的容器 tomcat_drawio 中。

docker exec -it tomcat_drawio /bin/bash

可以看到命令執行後就進入了容器中,容器中的命令和Linux的使用基本沒差別,不過僅支援最小化的Linux命令,例如檢視檔案命令 ll 命令就不支援,僅支援 ls 命令。

進入容器進行互動操作

檢視容器日誌

docker logs [--since="2019-02-01"] [-f] [--tail=10] [容器名或容器ID]

檢視 docker 容器日誌命令和 Linux 系統中 tail 命令類似,例如檢視 tomcat_drawio 的執行日誌。

docker logs -f tomcat_drawio

3. 容器rootfs命令

# path 容器與主機之間的資料拷貝
docker cp [主機檔案路徑] [容器名或容器ID:[容器路徑]]

# 通過容器生成映象
docker commit [引數] [容器名稱或容器ID] [映象名稱[:版本]]

# 檢查容器裡檔案結構的更改
docker diff [容器名稱或容器ID]

容器與主機之間的資料拷貝

docker cp [主機檔案路徑] [容器名或容器ID]

以複製 draw.war 檔案到 tomcat 容器的 /usr/local/tomcat 目錄為例,當然通常 war 包不放在這裡。

docker cp /itwxe/tomcat/webapps/draw.war tomcat_drawio:/usr/local/tomcat

可以看到 draw.war 成功拷貝進了容器中。

容器和主機間的資料拷貝

通過容器生成映象

docker commit [引數] [容器名稱或容器ID] [映象名稱[:版本]]

引數:

-a:提交的映象作者
-c:使用Dockerfile指令來建立映象
-m:提交時的說明文字
-p:在commit時,將容器暫停

有時候我們需要將我們改動的容器逆向生成映象,這樣通過映象建立出來的容器就有了我們所有的更改。

例如需要將部署了 drawio 專案的 tomcat 容器(tomcat_drawio) 逆向生成映象。

需要注意的是,通過 -v 掛載的目錄資料不會封裝到映象,所以需要把資料拷貝到容器中

# 幹掉其它的示例容器
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

# 啟動一個新的容器
docker run -dit --name tomcat8090 -p 8090:8080 tomcat:8.0

# 往裡面拷貝 draw.war 包,war包會自動解壓部署
docker cp /itwxe/tomcat/webapps/draw.war tomcat8090:/usr/local/tomcat/webapps/

# 容器生成映象
docker commit -a "itwxe" -m "itwxe create tomcat drawio" tomcat8090 tomcat:itwxe_drawio

# 啟動容器
docker run -dit --name tomcat9000 -p 9000:8080 tomcat:itwxe_drawio

可以看到生成映象成功,啟動也沒問題,同時 http://192.168.5.33:8090/draw 當然也可以正常訪問的。

通過容器生成映象

通常情況下生成速度都很快,這是因為容器建立時其實只是在映象檔案上面多建立了一層可讀寫的檔案,而通過容器生成映象時只需要把這一層的檔案從可讀寫修改成只讀即可,而基礎映象層會複用。

三、倉庫操作

1. 倉庫操作常用命令

# 登陸倉庫 
docker login

# 標記本地映象,將其歸入某一倉庫
docker tag [映象名:版本] [倉庫]/[映象名:版本]

# 推送映象到倉庫 --需要登陸
docker push [倉庫]/[映象名:版本]

# 在倉庫中查詢映象,無法查詢到 tag 版本
# 其中 OFFICIAL 引數值為 [OK] 的代表官方映象,通常使用官方映象比較安全
docker search [映象名]

# 下載映象到本地
docker pull [映象名:版本]

# 退出賬號
docker logout

2. Docker官方倉庫

前提

1、首先 DockerHub 註冊賬號,郵件啟用,這就不多說了。

2、建立倉庫,用於存放需要上傳的映象,此處我仍然以 tomcat:tudouge_drawio 為例,公開或私有自己選擇。

建立docker倉庫

上傳示例

1、登入 docker,輸入註冊的使用者名稱密碼登入即可,警告可參考提示文件解決。

docker登入

2、再使用 tag 命令標記一個映象,指定自己建立的倉庫。

docker指定自己的倉庫

3、使用 push 命令推送此映象到 docker 官方倉庫裡。

docker推送映象到官方倉庫

4、查詢自己的倉庫,可以看到剛才設定的 v1 版本已經提交了,如果是公共倉庫,那麼別人也可以從你這裡獲取映象,命令:docker pull itwxe/tomcat_drawio:v1

docker檢視提交的映象

3. Docker私服倉庫

通常情況下在開發部署測試時可能都沒有外網(內網通訊),又或者你不想把你的映象放在公網上,那麼就需要私服倉庫了。

搭建私服倉庫

1、下載 registry 映象,當前時間最新版本是2.x.x,所以就不指定版本了。

docker pull registry

2、配置允許 http 訪問,預設僅允許 https 訪問。

vim /etc/docker/daemon.json

# 新增 insecure-registries 配置,修改 ip 埠為你自己的
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
  "insecure-registries": ["192.168.5.33:5000"]
}

# 重新整理配置,重啟 docker
systemctl daemon-reload
systemctl restart docker

3、啟動私服倉庫容器。

docker run -d --name dockerHub -p 5000:5000 registry

docker ps -a

curl http://192.168.5.33:5000/v2/_catalog

啟動私服倉庫容器

可以 curl 檢視倉庫的映象內容,也可以瀏覽器 http://ip:port/v2/_catalog 檢視。

提交映象到私服倉庫

提交私服倉庫過程和提交官方倉庫步驟一致,以提交 tomcat:tudouge_drawio 到私服倉庫為例。

提交映象到私服倉庫

同樣,拉取映象的時候也加上 ip:port

docker pull 192.168.5.33:5000/tomcat_drawio:private1

都讀到這裡了,來個 點贊、評論、關注、收藏 吧!

文章作者:IT王小二
首發地址:https://www.itwxe.com/posts/c078c813/
版權宣告:文章內容遵循 署名-非商業性使用-禁止演繹 4.0 國際 進行許可,除特殊宣告外皆為原創,轉載請在文章頁面明顯位置給出作者與原文連結。

相關文章