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	
image-20220119160215497 image-20220119160243853

0x01 镜像命令

01、docker images:列出本地所有镜像

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签,版本号

IMAGE ID:镜像ID

CREATED:镜像创建时间

VIRTUAL SIZE:镜像大小

image-20220119193931642

同一个仓库源可以有多个TAG版本,代表这个仓库员的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:lastest镜像

docker images -a	列出本地所有镜像(含有历史映像层)
docker images -q	只显示镜像ID

02、docker search:搜寻某个镜像是否在远程仓库

image-20220119193841911

里面有各个不同的组织,一般选第一个就行,点赞数最多,官方的。

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的显示方式查看所占用的空间

image-20220119195749761

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....)

image-20220119200243534

06、docker 虚悬镜像是什么?(面试题)

docker构建的时候,可能会出现问题,即仓库名和标签都是<none>的image,出现了就建议删除。

image-20220119201057883

07、思考

结合Git学习心得,猜想是否有docker commit/docker push???

0x02 容器命令

再次复习docker的理论知识:

docker 并非是一个通用的容器工具,它依赖于已经存在并运行的Linux内核环境。实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此,Docker必须部署在Linux内核系统上,如果其他系统想部署Docker就必须安装一个虚拟Linux环境。

左边的图

因为docker必须建立在Linux内核上,所以我们win10系统会创建一个虚拟机,从而搭建一个centos7。在此基础上我们搭建的docker,在搭建一个超级小的Centos

image-20220119201659233

右边的图

为了防止混淆懵逼,可以看右边的图。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,但是这样的结果就是下图,没有任何的其他操作了

image-20220119205909967

如果我们想要对这个ubuntu进行操作,需要一个前台终端,如下

docker run -it ubuntu /bin/bash

image-20220119210150463

相当于跑到集装箱里面干活了,里面没有任何的命令,很正常,它毕竟只是启动了启动ubuntu所需最小的组件,需要别的到时候再装

image-20220120094240716

-P:随机端口映射,大写P,一般不用这个命令

-p:指定端口映射,小写p,一般都是用这个命令

如这张图,大方框是鲸鱼,背上驮着tomcatredis,那么我们怎么才能访问到里面的各种服务呢?需要做端口映射。左边的6379是centos宿主机的端口,右边即里面各种集装箱服务的端口。

docker run redis -p 6379:6379 

image-20220119204650881

docker run -it --name=u4 ubuntu /bin/bash
docker run -it --name=u5 ubuntu /bash
//这两个命令效果一样,但是书写命令时,保证选项在前,镜像名靠后,交互式终端最后

image-20220119211117886

选项说明:PORTS这里是空的,因为ubuntu不需要端口映射

02、docker ps列出所有正在运行的容器

image-20220119210551371

docker ps 		//罗列正在运行的containers
docker ps -a	//罗列历史所有containers,包括删除的,退出停止的
docker ps -l    //罗列最近创建的容器
docker ps -n    //显示最近N个创建的容器
docker ps -q    //静默模式,只显示容器编号

image-20220119212011512

03、退出容器

exit退出并且停止容器运行

ctrl+p+q退出但是不停止容器运行

image-20220119220041722

04、启动、停止运行容器

docker start ID		重启容器
docker stop ID		停止容器
docker kill ID		强制停止容器

启动和停止容器都可以批量操作。

image-20220120101241747

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然后执行删除命令,保证删除干净

image-20220120101405044

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 

image-20220120205431597

02、容器日志查看

假设我开的集装箱太多了,我要查看容器怎么办?

Devops工程师职责:编码开发微服务、上线部署容器化、时时刻刻要监控。

docker logs 容器ID

到时候我们学可视化工具,这个命令就不怎么用到了,不过也要会敲!

image-20220120214033644

03、查看容器内运行的进程

docker top 容器ID

image-20220120213053228

04、查看容器内部细节

再次复习理论:可以把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

docker inspect 容器ID

05、进入正在运行的容器并以命令行交互

docker exec -it 容器ID /bin/bash		
docker exec -d 容器ID	//不常用
docker attach 容器ID	//不需要输入bin bash

docker execdocker attach的区别:

docker exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。

image-20220120215135797

docker attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。

image-20220120215341662

下面用redis进行演示的时候我要特殊记一下,因为这个命令更能体现出docker的特点,自己体会吧!

image-20220120215757897

06、从容器中拷贝文件到主机

将docker启动的一个ubuntu主机里面的文件拷贝出来,支持递归复制!

docker cp 容器ID:容器文件绝对路径 主机绝对路径
docker cp 

image-20220120221017363

07、导入导出容器

这个就更好理解了,上面的将文件拷贝出来,就是一个简单的文件备份,如果我想要把整个容器全部导出来,全部备份,也是可以的。

同时导出和导入容器可以用来制作属于自己的容器内容。

导出容器:

docker export 容器ID > 名字(自定义).tar			//导出容器的内容流作为一个tar归档文件,可以理解成导出一个全新的镜像。导出的路径默认为终端的
cat 文件名.tar | docker import - 镜像用户(自定义)/镜像名(自定义):镜像版本号(自定义)       //注意中间有个-,这个-呢,左右两边空格不能省略!!

image-20220120222702132

image-20220120222746894

0x03 小总结

有些不常用的例如暂停啥的,暂不深入。有兴趣可以深入。

image-20220120222756032

posted @ 2022-01-20 22:33  sukusec不觉水流  阅读(12)  评论(0编辑  收藏  举报