这篇再来介绍或者复习几个docker容器的命令,也就是做一些容器常见的操作练习。

docker exec

这个命令docker exec是对运行状态的容器进行执行一个命令,exec就是execute的简写,单词就是执行的意思。例如我们基本上容器都是说linux环境下的容器,在linux下我们经常做的事情就是要执行各种shell命令,所以这个命令用到最多的场景是执行一个容器下的bash程序,然后输入一个命令进行管理和debug等。

1) 首先我这里启动一个centos的容器,后台运行,确保这个容器一直在运行状态。

nerdctl工具 进入容器内部的命令 exec进入容器_python

复习:通过docker run –it image名称,我们就可以交互启动一个容器(如果要后台运行需要添加参数-d),而且直接就以root用户登录了这个容器,可以执行一些命令,例如我上面输入的pwd 这个shell命令。有时候这种在debug是很不方便的,例如我想直接去运行这个容器的某一个程序,加入上面我截图这个ssh 会话不小心关闭了,如果我们再次运行这个命令,会产生第二个容器,这个并不是我们希望的。

2) 接下来,介绍一个容器操作很重要的命令,那就是docker exec –it container名称  某程序

nerdctl工具 进入容器内部的命令 exec进入容器_后台运行_02

上面我是直接操作这个容器,运行里面的bash程序。这种操作是操作容器,并没有产生第二个容器。(这里需要注意下,你前面在使用docker run 这个命令后,不能让容器变成退出状态,不然你的docker exec –it 会话也会自动退出)

3)下面来举例使用docker exec来运行容器里面的python程序

nerdctl工具 进入容器内部的命令 exec进入容器_docker_03

这个时候你在上面python解释器中输入exit(). 会退出但是不会把这个容器的状态改成退出。有时候,我们还可以通过docker exec命令来查询IP地址,前提是这个容器已经安装了ip这个程序并添加到了系统环境变量。

nerdctl工具 进入容器内部的命令 exec进入容器_nerdctl工具 进入容器内部的命令_04

停止容器再删除

关于删除容器,我在docker命令学习文章介绍过。这里举例一个很常见的场景,有时候我们直接通过docker rm 容器名称会报无法删除,需要先停止容器然后再删除。

建议用docker ps –a 来代替docker container ls –a命令

nerdctl工具 进入容器内部的命令 exec进入容器_后台运行_05

nerdctl工具 进入容器内部的命令 exec进入容器_docker_06

nerdctl工具 进入容器内部的命令 exec进入容器_docker_07

上面两个容器都显示退出状态,那么就可以直接rm命令删除容器。有时候我们退出状态的容器有很多,而且我们想一次命令删除那些退出状态的,怎么实现呢。

 

运行容器并且给容器取名

我们前面讲docker run都是自动生成容器名称,而且操作容器都是根据容器ID,其实操作容器也可以根据容器的名称。

nerdctl工具 进入容器内部的命令 exec进入容器_python_08

图中参数—name=自定义容器名称,而且演示了可以根据容器自定义名称来删除容器。这个参数用处好多,例如一个docker服务器上,多个人使用,我们就可以通过—name来区分那些容器是谁在使用,避免误操作,特别是删除了别人的容器。