Docker学习04-常用命令
0x00 帮助启动类
启动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 //和Linux一样,有问题,问男人 man mkdir之类的
查看docker命令帮助文档:docker 具体命令 --help
如:docker command --help


0x01 镜像命令
01、docker images:列出本地所有镜像
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签,版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
VIRTUAL SIZE:镜像大小
同一个仓库源可以有多个TAG版本,代表这个仓库员的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:lastest镜像
docker images -a 列出本地所有镜像(含有历史映像层)
docker images -q 只显示镜像ID
02、docker search:搜寻某个镜像是否在远程仓库
里面有各个不同的组织,一般选第一个就行,点赞数最多,官方的。
docker search redis
docker search --limit redis //只列出N个镜像,默认是前25个
docker search --limit 5 redis //这条命令就足够了,limit和redis的顺序无所谓
03、docker pull:下载镜像
同git pull
docker pull mysql <===> docker pull mysql:lastest //下载最新版mysql
docker pull mysql:5.6 //下载mysql5.6版本
注意,docker pull
不能同时拉取,一个一个来,并且无法拉取多个镜像,以后可以写个yml
文件,使用docker-compose
来拉取多个。
04、docker system df:查看镜像/容器/数据卷所占的空间
其实是类似于Linux的df -h
,以human
的显示方式查看所占用的空间
05、docker rmi: remove image删除镜像
docker rmi IMAGE ID/REPOSITORY //可以是ID,也可以是名字,建议ID
docker rmi -f ID //强制删除,有时候会报错,因为container在使用这个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG //删除多个镜像
docker rmi -f $(docker images -aq) //删除全部镜像,这条命令到公司的生产环境千万不能敲!删库到坐牢!危险!!!!!!
//命令解释:后面的docker images -aq 表示展示出所有的镜像ID,通过$传递给前面的删除命令,类似于mysql的 delete from users where id in(1,2,3,4,5....)
06、docker 虚悬镜像是什么?(面试题)
docker构建的时候,可能会出现问题,即仓库名和标签都是
的image,出现了就建议删除。
07、思考
结合Git
学习心得,猜想是否有docker commit/docker push
???
0x02 容器命令
再次复习docker的理论知识:
docker 并非是一个通用的容器工具,它依赖于已经存在并运行的Linux内核环境。实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此,Docker必须部署在Linux内核系统上,如果其他系统想部署Docker就必须安装一个虚拟Linux环境。
左边的图
因为docker必须建立在Linux内核上,所以我们win10系统会创建一个虚拟机,从而搭建一个centos7。在此基础上我们搭建的docker,在搭建一个超级小的Centos
右边的图
为了防止混淆懵逼,可以看右边的图。Centos7可以被当成阿里云,上面建立了一个Docker,然后再安装精简版的ubuntu
平时搭建环境的时候,都是新建各种虚拟机,一次就得小半天。
当学会了docker后,可以在docker的基础上,新建一些别的虚拟机。
01、docker run
在java和php中,使用new来实例化一个对象,在docker中,使用run
启动交互式容器
重点参数
--name
指定名称
-d
后台运行容器并返回容器ID,即启动守护试容器(后台运行)
-i
以交互模式运行容器,通常与-t
同时使用,interactive
-t
即Linux的tty
,为容器重新分配一个伪输入终端,通常与-i
同时使用,即启动交互式容器(前台有伪终端,等待交互,说白了就是等待用户输入命令)
说白了,我们可以直接使用docker run ubuntu
,但是这样的结果就是下图,没有任何的其他操作了
如果我们想要对这个ubuntu进行操作,需要一个前台终端,如下
docker run -it ubuntu /bin/bash
相当于跑到集装箱里面干活了,里面没有任何的命令,很正常,它毕竟只是启动了启动ubuntu所需最小的组件,需要别的到时候再装
-P
:随机端口映射,大写P,一般不用这个命令
-p
:指定端口映射,小写p,一般都是用这个命令
如这张图,大方框是鲸鱼,背上驮着tomcat
与redis
,那么我们怎么才能访问到里面的各种服务呢?需要做端口映射。左边的6379是centos宿主机的端口,右边即里面各种集装箱服务的端口。
docker run redis -p 6379:6379
docker run -it --name=u4 ubuntu /bin/bash
docker run -it --name=u5 ubuntu /bash
//这两个命令效果一样,但是书写命令时,保证选项在前,镜像名靠后,交互式终端最后
选项说明:PORTS这里是空的,因为ubuntu不需要端口映射
02、docker ps列出所有正在运行的容器
docker ps //罗列正在运行的containers
docker ps -a //罗列历史所有containers,包括删除的,退出停止的
docker ps -l //罗列最近创建的容器
docker ps -n //显示最近N个创建的容器
docker ps -q //静默模式,只显示容器编号
03、退出容器
exit
退出并且停止容器运行
ctrl+p+q
退出但是不停止容器运行
04、启动、停止运行容器
docker start ID 重启容器
docker stop ID 停止容器
docker kill ID 强制停止容器
启动和停止容器都可以批量操作。
05、删除已经停止容器
docker rmi
中的i
表示images
,去掉i
就表示删除容器了
docker rm ID 删除已经停止的容器,无法删除正在运行的
docker stop ID
docker rm -f ID 强制删除正在运行的
06、一次删除多个容器实例(危险命令)
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm //将上一个结果参数,集成在xargs然后执行删除命令,保证删除干净
0x03 重要命令——启动守护式容器
01、守护式进程启动容器
在大部分的场景下,我们希望docker的服务是在后台运行的,我们可以通过-d
指定容器的后台运行模式。
docker run -d 镜像名
这里演示一下,可以看到并没有容器启动。所以要养成一个习惯,每次run起来一个容器,一定要使用ps
来查看。那么这里为什么没有运行呢?
Docker容器后台运行,就必须要有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top、tail),就是会自动退出的。平时我们运行apache或者nignx在后台,他会一直开着等待我们运行他们。但是docker不一样,docker认为我在后台开着,前台没有人用我,没人需要我,我就自杀了。当一个人没有被需要的价值,就会自闭。但是注意,是有些镜像!!不是所有镜像都是如此!!下方的ubuntu和redis就是个对比例子!
docker run -d ubuntu
docker ps
docker run -d redis:6.0.8
docker ps
02、容器日志查看
假设我开的集装箱太多了,我要查看容器怎么办?
Devops
工程师职责:编码开发微服务、上线部署容器化、时时刻刻要监控。
docker logs 容器ID
到时候我们学可视化工具,这个命令就不怎么用到了,不过也要会敲!
03、查看容器内运行的进程
docker top 容器ID
04、查看容器内部细节
再次复习理论:可以把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
docker inspect 容器ID
05、进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
docker exec -d 容器ID //不常用
docker attach 容器ID //不需要输入bin bash
docker exec
和docker attach
的区别:
docker exec
是在容器中打开新的终端,并且可以启动新的进程,用exit
退出,不会导致容器的停止。
docker attach
直接进入容器启动命令的终端,不会启动新的进程,用exit
退出,会导致容器的停止。
下面用redis进行演示的时候我要特殊记一下,因为这个命令更能体现出docker
的特点,自己体会吧!
06、从容器中拷贝文件到主机
将docker启动的一个ubuntu主机里面的文件拷贝出来,支持递归复制!
docker cp 容器ID:容器文件绝对路径 主机绝对路径
docker cp
07、导入导出容器
这个就更好理解了,上面的将文件拷贝出来,就是一个简单的文件备份,如果我想要把整个容器全部导出来,全部备份,也是可以的。
同时导出和导入容器可以用来制作属于自己的容器内容。
导出容器:
docker export 容器ID > 名字(自定义).tar //导出容器的内容流作为一个tar归档文件,可以理解成导出一个全新的镜像。导出的路径默认为终端的
cat 文件名.tar | docker import - 镜像用户(自定义)/镜像名(自定义):镜像版本号(自定义) //注意中间有个-,这个-呢,左右两边空格不能省略!!
0x03 小总结
有些不常用的例如暂停啥的,暂不深入。有兴趣可以深入。