智慧屏 安装 app如何提升家庭娱乐与教育体验的关键工具
1156
2022-11-17
3、docker 容器管理
Docker容器相对于OpenStack的云主机实例,虽然他们本质上不同。我们需要基于镜像来创建容器。容器是独立运行的一个或一组应用,以及它们的运行环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统和跑在上面的应用。启动容器启动容器其实就是创建镜像并启动,启动镜像有两种方式,一种是将已经存在,但是是stopped状态的镜像启动,一种就是基于一个镜像新建一个新的容器并启动。新建并启动容器让我们先老生常谈,输出一个Hello World吧。[root@linux-node1 ~]# docker run centos /bin/echo 'Hello world'Hello world很神奇,可以在精通各种语言的Hello World计数器+1了,这个和你在本地系统运行/bin/echo ‘Hello world’ 几乎没有任何区别,但是它是Docker容器输出的,而且输出后,它就完成使命,自动退出了。注意:这里就是我们学习Docker要面临的第一个疑惑,就是容器只会在前台运行一个任务,任务结束,容器就终止了。使用docker ps –a可以查看当前启动的容器:[root@linux-node1 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES789de67bb454 centos "/bin/echo 'Hello wor" 30 seconds ago Exited (0) 29 secondsago pedantic_kare刚接触Docker到这里还会有第二个疑惑:Docker自动帮你生成了一个名字,比如本例中是pedantic_kare。很困惑?好吧,让我们来启动一个我们自定义名称,同时可以有终端的容器,就像启动一个虚拟机一样,不过只是像而已,它们本质上完全不同。[root@linux-node1 ~]# docker run --name mydocker -t -i centos /bin/bash[root@1b0cae722fa0 /]#[root@1b0cae722fa0 /]# ls /anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc rootrun sbin srv sys tmp usr var上面我们使用了两个选项,-t 选项让Docker分配一个伪终端并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。在交互模式下,用户可以通过所创建的终端来输入命令,例如我们可以查看当前运行的进程,只有/bin/bash和你运行的命令,注意看/bin/bash的PID为1,有意思。先记着这个特殊的地方,随着我们深入学习,再回过头来研究它。[root@1b0cae722fa0 /]# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.1 0.1 11776 1872 ? Ss 15:30 0:00 /bin/bashroot 18 0.0 0.0 47424 1660 ? R+ 15:31 0:00 ps aux当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公共仓库-;利用镜像创建并启动一个容器;分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;从地址池配置一个ip地址给容器;执行用户指定的应用程序;执行完毕后容器被终止。让我们输入exit来退出这个容器,退出后,容器会自动终止运行。为什么呢?请参考我们第一个疑惑,Docker容器在前台运行一个单任务,任务结束,容器就终止。这就是Docker容器的特性!同时你有没有注意到一个小细节,默认docker容器的主机名就是CONTAINER ID。让容器容器后台运行在使用docker run运行容器更多时候,我们是需要容器在后台运行的,也就是以守护态形式运行。可以通过-d参数来实现。[root@linux-node1 ~]# docker run -d --name mydocker2 centos /bin/bash38e42accfa2226bb6c7da2e28e12dc95f6b6d6717326442131887a24bb321cdd容器启动后就会在后台运行,然后返回一个容器ID到控制台,而且上面这个容器也终止了,带着问题继续前进。终止容器在前面的输出Hello World的操作中我们看到了,当Docker容器中指定的应用程序运行完毕,容器也就自动终止了。同时我们可以使用exit命令退出运行/bin/bash的终端,同时我们也可以使用Ctrl+d来实现同样的效果。使用docker stop来停止一个容器,默认是先给容器发送SIGTERM信号,然后10秒后发生SIGKILL信号终止容器,可以使用-t或者—time来设置等待的时间,单位是秒docker stop 容器名称、容器ID对于终止的容器,可以使用docker start来启动,或者使用docker restart来重启。[root@bc419cd0b8fa /]# exitExit可以使用docker ps –a来查看容器的状态,发现已经是停止模式。[root@linux-node1 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES38e42accfa22 centos "/bin/bash" 17 seconds ago Exited (0) 16 seconds agomydocker2a5ef57e8783f centos "/bin/bash" 3 minutes ago Exited (0) About a minute agomydockerd132d6e645ad centos "/bin/echo 'Hello wo…" 3 minutes ago Exited (0) 3 minutesago serene_dijkstra启动已终止容器可以使用docker start来开启已经终止的容器,可以通过输入容器的CONTAINER ID,或者NAMES来进行启动。[root@linux-node1 ~]# docker start mydockermydocker好的,我们又一次启动了运行/bin/bash的容器,那么问题来了,我们怎么进去呢。进入容器Docker attachDocker提供了docker attach的命令,用来让我们进入已经启动的容器(如果容器已经终止,你需要使用docker start将它启动。[root@linux-node1 ~]# docker attach mydocker[root@a5ef57e8783f /]#你可以继续执行一些命令,没错,很多命令都没有。注意,在我们使用 attach 进入容器的时候,如果同时有多个窗口 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。这可怎么办,如果我们是团队作战,可能多个同事需要同时进入容器操作呢?还有一个最关键的问题。你输入exit以后呢?之前运行的容器退出了。nsenter进入容器nsenter命令被包含在util-linux软件包里面,使用nsenter可以访问另一个进程的名字空间,大多数Linux发行版默认包含了该软件,CentOS默认是有的。如果你的系统里面没有可以使用以下命令进行安装:Yum安装:[root@docker ~]# yum install -y util-linux为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。# docker inspect --format "{{ .State.Pid }}"
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~