一、幫助命令
查看docker版本信息命令
docker version
查看docker相關(guān)信息命令
docker info
docker幫助命令
docker --help
二、鏡像命令
一個(gè)鏡像可以生成多個(gè)容器
1屯换、列出本地主機(jī)上的鏡像
docker images
同一個(gè)倉庫源可以有多個(gè)TAG政敢,代表這個(gè)倉庫源的不同的版本,我們使用REPOSITORY:TAG來定義不同的鏡像唯灵。如果不指定一個(gè)鏡像的版本標(biāo)簽,默認(rèn)使用最新版本的鏡像隙轻。例如使用ubuntu埠帕,docker會(huì)默認(rèn)使用ubuntu:lastest鏡像。
該命令后面可以加參數(shù)玖绿,例如
(1)列出本地所有的鏡像(包含中間映像層)
docker images -a
(2)只顯示正在運(yùn)行的鏡像ID
docker images -q
(3)顯示鏡像的摘要信息
docker images --digests
(4)顯示完整的鏡像信息
docker images --no-trunc
以上參數(shù)可組合使用
2敛瓷、查找鏡像
命令如下:
docker search xxx
其中“xxx”代表鏡像名稱
執(zhí)行該命令,docker會(huì)從https://hub.docker.com上面查找你搜索的鏡像
該命令后面可以加一些參數(shù)
docker search --no-trunc
上圖命令會(huì)顯示更多的鏡像信息斑匪。
(2)列出收藏?cái)?shù)(STARS)不小于指定值的鏡像
docker search -s
上圖該命令表示查找STARS數(shù)不小于30的鏡像
(3)只列出automated build類型的鏡像
docker search --automated
3呐籽、下載鏡像
docker pull xxx
其中“xxx”代表鏡像名字,默認(rèn)拉取的是最新版本的鏡像
若想拉取某個(gè)版本的鏡像蚀瘸,可以用下面的命令
docker pull [IMAGES_NAME]:[TAG]
比如拉取tomcat7.0版本的鏡像狡蝶,可以用這個(gè)命令
docker pull tomcat:7.0
4、刪除鏡像
docker rmi [IMAGES_NAME]
(1)刪除單個(gè)鏡像
docker rmi -f [IMAGE_ID]
(2)刪除多個(gè)鏡像
docker rmi -f 鏡像名1:TAG 鏡像名2:TAG
(3)刪除全部鏡像
docker rmi -f $(docker images -qa)
注:參數(shù)“-f”代表強(qiáng)制
5贮勃、提交鏡像
提交容器副本使之成為一個(gè)新的鏡像
docker commit -m="提交的描述信息" -a="作者" 容器ID 目標(biāo)鏡像名:[標(biāo)簽名]
案例:
(1)從hub上下載tomcat鏡像到本地并成功運(yùn)行
docker run -it -p 8080:8080 tomcat
其中“-p”代表主機(jī)端口:docker容器端口
-P:隨機(jī)分配端口
-i:交互
-t:終端
(2)故意刪除上一步鏡像生產(chǎn)tomcat容器的文檔
(3)即當(dāng)前的tomcat運(yùn)行實(shí)例是一個(gè)沒有文檔內(nèi)容的容器贪惹,以它為模板commit一個(gè)沒有doc的tomcat新鏡像“atguigu/mytomcat”
此時(shí)新commit的鏡像沒有doc文件
三、容器命令
1寂嘉、新建并啟動(dòng)容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其中OPTIONS說明如下:
--name:“容器新名字”:為容器指定一個(gè)名稱(別稱)奏瞬;
-d:后臺(tái)運(yùn)行容器,并返回容器ID泉孩,即啟動(dòng)守護(hù)式容器硼端;
-i:以交互模式運(yùn)行容器,通常與-t同時(shí)使用寓搬;
-t:為容器重新分配一個(gè)偽輸入終端显蝌,通常與-i同時(shí)使用;
-P:隨機(jī)端口映射;
-p:指定端口映射曼尊,有以下四種格式:
? ip:hostPort:containerPort
? ip::containerPort
? hostPort:containerPort
? containerPort
(1)啟動(dòng)交互式容器
docker run -it IMAGE_NAME /bin/bash
可通過echo $SHELL查看系統(tǒng)當(dāng)前使用的shell
(2)啟動(dòng)守護(hù)式容器
docker run -d IMAGE_NAME /bin/bash
運(yùn)行該命令后酬诀,再執(zhí)行docker ps -a進(jìn)行查看,會(huì)發(fā)現(xiàn)容器已經(jīng)退出骆撇。
這就涉及到docker的運(yùn)行機(jī)制了瞒御,docker容器后臺(tái)運(yùn)行,就必須有一個(gè)前臺(tái)進(jìn)程神郊。
容器運(yùn)行的命令如果不是通過一直掛起的命令(如top肴裙,tail命令)執(zhí)行,則容器就會(huì)自動(dòng)退出涌乳。
比如web容器蜻懦,以nginx為例,正常情況下夕晓,我們配置啟動(dòng)服務(wù)只需要啟動(dòng)響應(yīng)的service即可(service nginx start)宛乃,但這樣做,nginx為后臺(tái)進(jìn)程模式運(yùn)行蒸辆,就導(dǎo)致docker前臺(tái)沒有運(yùn)行的應(yīng)用征炼,這樣容器后臺(tái)啟動(dòng)后,會(huì)立即自殺躬贡。所以最佳的解決方案是谆奥,將你要運(yùn)行的程序以前臺(tái)進(jìn)程的形式運(yùn)行。
2拂玻、列出當(dāng)前所有正在運(yùn)行的容器
docker ps [OPTIONS]
OPTIONS參數(shù)說明:
-a:列出當(dāng)前所有正在運(yùn)行的容器 + 歷史上運(yùn)行過的容器
-l:顯示最近創(chuàng)建的容器
-n:顯示最近n個(gè)創(chuàng)建的容器
-q:靜默模式酸些,只顯示容器編號(hào)
--no-trunc:不截?cái)噍敵?/p>
3、退出容器
退出容器有兩種方式
(1)容器停止退出
exit
(2)容器不停止退出
ctrl + P + Q
4檐蚜、啟動(dòng)容器
docker start 容器ID或容器名
5魄懂、重啟容器
docker restart 容器ID或容器名
6、停止容器
docker stop 容器ID或容器名
7熬甚、強(qiáng)制停止容器
docker kill 容器ID或容器名
8逢渔、刪除已停止的容器
docker rm 容器ID或容器名
一次性刪除多個(gè)容器(下面兩條命令都可以肋坚,隨便選一條執(zhí)行就行)
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
9、查看容器日志
docker logs -f -t --tail 5 容器ID
其中參數(shù)-t代表加入時(shí)間戳,-f代表跟隨最新的日志打印缀程,--tail代表數(shù)字顯示最后幾條
10妻坝、查看容器內(nèi)運(yùn)行的進(jìn)程
docker top 容器ID
11、查看容器內(nèi)部的細(xì)節(jié)
docker inspect 容器ID
12铣鹏、進(jìn)入正在運(yùn)行的容器并以命令行交互
(1)exec進(jìn)入
docker exec -it 容器ID bashShell
(2)attach進(jìn)入
docker attach 容器ID
(3)上述兩者的區(qū)別
attach:直接進(jìn)入容器啟動(dòng)命令的終端敷扫,不會(huì)啟動(dòng)新的進(jìn)程
exec:是在容器中打開新的終端,并且可以啟動(dòng)新的進(jìn)程
13、從容器內(nèi)拷貝文件到主機(jī)上
docker cp 容器ID:容器內(nèi)路徑 目的主機(jī)路徑
四葵第、容器數(shù)據(jù)卷
1绘迁、概念
docker容器產(chǎn)生的數(shù)據(jù),如果不通過docker commit生成新的鏡像卒密,使得數(shù)據(jù)作為鏡像的一部分保存下來缀台,那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒了哮奇。為了在docker中能保存數(shù)據(jù)膛腐,我們使用卷。
容器數(shù)據(jù)卷可以讓容器中的數(shù)據(jù)持久化鼎俘,容器間繼承并共享數(shù)據(jù)哲身。
卷就是目錄或文件,存在于一個(gè)或多個(gè)容器中贸伐,由docker掛載到容器勘天,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過Union File System提供一些用于持久存儲(chǔ)或共享數(shù)據(jù)的特性棍丐。
卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化误辑,完全獨(dú)立于容器的生存周期,因此docker不會(huì)在容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷歌逢。
2巾钉、數(shù)據(jù)卷的特點(diǎn):
(1)數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
(2)卷中的更改可以直接生效
(3)數(shù)據(jù)卷中的更改不會(huì)包含在鏡像的更新中
(4)數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
3、容器內(nèi)添加數(shù)據(jù)卷
直接命令添加
docker run -it -v /宿主機(jī)絕對路徑目錄:/容器內(nèi)目錄 鏡像名
若想加讀寫權(quán)限限制秘案,可以用下面命令執(zhí)行
docker run -it -v /宿主機(jī)絕對路徑目錄:/容器內(nèi)目錄:ro 鏡像名
其中“ro”代表只讀模式
4砰苍、容器與宿主機(jī)之間數(shù)據(jù)共享
5、容器停止退出后阱高,主機(jī)修改數(shù)據(jù)會(huì)同步到容器中
五赚导、本地鏡像發(fā)布到阿里云
1、本地鏡像發(fā)布到阿里云流程
2赤惊、鏡像生成的方法
從容器創(chuàng)建一個(gè)新的鏡像(docker commit命令)
3吼旧、將本地鏡像推送到阿里云
(1)準(zhǔn)備好本地鏡像
(2)創(chuàng)建阿里云鏡像倉庫
訪問阿里云容器鏡像服務(wù),地址:https://cr.console.aliyun.com/cn-shanghai/instances/repositories
在默認(rèn)實(shí)例中選擇鏡像倉庫未舟,點(diǎn)擊創(chuàng)建鏡像倉庫圈暗,在彈出的窗口中,填寫相關(guān)信息
然后選擇下一步裕膀,選擇本地倉庫员串,最后點(diǎn)擊創(chuàng)建鏡像倉庫
4、將鏡像推送到阿里云registry
sudo docker login --username="阿里云賬號(hào)" registry.cn-hangzhou.aliyuncs.com
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/"命名空間"/"倉庫名稱":[鏡像版本號(hào)]
sudo docker push registry.cn-hangzhou.aliyuncs.com/"命名空間"/"倉庫名稱":[鏡像版本號(hào)]
根據(jù)實(shí)際鏡像信息替換示例中的[ImageId]和[鏡像版本號(hào)]參數(shù)昼扛。
5寸齐、從阿里云Registry中拉取鏡像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/"命名空間"/"倉庫名稱":[鏡像版本號(hào)]
注:以上命令中的"命名空間"和"倉庫名稱"根據(jù)自己的賬號(hào)填寫。