一、幫助命令
查看docker版本信息命令
docker version
查看docker相關信息命令
docker info
docker幫助命令
docker --help
二、鏡像命令
一個鏡像可以生成多個容器
1、列出本地主機上的鏡像
docker images
同一個倉庫源可以有多個TAG,代表這個倉庫源的不同的版本,我們使用REPOSITORY:TAG來定義不同的鏡像。如果不指定一個鏡像的版本標籤,默認使用最新版本的鏡像。例如使用ubuntu,docker會默認使用ubuntu:lastest鏡像。
該命令後面可以加參數,例如
(1)列出本地所有的鏡像(包含中間映像層)
docker images -a
(2)只顯示正在運行的鏡像ID
docker images -q
(3)顯示鏡像的摘要信息
docker images --digests
(4)顯示完整的鏡像信息
docker images --no-trunc
以上參數可組合使用
2、查找鏡像
命令如下:
docker search xxx
其中“xxx”代表鏡像名稱
執行該命令,docker會從https://hub.docker.com上面查找你搜索的鏡像
該命令後面可以加一些參數
docker search --no-trunc
上圖命令會顯示更多的鏡像信息。
(2)列出收藏數(STARS)不小於指定值的鏡像
docker search -s
上圖該命令表示查找STARS數不小於30的鏡像
(3)只列出automated build類型的鏡像
docker search --automated
3、下載鏡像
docker pull xxx
其中“xxx”代表鏡像名字,默認拉取的是最新版本的鏡像
若想拉取某個版本的鏡像,可以用下面的命令
docker pull [IMAGES_NAME]:[TAG]
比如拉取tomcat7.0版本的鏡像,可以用這個命令
docker pull tomcat:7.0
4、刪除鏡像
docker rmi [IMAGES_NAME]
(1)刪除單個鏡像
docker rmi -f [IMAGE_ID]
(2)刪除多個鏡像
docker rmi -f 鏡像名1:TAG 鏡像名2:TAG
(3)刪除全部鏡像
docker rmi -f $(docker images -qa)
注:參數“-f”代表強制
5、提交鏡像
提交容器副本使之成爲一個新的鏡像
docker commit -m="提交的描述信息" -a="作者" 容器ID 目標鏡像名:[標籤名]
案例:
(1)從hub上下載tomcat鏡像到本地併成功運行
docker run -it -p 8080:8080 tomcat
其中“-p”代表主機端口:docker容器端口
-P:隨機分配端口
-i:交互
-t:終端
(2)故意刪除上一步鏡像生產tomcat容器的文檔
(3)即當前的tomcat運行實例是一個沒有文檔內容的容器,以它爲模板commit一個沒有doc的tomcat新鏡像“atguigu/mytomcat”
此時新commit的鏡像沒有doc文件
三、容器命令
1、新建並啓動容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其中OPTIONS說明如下:
–name:“容器新名字”:爲容器指定一個名稱(別稱);
-d:後臺運行容器,並返回容器ID,即啓動守護式容器;
-i:以交互模式運行容器,通常與-t同時使用;
-t:爲容器重新分配一個僞輸入終端,通常與-i同時使用;
-P:隨機端口映射;
-p:指定端口映射,有以下四種格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
(1)啓動交互式容器
docker run -it IMAGE_NAME /bin/bash
可通過echo $SHELL查看系統當前使用的shell
(2)啓動守護式容器
docker run -d IMAGE_NAME /bin/bash
運行該命令後,再執行docker ps -a進行查看,會發現容器已經退出。
這就涉及到docker的運行機制了,docker容器後臺運行,就必須有一個前臺進程。
容器運行的命令如果不是通過一直掛起的命令(如top,tail命令)執行,則容器就會自動退出。
比如web容器,以nginx爲例,正常情況下,我們配置啓動服務只需要啓動響應的service即可(service nginx start),但這樣做,nginx爲後臺進程模式運行,就導致docker前臺沒有運行的應用,這樣容器後臺啓動後,會立即自殺。所以最佳的解決方案是,將你要運行的程序以前臺進程的形式運行。
2、列出當前所有正在運行的容器
docker ps [OPTIONS]
OPTIONS參數說明:
-a:列出當前所有正在運行的容器 + 歷史上運行過的容器
-l:顯示最近創建的容器
-n:顯示最近n個創建的容器
-q:靜默模式,只顯示容器編號
–no-trunc:不截斷輸出
3、退出容器
退出容器有兩種方式
(1)容器停止退出
exit
(2)容器不停止退出
ctrl + P + Q
4、啓動容器
docker start 容器ID或容器名
5、重啓容器
docker restart 容器ID或容器名
6、停止容器
docker stop 容器ID或容器名
7、強制停止容器
docker kill 容器ID或容器名
8、刪除已停止的容器
docker rm 容器ID或容器名
一次性刪除多個容器(下面兩條命令都可以,隨便選一條執行就行)
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
9、查看容器日誌
docker logs -f -t --tail 5 容器ID
其中參數-t代表加入時間戳,-f代表跟隨最新的日誌打印,–tail代表數字顯示最後幾條
10、查看容器內運行的進程
docker top 容器ID
11、查看容器內部的細節
docker inspect 容器ID
12、進入正在運行的容器並以命令行交互
(1)exec進入
docker exec -it 容器ID bashShell
(2)attach進入
docker attach 容器ID
(3)上述兩者的區別
attach:直接進入容器啓動命令的終端,不會啓動新的進程
exec:是在容器中打開新的終端,並且可以啓動新的進程
13、從容器內拷貝文件到主機上
docker cp 容器ID:容器內路徑 目的主機路徑
四、容器數據卷
1、概念
docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據作爲鏡像的一部分保存下來,那麼當容器刪除後,數據自然也就沒了。爲了在docker中能保存數據,我們使用卷。
容器數據卷可以讓容器中的數據持久化,容器間繼承並共享數據。
卷就是目錄或文件,存在於一個或多個容器中,由docker掛載到容器,但不屬於聯合文件系統,因此能夠繞過Union File System提供一些用於持久存儲或共享數據的特性。
卷的設計目的就是數據的持久化,完全獨立於容器的生存週期,因此docker不會在容器刪除時刪除其掛載的數據卷。
2、數據卷的特點:
(1)數據卷可在容器之間共享或重用數據
(2)卷中的更改可以直接生效
(3)數據卷中的更改不會包含在鏡像的更新中
(4)數據卷的生命週期一直持續到沒有容器使用它爲止
3、容器內添加數據卷
直接命令添加
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名
若想加讀寫權限限制,可以用下面命令執行
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 鏡像名
其中“ro”代表只讀模式
4、容器與宿主機之間數據共享
5、容器停止退出後,主機修改數據會同步到容器中
五、本地鏡像發佈到阿里雲
1、本地鏡像發佈到阿里雲流程
2、鏡像生成的方法
從容器創建一個新的鏡像(docker commit命令)
3、將本地鏡像推送到阿里雲
(1)準備好本地鏡像
(2)創建阿里雲鏡像倉庫
訪問阿里雲容器鏡像服務,地址:https://cr.console.aliyun.com/cn-shanghai/instances/repositories
在默認實例中選擇鏡像倉庫,點擊創建鏡像倉庫,在彈出的窗口中,填寫相關信息
然後選擇下一步,選擇本地倉庫,最後點擊創建鏡像倉庫
4、將鏡像推送到阿里雲registry
sudo docker login --username="阿里雲賬號" registry.cn-hangzhou.aliyuncs.com
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/"命名空間"/"倉庫名稱":[鏡像版本號]
sudo docker push registry.cn-hangzhou.aliyuncs.com/"命名空間"/"倉庫名稱":[鏡像版本號]
根據實際鏡像信息替換示例中的[ImageId]和[鏡像版本號]參數。
5、從阿里雲Registry中拉取鏡像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/"命名空間"/"倉庫名稱":[鏡像版本號]
注:以上命令中的"命名空間"和"倉庫名稱"根據自己的賬號填寫。