文章目录
- 1. 帮助启动类命令
- 2. 镜像命令
- 3. 容器命令
- 4. 总结
1. 帮助启动类命令
启动docker:
systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看docker 的运行状态:
systemctl status docker
开机启动:
systemctl enable docker
查看docker该要信息:
docker info
查看docker 帮助文档
docker --help
查看docker命令帮助文档:
docker 具体命令 --help
2. 镜像命令
- docker images [options]:列出本地主机上的所有镜像
Repository:表示镜像的仓库源
Tag:镜像的标签
Image Id:镜像ID
Created:镜像创建的时间
Size:镜像的大小
同一个仓库源可以有多个Tag版本,代表这个仓库源的不同个版本,我们使用Repository:Tag来定义不同的镜像。
它的options选项说明如下:
-a:列出本地所有的镜像
-q:只显示镜像的ID
- docker search [options]:远程库中查找某个镜像的名称
Name:镜像名称
Description:镜像说明
Stars:点赞数
Official:是否是官方的
Automated:是否是自动构建的
它的options选项说明如下:
--limit:只列出N个镜像,默认是15个
docker search --limit 5 redis
- docker pull 某个xxx镜像名字:将远程库的某个镜像拉取到本地库中
该命令有两个写法:
docker pull 镜像名称[:TAG] 指定具体版本
docker pull 镜像名称 默认下载最新的
- docker system df:查看镜像/容器/数据卷所占用的空间
- docker rmi 某个xxx镜像的名字ID
删除单个:
docker rmi -f 镜像ID #-f表示强制删除
删除多个:
docker rmi -f 镜像名1:Tag 镜像名2:Tag
删除全部
docker rmi -f $(docker images -qa)
面试题:谈谈docker虚悬镜像是什么?
答:首先虚悬镜像是仓库名和标签都是<none>的镜像,俗称为虚悬镜像(dangling image)
3. 容器命令
首先要知道,有镜像才能创建容器,所以在创建容器之前本地库需要有对应的镜像。
- 首先准备ubuntu镜像
docker pull ubuntu
- 新建并启动容器
docker run [options] image [command][arg...]
options选项说明:
–name:容器的新名字
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
-i:以交互模式运行容器,通常和-t同时使用
-t:为容器重新分配一个伪输入终端,通常和-i一起使用(-t -i也即启动交互式容器—前台有终端,等待交互)
-P:随机端口映射
-p:指定端口映射
启动交互式容器:
上面就使用ubuntu以交互模式启动类一个容器,在容器内执行/bin/bash命令
- 列出正在运行的所有容器
docker ps [options]
options选项说明:
-a:列出当前所有正在运行的容器+历史运行过的
-i:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
- 退出容器
容器有两种退出方式:
exit:run进入容器,exit退出,容器停止(容器内部操作)
ctrl+p+q:run进入容器,ctrl+p+q退出,但是容器不停止(容器内部操作)
- 启动已经停止运行的容器
docker start 容器ID或者容器名
- 重启容器
docker restart 容器ID或者容器名
- 停止容器
docker stop 容器ID或者容器名
- 强制停止容器
docker kill 容器ID或者容器名
- 删除已经停止的容器
docker rm 容器ID
其它重要知识点
有镜像才能创建容器,这里下载一个redis镜像进行演示
启动守护式容器
在大部分场景下,我们希望docker的服务是在后台运行的,我们可以通过-d指定容器的后台运行模式
docker run -d 容器名
注意:我们使用docker run -d ubuntu(对于ubuntu)后,然后使用docker ps -a进行查看,可以发现容器已经退出,这里涉及很重要的一点说明,
Docker容器后台运行,就必须有一个前台进程
,容器运行的命令如果不是那些一直挂起的命令,就是会自动退出的。这是docker的机制问题,比如你的web容器,以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可,例如service nginx start,但是,这样做nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀,因为他觉得自己没事做。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常用的就是命令行模式,表示我还有交互操作。
而redis这类服务就适合后台运行。
docker run --name testredis -d redis:6.2.14
查看容器的日志
docker logs 容器id
docker logs 4f6d5fb949e88925f72c21f545625645383426854a430a0940e803f53d87d3ce
查看容器内运行的进程
docker top 容器ID
docker top 4f6d5fb949e88925f72c21f545625645383426854a430a0940e803f53d87d3ce
查看容器内部细节
docker inspect 容器ID
docker inspect 4f6d5fb949e88925f72c21f545625645383426854a430a0940e803f53d87d3ce
进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell
docker attach 容器ID
上诉两个命令的区别是,attach是进入容器启动命令的终端,不会启动新的进程,用exit退出会导致容器停止。exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。
从容器内部拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
导入和导出容器(容器的备份和恢复)
export :导入容器的内容留作为一个tar归档文件[对应import命令]
import:从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
docker export 容器ID>文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号