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
docker 幫助命令 忘記了某些命令便可使用此進行查看與回顧
docker --help
比如 咱忘記了 拉取命令 不知道可以帶哪些參數 咱可以這樣使用
docker pull --help
(二)docker 鏡像命令
查看自己服務器中docker 鏡像列表
docker images
搜索鏡像
docker search 鏡像名
docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 鏡像
拉取鏡像 不加tag(版本號) 即拉取docker倉庫中 該鏡像的最新版本latest 加:tag 則是拉取指定版本
docker pull 鏡像名
docker pull 鏡像名:tag
拉取最新版 mysql
咱再來拉取一個指定版本號 鏡像 至於版本號呢 可以在docker hub中查看
例如 拉取 mysql 5.7.30 ------------------這裏出現了一些小東西 感覺挺新奇的 隨着學習深入再回過頭來看吧
運行鏡像 ----咱拉取一個tomcat 跑起來試一試
docker run 鏡像名
docker run 鏡像名:Tag
docker pull tomcat
docker run tomcat
發現咱運行後 出現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
#3.查看已運行容器
docker ps
發現看到了 redis 使用了6379 端口 那麼我們在關閉防火牆或開啓了安全組的情況下 是否可以進行訪問呢?
爲了 區分 咱們使用linux 命令 查看一下
netstat -untlp
使用 redis desktop manger 連接測試一下
爲什麼不行呢 已經確定了 docker 中 redis 容器已經是在運行中 且佔有端口 6379啊
因爲:佔用的6379端口 僅僅是在容器中內部 外部是不知道的
接下來 進行 容器端口映射
首先停止容器
# 先停止咱之前運行的 redis 容器
docker stop 容器名/容器ID
然後刪除容器 -----不經意間 咱發現已經運行過這麼多容器了 咱進行清理一下
#刪除一個容器
docker rm -f 容器名/容器ID
#刪除多個容器 空格隔開要刪除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#刪除全部容器
docker rm -f $(docker ps -aq)
這樣 容器就已經刪除完畢了 ,咱們接着弄 前邊說的 端口映射
容器端口與服務器端口映射
還是使用前方的 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
在運行後 發現服務器的 8888 端口顯示已被docker-proxy 所佔用了 那麼此時咱再用工具進行連接測試呢?
**進入對應容器 ** —這裏咱就進入 前面的 redis001容器
docker exec -it 容器名/容器ID /bin/bash
#進入 前面的 redis001容器
docker exec -it redis001 /bin/bash
可以看到 我已經從主機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
(四)自己提交一個鏡像
我們運行的容器可能在鏡像的基礎上做了一些修改,有時候我們希望保存起來,封裝成一個更新的鏡像,這時候我們就需要使用 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 命令都沒有
咱們的webapps 下一個文件都沒有 ,訪問肯定404羅
不斷查看 發現咱 webapps.dist 下是有文件的 我們把它拷貝的webapps 下 然後打包成一個新的鏡像 後 訪問查看是否進入到首頁 不進入404頁面
exit 退出容器
使用 提交命令 將在運行的tomcat 容器 打包爲一個全新的鏡像 名字爲tom Tag爲1.0
docker commit -a="leilei" -m="第一次打包鏡像,打包後直接訪問還會404嗎" 231f2eae6896 tom:1.0
爲了區分 咱停止並刪除之前tomcat 的容器
接下來 運行咱自己打包的鏡像 tom:1.0
設置容器名字爲lei 映射端口爲6500:8080
docker run -d -it -p6500:8080 --name lei tom:1.0 /bin/bash
訪問6500 端口進入到了 tomcat 首頁 說明 咱commit 鏡像成功了