Docker 學習之路(二)docker 常用命令以及詳細解釋

Docker 學習之路(二)docker 常用命令以及詳細解釋

個人理解 docker中的鏡像 就像是咱們java 中的Class ,而容器呢 是基於這個鏡像構建出的實例 類似於咱java 中 根據CLass 構造出的一個個實例對象 ,本人是初學者 理解有誤還請見諒,並麻煩您說說您的看法讓彼此相互學習…

按我理解 簡言之

​ docker 鏡像: ----class

​ docker容器 : ----實例對象

(一)docker 基礎命令

啓動docker

systemctl start docker

關閉docker

systemctl stop docker

重啓docker

systemctl restart docker

查看docker 運行狀態 ------如果是在運行中 輸入命令後 會看到綠色的active

systemctl status docker

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iltKCo8i-1590065300190)(upload\image-20200521111859781.png)]

查看docker 版本號信息

docker version

查看docker 詳細信息 --------此命令可以查看到docker 中容器運行個數 以及鏡像個數等等

docker info

image-20200521111253771

docker 幫助命令 忘記了某些命令便可使用此進行查看與回顧

docker --help

比如 咱忘記了 拉取命令 不知道可以帶哪些參數 咱可以這樣使用

docker pull --help

image-20200521111620131

(二)docker 鏡像命令

查看自己服務器中docker 鏡像列表

docker images

搜索鏡像

docker search 鏡像名
docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 鏡像

image-20200521112530211

拉取鏡像 不加tag(版本號) 即拉取docker倉庫中 該鏡像的最新版本latest 加:tag 則是拉取指定版本

docker pull 鏡像名 
docker pull 鏡像名:tag

拉取最新版 mysql

image-20200521113237254

咱再來拉取一個指定版本號 鏡像 至於版本號呢 可以在docker hub中查看

docker官方鏡像搜索

image-20200521113551977

例如 拉取 mysql 5.7.30 ------------------這裏出現了一些小東西 感覺挺新奇的 隨着學習深入再回過頭來看吧

image-20200521113845254

運行鏡像 ----咱拉取一個tomcat 跑起來試一試

docker run 鏡像名
docker run 鏡像名:Tag

docker pull tomcat

docker run tomcat

image-20200521114405215

發現咱運行後 出現tomcat 默認佔用的8080 端口 說明該鏡像已經是啓動了 ,但是 咱好像鼠標沒有回到咱服務器上了 ,這怎麼辦呢 ?

使用Ctrl+C

docker中 run 命令是十分複雜的 有什麼持久運行 映射端口 設置容器別名 數據卷掛載等

刪除鏡像 ------當前鏡像沒有被任何容器使用纔可以刪除

#刪除一個
docker rmi -f 鏡像名/鏡像ID

#刪除多個 其鏡像ID或鏡像用用空格隔開即可 
docker rmi -f 鏡像名/鏡像ID 鏡像名/鏡像ID 鏡像名/鏡像ID

#刪除全部鏡像  -a 意思爲顯示全部, -q 意思爲只顯示ID
docker rmi -f $(docker images -aq)

強制刪除鏡像

docker image rm 鏡像名稱/鏡像ID

鏡像的基礎命令就到這裏 下方會使用更復雜的 docker run 命令 來根據鏡像啓動容器

保存鏡像
將我們的鏡像 保存爲tar 壓縮文件 這樣方便鏡像轉移和保存 ,然後 可以在任何一臺安裝了docker的服務器上 加載這個鏡像
docker save 鏡像名/鏡像ID -o 鏡像保存在哪個位置與名字
exmaple: docker save tomcat:latest -o /docker/aaaa.tar

docker save tomcat -o /myimg.tar

在這裏插入圖片描述
在這裏插入圖片描述
加載鏡像
任何裝 docker 的地方加載鏡像保存的文件 使其恢復爲一個鏡像

docker load -i 鏡像保存文件位置

在這裏插入圖片描述
加載文件 恢復爲鏡像
在這裏插入圖片描述
查看鏡像 測試鏡像功能是否正常
在這裏插入圖片描述

(三)docker 容器命令

前言已經說了 docker 容器 就好比 咱java中的對象 ,docker 容器的啓動需要 鏡像的支持

先放上 docker 容器查看命令

查看正在運行容器列表

docker ps

查看所有容器 -----包含正在運行 和已停止的

docker ps -a

容器怎麼來呢 可以通過run 鏡像 來構建 自己的容器實例

根據鏡像 運行並進入一個容器 容器命令

# -it 表示 與容器進行交互式啓動 -d 表示可後臺運行容器 (守護式運行)  --name 給要運行的容器 起的名字  /bin/bash  交互路徑
docker run -it -d --name 要取得別名 鏡像名:Tag /bin/bash 

例如我們要啓動一個redis 把它的別名取爲redis001 並交互式運行 需要的命令 —我這裏指定版本號爲5.0.5

#1. 拉取redis 鏡像
docker pull redis:5.0.5
#2.命令啓動
docker run -it -d --name redis001 redis:5.0.5 /bin/bash

image-20200521141429893

#3.查看已運行容器
docker ps

image-20200521141530871

發現看到了 redis 使用了6379 端口 那麼我們在關閉防火牆或開啓了安全組的情況下 是否可以進行訪問呢?

爲了 區分 咱們使用linux 命令 查看一下

netstat -untlp

image-20200521142934877

使用 redis desktop manger 連接測試一下

image-20200521143043536

爲什麼不行呢 已經確定了 docker 中 redis 容器已經是在運行中 且佔有端口 6379啊

因爲:佔用的6379端口 僅僅是在容器中內部 外部是不知道的

接下來 進行 容器端口映射

首先停止容器

# 先停止咱之前運行的 redis 容器 
docker stop 容器名/容器ID

image-20200521143812702

然後刪除容器 -----不經意間 咱發現已經運行過這麼多容器了 咱進行清理一下

image-20200521143956423

#刪除一個容器
docker rm -f 容器名/容器ID
#刪除多個容器 空格隔開要刪除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#刪除全部容器
docker rm -f $(docker ps -aq)

image-20200521144335238

這樣 容器就已經刪除完畢了 ,咱們接着弄 前邊說的 端口映射

容器端口與服務器端口映射

還是使用前方的 redis 鏡像 嘗試 將6379端口 映射到服務器的8888 如果成功了的話 那麼咱們訪問服務器的8888端口就會訪問到咱們的 docker 中 的容器 redis002

-p 8888:6379 解析 將容器內部的 6379端口與docker 宿主機(docker裝在哪太服務器 那臺服務器 就是其數組機)8888 端口進行映射 那通過外部訪問宿主機8888端口 即可訪問到 docker 容器 6379 端口了

docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash

image-20200521144826072

在運行後 發現服務器的 8888 端口顯示已被docker-proxy 所佔用了 那麼此時咱再用工具進行連接測試呢?

image-20200521161729868

**進入對應容器 ** —這裏咱就進入 前面的 redis001容器

docker exec -it 容器名/容器ID /bin/bash

#進入 前面的 redis001容器   
docker exec -it redis001 /bin/bash

image-20200521141914333

可以看到 我已經從主機alibyleilei 跳到了容器ID 對應下的 /data 已經是進入到容器內部了

**進入容器方式二 ** — 推薦使用 exec 方式

docker attach 容器名/容器ID

那怎麼退出容器呢

從容器內 退出到自己服務器中 需注意 兩個退出命令的區別

#-----直接退出  未添加 -d(持久化運行容器) 時 執行此參數 容器會被關閉  
exit
# 優雅提出 --- 無論是否添加-d 參數 執行此命令容器都不會被關閉
Ctrl + p + q

停止容器

docker stop 容器ID/容器名

重啓容器

docker restart 容器ID/容器名

啓動容器

docker start 容器ID/容器名

kill 容器

docker kill 容器ID/容器名

**容器文件拷貝 ** —無論容器是否開啓 都可以進行拷貝

#docker cp 容器ID/名稱:文件路徑  要拷貝到外部的路徑   |要拷貝到外部的路徑  容器ID/名稱:文件路徑
#從容器內 拷出
docker cp 容器ID/名稱: 容器內路徑  容器外路徑
#從外部 拷貝文件到容器內
docker  cp 容器外路徑 容器ID/名稱: 容器內路徑

查看容器日誌

docker logs -f --tail=要查看末尾多少行 默認all 容器ID

image-20200521204550123

(四)自己提交一個鏡像

我們運行的容器可能在鏡像的基礎上做了一些修改,有時候我們希望保存起來,封裝成一個更新的鏡像,這時候我們就需要使用 commit 命令來構建一個新的鏡像

docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交後的鏡像名:Tag

我們拉取一個tomcat鏡像 並持久化運行 且設置與宿主機進行端口映射

docker pull tomcat

docker run -itd -p8080:8080 --name tom tomcat /bin/bash

訪問 咱的端口 發現訪問404 這是因爲咱配置了阿里雲鏡像後 所拉取得鏡像都是最基礎班的 僅僅包含其容器必要數據 例如 容器中 vim vi ll 命令都沒有

image-20200521195641404image-20200521195934938

咱們的webapps 下一個文件都沒有 ,訪問肯定404羅

不斷查看 發現咱 webapps.dist 下是有文件的 我們把它拷貝的webapps 下 然後打包成一個新的鏡像 後 訪問查看是否進入到首頁 不進入404頁面

image-20200521200509889

exit 退出容器

使用 提交命令 將在運行的tomcat 容器 打包爲一個全新的鏡像 名字爲tom Tag爲1.0

docker commit -a="leilei" -m="第一次打包鏡像,打包後直接訪問還會404嗎" 231f2eae6896 tom:1.0

image-20200521200732680
爲了區分 咱停止並刪除之前tomcat 的容器
image-20200521201009678

接下來 運行咱自己打包的鏡像 tom:1.0

設置容器名字爲lei 映射端口爲6500:8080

docker run -d -it  -p6500:8080 --name lei tom:1.0 /bin/bash

image-20200521202016653

image-20200521201958111

訪問6500 端口進入到了 tomcat 首頁 說明 咱commit 鏡像成功了

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