【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作

❤️ 专栏简介 :本专栏我们会从最基础的内容开始学习Docker的相关内容,循序渐进的掌握Docker知识并进行实战。

☀️ 专栏适用人群 :适用于具备基础 Linux 知识的 Docker 初学者,当然希望各位有经验的docker开发者不吝赐教。

专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。

专栏地址:https://blog.csdn.net/anchenliang_1002/category_11878561.html

在这里插入图片描述

在这一节中我们会学习Docker容器的相关管理操作,包括运行出容器容器的参数停止容器查看容器日志进入正在运行的容器容器端口映射提交容器等操作

文章目录

  • 基础:
  • 1 运行一个挂掉的容器(从错误示范来开始学docker容器)
  • 2 运行容器且进入容器内,且在容器内执行某个命令
  • 3 开启一个容器,让其运行某个程序(前台运行)
  • 4 后台运行一个容器(-d)
  • 5 容器的其他参数(-d、--name、--rm)
  • 6 停止容器(docker stop)
  • 7 查看容器日志(docker logs)
  • 8 进入正在运行的容器空间内(docker exec)
  • 9 查看容器的详细信息(inspect)
  • 10 容器的端口映射(-p 或-P)
  • 11 查看端口映射关系(docker port)
  • 12 容器的提交(docker commit)

基础:

docker run :容器的创建+启动
docker run 镜像名,如果镜像不存在本地,则会在线去下载该镜像

另外关于容器,需要注意两点:
1、容器内的进程必须处于前台运行状态,否则容器就会直接退出

如果我们自己部署一个容器,运行相关命令,则命令不得后台运行,前台运行即可。

2、如果容器内,什么事也没做,容器也会挂掉

即容器内必须有一个进程在前台运行。

1 运行一个挂掉的容器(从错误示范来开始学docker容器)

首先docker images查看一下现在设备中的容器:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第1张图片

我们以centos 7.8.2003来演示,首先我们直接运行以下指令来启动容器

docker run afb6fca791e0

回车,你会发现终端里什么都没有,我们多运行几次:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第2张图片

这里我们运行了三次,可以看到在终端上,运行完该指令,终端上啥都没有;我们docker ps看一下,会发现也是没有容器在运行:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第3张图片
这是因为我们刚刚执行的centos容器,都挂掉了,虽然我们在终端里什么都没看到,但并不是代表容器没有被运行,而只是运行了但是挂掉了;为什么会挂掉呢?就是因为我们虽然运行了容器,但是在容器里并没有任何操作,所以容器挂掉了;记住,我们执行一次docker run,就会生成一条容器记录,那容器记录在哪里看呢?指令是 docker ps -a ,如下图:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第4张图片
我们可以看到,频繁生成了3条容器的执行记录,且每条记录中的容器id是不同的,说明每次都是独立的容器。

所以,docker run centos:1.8.2003这种写法会产生多条独立的容器记录,且容器内没有程序在跑,因此容器挂了。

2 运行容器且进入容器内,且在容器内执行某个命令

这次我们运行centos容器,并且进入容器内,并在容器内执行某个命令,指令如下:

docker run -it centos:7.8.2003 bash

这条执行的意思是进入centos:7.8.2003并执行bash指令。进入后我们可以执行各种指令了,比如查看系统的版本等;然后exit可以退出,如下图:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第5张图片

3 开启一个容器,让其运行某个程序(前台运行)

又或者,我们运行centos容器,并使其在里面运行ping baidu.com指令:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第6张图片
可以看到,直接在容器里面运行ping baidu.com指令了。

这属于前台运行,会卡主一个终端,此时我们的终端就在运行ping baidu.com,并且只能运行这个,不能干别的,如果想要干别的就得ctrl+c停掉该指令,这就是前台运行。

如果ctrl+c停止后,该容器也就挂掉了,因为ping baidu.com被终止,则容器内没有指令运行了,容器当然也就挂了。
当然该指令不加-it也是可以的,因为我们并不需要交互,只需要让其运行指令,如下:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第7张图片
这就是开启了centos容器,并运行了ping命令。

4 后台运行一个容器(-d)

-d 参数:让容器在后台(宿主机的后台)运行

相对于1.3容器运行在宿主机前台的情况,这个-d参数是使容器运行在宿主机的后台;当然了,容器里的进程还是跑在容器的前台的。

例如,还是1.3中的例子,运行centos镜像并跑一个ping baidu.com的程序,但是此次我们加一个-d的参数,

docker run -d centos:7.8.2003 ping baidu.com

在这里插入图片描述
可以看到,该指令返回了一个容器id给我们,此时我们docker ps看一下

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第8张图片
可以看到有个id为7d958ffd82d8的容器在运行;它基于的镜像是centos:7.8.2003;COMMAND表示这个容器里正在运行ping baidu.com这个指令;创建时间是一分钟之前;状态是运行了一分钟了;PORTS代表该容器有没有端口映射;NAMES是容器的名字。

5 容器的其他参数(-d、–name、–rm)

-d参数: 在宿主机后台运行容器
--rm参数:删除容器运行记录
--name:给容器起个名字

前面写了每次docker ps -a可以查看容器运行的记录,但是有时候我们需要在容器中调试某些命令等,不想每次都生成容器记录,就可以使用--rm参数,例如

docker run -d  --rm  --name test_acl centos:7.8.2003 ping baidu.com

这条指令意思是在宿主机的后台运行centos镜像,并在容器内执行ping baidu.com指令,当该指令停止后,容器也就会挂掉;--rm就是当容器挂掉是,自动删除该容器运行记录;--name参数表示给容器起了个名字叫test_acl。我们看一下运行结果:

在这里插入图片描述

可以看到我们新运行的容器,名字为test_acl;此时我们docker stop停止刚刚生成的test_acl容器,然后再docker ps -a看一下有没有该容器的记录:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第9张图片

可以看到,容器运行记录里并没有test_acl的记录,因为我们加了--rm参数,所以容器停止后就自动删除了该容器的运行记录。

6 停止容器(docker stop)

docker stop +容器id

停止该容器的运行。

7 查看容器日志(docker logs)

查看某容器的运行日志:

docker logs +容器id

这条指令会将到目前为止所有的日志打印出来。
【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第10张图片

当然我们也可以实时查看容器的日志:

docker logs -f +容器id

此时我们就可以看到终端在实时的刷新容器的日志,就跟tailf的功能是一样的。

当然也可以利用管道符只查看最后五行日志:

docker logs -f +容器id | tail -5

8 进入正在运行的容器空间内(docker exec)

docker exec -it +容器id bash 

此指令可以交互式的进入正在运行的容器内,并执行bash指令,这样我们就可以使用终端命令行了。
演示过程如下:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第11张图片

可以看到执行完exec指令后,进入到了centos容器内部,用ps -ef 查看了一下当前容器内正在运行的进程,可以发现有bashps -ef以及ping在执行。然后exit可以退出。

9 查看容器的详细信息(inspect)

docker container inspect +容器id

可以查看该容器的详细信息,如下图所示

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第12张图片
可以看到返回的是一个json结构的数据,该数据详细的记录了容器的作用、运行状态、存储信息、网络等。

10 容器的端口映射(-p 或-P)

关于端口映射的原理这里不再详细的讲解,如果还有不清楚的可以返回第三节里的第1.2节内容去看:

【Docker-k8s学习和实战】(三)Docker初试:启动第一个docker容器;docker容器的运行、停止、重启以及镜像的删除

还是以nginx为例;

docker run  -d --name nginx_acl1 nginx -p 85:80

该指令的意思是后台运行nginx,并把容器命名为nginx_acl1,且端口映射,把宿主机的85端口访问到容器内的80端口:如下图所示

在这里插入图片描述

此时,访问宿主机的85端口,就可以访问到容器内的nginx了;

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第13张图片

-P参数:随机端口映射

11 查看端口映射关系(docker port)

docker port +容器id

查看该容器内的端口映射关系。

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第14张图片
可以看到,nginx容器内,80端口映射到了宿主机的85端口。

12 容器的提交(docker commit)

提交容器的指令:

docker commit 容器id 新的镜像名

这里我们还是以centos安装vim来演示容器的提交。具体过程是:

先运行基础版的centos:7.8.2003镜像生成容器,在centos容器中安装vim,然后提交该容器生成新的镜像;紧接着验证一下容器是不是提交成功?即下载新的镜像,并运行出新的容器,正常来讲这个新镜像运行出的容器里就已经有vim了。

首先运行centos:7.8.2003基础镜像生成容器,并安装vim:

docker run -it centos:7.8.2003 bash
yum install vim

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第15张图片

然后将刚刚安装了vim的centos容器提交生成新的镜像,新镜像命名为chengliang/centos-vim-7.8.2003

exit
docker ps -a
docker commit 0d0e7dc3c3f7 chengliang/centos-vim-7.8.2003

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第16张图片

可以发现提交成功了;此时docker images可以看到本地已经有我们新提交的镜像了:

【Docker-k8s学习和实战】(七)详解docker容器管理---容器的相关操作_第17张图片
此时我们再去使用这个新的chengliang/centos-vim-7.8.2003镜像生成容器,再进入容器即可发现里面已经有vim了:

在这里插入图片描述

你可能感兴趣的:(Docker-k8s学习和实战,docker,学习,容器)