1、帮助启动类命令
1.1、查看docker状态:systemctl status docker
如下图:docker 处于运行状态
1.2、停止dokcer:systemctl stop docker
1.3、启动docker:systemctl start docker
如下图:docker处于运行状态
1.4、重启docker:systemctl restart docker
1. 5、设置开机自启动docker:systemctl enable docker
1. 6、查看docker概要信息:docker info
1.7、查看docker总体帮助文档:docker --help
1.8、查看docker命令帮助文档:docker 某个命令 --help
如下图:查看docker命令【cp】的介绍。
2、镜像命令
2.1、查看本地主机存在的镜像:docker images
【2.1.1】docker images :这个默认命令显示本地所有的镜像,但是不包含【中间映像层】(又名中间层镜像,或历史映像层)
名词解释
中间映像层:在docker build(构建)过程中,为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像。(目前没有找到人能听懂的解释,貌似就是没有标签的镜像)
表头说明:
REPOSITORY :表示镜像的仓库名(或源)
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
【2.1.2】docker images -a:显示所有镜像包含中间映像层 ;网上没有找到【中间映像层】类似案例,这里没有图片案例
【2.1.3】docker images --digests:显示镜像的摘要信息
解释
DIGEST(摘要信息):当你从网络上下载某一个包,如果你想要保证下载的包是完整性并且没有被恶意篡改过,常用的方式就是根据这个包的内容,为这个包生成加密哈希串。如何这个加密哈希串和官网的一样,这就说明下载的这个包没有别篡改过,或者是损坏的包。
【2.1.4】docker images --no-trunc:显示完整的镜像信息;
IMAGE ID(镜像ID):默认情况下是显示简短的镜像IMAGE ID ,【–no-trunc】这个参数可以显示完整大的IMAGE ID
【2.1.5】docker images -q:只显示镜像ID(简短的IMAGE ID)
【2.1.6】docker images 仓库名:根据仓库名查询镜像
也可以加上版本号标签:docker images redis:latest
2.2、在远程镜像库查询是否有指定的镜像:docker search 镜像名
【2.2.1】docker search redis:这里以查看redis为例(默认显示25个版本)
或者直接在docker hub 这个网站直接查找镜像及版本。
docker hub(https://hub.docker.com/)
表头说明
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
OFFICIAL: 是否 docker 官方发布
AUTOMATED: 自动构建。
【2.2.2】docker search --limit 5 redis:只显示5个版本的redis (类似于mysql的分页)
2.3、拉取镜像到本地:docker pull 镜像名
【2.3.1】docker pull redis:拉取redis(默认拉取latest版本,也是就最新版本,官方认证的)
【2.3.2】docker pull redis:6.0.8:拉取reidis的指定版本。
2.4、删除镜像:docker rmi -f 镜像ID(IMAGE ID)
【2.4.1】docker rmi -f 7614ae9453d1:删除latest版本的redis
【2.4.2】docker rmi -f 镜像ID1 镜像ID2:删除多个镜像
【2.4.3】docker rmi -f $(docker images -aq):删除所有镜像。
docker支持命令复用。这个命令的意思是将符合查询条件结果的镜像ID全部删除,工作中禁用
2.5、查看镜像、容器、数据卷所占的空间:docker system df
3、容器命令
3.1、新建容器并启动容器
【3.1.1】:交互式创建容器: docker run 【OPTIONS】 IMAGE 【COMMAND】 【ARG…】
【OPTIONS】参数说明
--name:给新生成的容器取一个名字,如果没有指定名字则有系统默认取一个名字。
-d:后台运行容器并返回容器的ID,也就是守护式容器,也就是后台运行的容器
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
(例如:在docker中生成并运行一个linux容器,并用这个linux容器的终端(伪终端)进行一系列操作);
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
docker run -it ubuntu /bin/bash:创建一个ubuntu版本的linux容器 并进入Linux容器的伪终端,这个伪终端可以执行一起linux命令。
写法2:docker run -it ubuntu bash :效果和上面是一样的。
当然也可以指定镜像的版本号,例如:docker run -it ubuntu:1.1.0 /bin/bash
902f72743e31 :这个是生成容器的编号,是唯一的。相当于数据库的主键id;有这个编号,就如上图所示,表示已经进入了这个容器的终端。这个终端可以执行linux的命令,例如查看当前目录的文件 ls
bin/bash :表示载入容器后运行bash ,docker中必须要保持该容器的一个进程的运行,要不然整个容器启动后就又停止运行了。
也可以在生成的容器的时候给容器指定名字:docker run -it --name=myUbuntu ubuntu /bin/bash
查看处于运行状态的容器必须是宿主机下查看(建议另开一个终端查看)
docker ps:查看处于运行状态的容器(下一节有该命令的详细案例)。
【3.1.2】 守护式创建容器,也就是容器是以后台运行的
命令:docker run -d 镜像名:版本号
注意:有些镜像使用守护式创建容器(如ubuntu)。容器会停止,这个是docker的机制问题,这种情况就只能使用交互式,然后再退到宿主机。
3.2、查看处于运行状态的容器:docker ps 【OPTIONS】
表头说明
CONTAINER ID :容器的id
IMAGE:使用的镜像
COMMAND:启动容器时运行的命令
CREATED:容器的创建时间。
STATUS:容器状态(created:已创建;restarting:重启中;running:运行中;removing:迁移中;paused:暂停;exited:停止;dead:死亡;)。
PORTS:容器的端口信息和使用的连接类型(tcp\udp)
NAMES:系统自动分配或自定义的容器名称。
OPTIONS 参数说明
-a :显示所有的容器,包括未运行的。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
-q :静默模式,只显示容器编号。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
--no-trunc :不截断输出。
-s :显示总的文件大小。
【3.2.1】docker ps -a :显示所有的容器,包括未运行的。
【3.2.2】docker ps -l : 列出最近创建的2个容器。
【3.2.3】docker ps -n 3 : 列出最近创建的3个容器。
【3.2.4】docker ps -q: 静默模式,只显示容器编号(未带其他参数就是显示正在运行的容器id)。
3.3、退出容器
【3.3.1】exit:在创建一个容器时,并且使用进入了这容器的终端。如果这时使用exit这个命令退出,产生的结果是退出这容器成功。但是容器也停止运行了。(仅限这种情况下的第一次退出容器会发生这种情况,再次启动退出就不会停止运行了。)
1、创建一个容器。并进入了这个容器的伪终端
2、使用【docker ps 】查看当前存活的终端:有一个正在运行的容器
3、使用命令【exit】退出容器伪终端。
4、容器也跟着停止运行了。
如果再启动这个容器并进入这容器的伪终端。再使用这exit退出。则容器不会停止运行
1、使用命令【docker ps -a】查看所有容器。
2、使用命令【docker restart 68e42cbbb5c5】启动容器
3、使用命令【docker ps】查看正在运行的容器
4、使用命令【docker exec -it 68e42cbbb5c5 /bin/bash】进入容器伪终端
5、使用命令【exit】退出终端
6、再次使用命令【docker ps】查看正常运行的容器。:结果:容器没有停止运行
如何避免上述情况,就是第一次退出容器。让容器不会停止运行。解决方法:使用组合按键【ctrl+p+q】退出容器。
1、创建一个新容器,并进入了这容器的伪终端
2、查看容器是否正在运行
3、使用组合按键【ctrl+p+q】退出容器伪终端。
4、查看容器是否正在运行:结果:容器没有跟着退出容器终端而停止运行。
知识点:使用组合按键退出容器在任何情况下都不会停止容器。
3.4、启动已经停止的容器:docker start 容器id
案例命令: docker start 78296b930b5a
3.5、重启容器:docker restart 容器id ;也可以用于启动容器。
【3.5.1】docker restart 78296b930b5a
3.6、如何进入正在运行的容器的伪终端:docker exec -it 容器id bash
【3.6.1】命令1:docker exec -it 78296b930b5a bash 或者使用命令:docker exec -it 78296b930b5a /bin/bash
【3.6.2】命令二:docker attach 容器id
总结:
二者区别:attach 直接进入容器启动命令的终端,不会启动新的进程,exec 是在容器中打开新的终端,并且可以启动新的进程
attach 进入的终端,使用命令exit退出会使容器停止,exec 不会。所以使用attach 进入终端必须使用组合按键【ctrl+p+q】退出终端。
3.7、 停止正在运行的容器:docker stop 容器id
示例命令:docker stop 78296b930b5a
命令拓展:
同时停止多个正在运行的容器:docker stop 容器id1 容器id2 容器id3
3.8、杀死正在运行的容器(强制停止):docker kill 容器di
示例命令:docker kill 78296b930b5a
3.9、删除停止的容器:docker rm 容器id
示例命令:docker rm 78296b930b5a
更多命令: docker rm -f 容器id — 这个可以删除正在运行的容器
工作中禁用命令:docker rm -f $(docker ps -a -q) --删除所有容器,包括运行中的。或者:docker ps -a -q | xargs docker rm -f
3.10、查看容器运行日志:docker logs 容器id
示例命令:docker logs 0c2315e3fe72
3.11、查看容器内运行进程: docker top 容器id
示例命令:docker top 0c2315e3fe72
3.12、查看容器内部细节: docker inspect 容器id
示例命令:docker inspect 0c2315e3fe72
3.13、从容器中拷贝文件到宿主机:docker cp 容器id:容器中的文件全路径 宿主机的目标全路径
任务:将容器(642266374c12)中的【/tmp/leo.txt】 文件拷贝到宿主机的【/opt】 目录下。
案例命令:docker cp 642266374c12:/tmp/leo.txt /opt
注意:这个命令必须实在宿主机下面执行。
3.14、从宿主机拷贝文件到容器中:docker cp 要拷贝的文件路径 容器id:要拷贝到容器里面对应的路径
需求:将宿主机上的 【/opt/leo2.txt】文件拷贝到容器(642266374c12)中的【/tmp】目录下。
示例命令:docker cp /opt/leo2.txt 642266374c12:/tmp
注意:这个命令必须实在宿主机下面执行。
3.15、将容器生成一个镜像(方式一:容器的导出和导入)
说明:将容器打包生产一个压缩文件,然后将压缩文件生成一个镜像。然后再通过这个镜像生成容器。
【3.15.1】导出:将容器以一个压缩包文件的形式导出到宿主机
案例:将容器【642266374c12 】以一个压缩包的形式导出到宿主机的/tmp目录下并取名叫【MyUbuntu.tar】
示例命令:docker export 642266374c12 >/tmp/MyUbuntu.tar
【3.15.2】将容器压缩包生成一个镜像并用这个镜像创建一个容器 :
【3.15.2.1】将容器压缩包【MyUbuntu.tar 】生成一个镜像【leo/myubuntu:1.0.1】(这里的镜像名字和版本号自己随便取名)
示例命令:cat /tmp/MyUbuntu.tar | docker import - leo/myubuntu:1.0.1
【3.15.2.2】:使用自定义的镜像生成容器。
生成容器中有当时测试使用的自定义文件(leo.txt;leo2.txt) 这个容器依然是可以正常运行的。
3.16、将容器生成一个镜像(方式二:commit命令)推荐:没那么麻烦。
命令格式:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:版本号
实操:将正在运行的容器打包成一个镜像
命令:
docker commit -m="create images" -a="Leo" cc9ffbd9b9b2 new_ubuntu:1.1
实图操作步骤
其他
容器生成镜像不一定要非要容器是正在运行状态的。没有启动的容器也可以。如下图 redis为例。