[云原生专题-9]:容器 - Docker的启动与关闭:run、stop

网友投稿 282 2022-10-22

[云原生专题-9]:容器 - Docker的启动与关闭:run、stop

作者主页(​​文火冰糖的硅基工坊​​​):​​文火冰糖(王文兵)的博客_文火冰糖的硅基工坊​

​目录​

​​前言:​​

​​第1章 docker容器实例的启动 -- 前台运行​​

​​1.1 带命令行终端的前台运行:shell​​

​​1.2 无命令行终端的前台运行:Web应用​​

​​第2章 docker容器实例的启动 -- 后台daemon运行​​

​​2.1 带命令行终端的前台运行:shell​​

​​2.2 无命令行终端的后台运行:Web应用​​

​​第3章 在主机的控制台终端重新附着容器​​

​​3.1 硬附着:docker attach docker-id or docker-name​​

​​3.2 软附着:docker exec docker-id or docker-name​​

​​第4章 显示容器​​

​​4.1 显示所有运行的容器​​

​​4.2 显示所有运行和终止的容器​​

​​4.3 显示容器的镜像​​

​​第5章 重启启动stop后的容器​​

​​第6章 容器的终止​​

​​6.1 停止容器stop​​

​​6.2 删除容器​​

​​6.3 删除容器镜像​​

​​第7章 主机开机自启动容器​​

​​第8章 端口镜像​​

前言:

​在容器外部,​如何通过Docker client的命令,操作由Docker daemon管理运行时的容器。

第1章 docker容器实例的启动 -- 前台运行

1.1 带命令行终端的前台运行:shell

[root@i-vwwup7v8 ~]# docker run -it --name ubuntu-test ubuntu /bin/bash[root@i-vwwup7v8 ~]# docker run -it --name web-app-shell training/webapp /bin/bashroot@975181ce7357:/opt/webapp# root@975181ce7357:/opt/webapp# pwd/opt/webapproot@975181ce7357:/opt/webapp# lsProcfile app.py requirements.txt tests.py

-i:交互式方式运行

-t: 通过命令行终端进行交互

--name:指定docker运行是的标识名。

ubuntu:docker镜像名,这里是镜像本是又是一个简化的linux操作系统,起入口是/bin/bash。

/bin/bash:docker启动的入口参数,这里指定docker实例创建后的首先执行的程序。

备注:

前台运行时,该docker实例将直接霸占docker client的命令行界面,当前的命令行界面由容器接管,如下所示。

​[root@i-vwwup7v8 ~]# ​ ​docker run -it ubuntu /bin/bash​

​root@436fbe569b02:/#​

运行docker后,当前shell被docker镜像ubuntu内部的/bin/bash接管。

​root@436fbe569b02:/# exit   =》退出容器,回到主机终端​

在容器内的中执行exit,退出容器线程,重新回到主机host的环境。

​[root@i-vwwup7v8 ~]# ​

1.2 无命令行终端的前台运行:Web应用

# 无控制台运行[root@i-vwwup7v8 ~]# docker run -P training/webapp python app.py# 有控制台运行[root@i-vwwup7v8 ~]# docker run -it --name web-app-shell training/webapp /bin/bashroot@975181ce7357:/opt/webapp# root@975181ce7357:/opt/webapp# pwd/opt/webapproot@975181ce7357:/opt/webapp# lsProcfile app.py requirements.txt tests.pyroot@975181ce7357:/opt/webapp# cd /root@975181ce7357:# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

-p:将容器内部使用的网络端口(docker内应用程序的代码决定)​随机映射​到我们使用的主机上端口上。这样,就是通过访问主机的端口,来访问容器的端口。

由于是在主机的前台运行该容器实例,而该容器实例又没有前台终端,因此主机的命令行终端会会被阻塞。直到通过CTRL+C终止程序,或程序自身内部退出。

备注:

从上述操作可以看出,容器的本质一个轻量级的虚拟机,自身有rootfs文件系统,有Linux文件系统的结构,有linux shell(如果需要的话),只是没有Linux内核罢了。

即使是web应用程序的容器,其本质也是一个安装了​web应用​的容器而已,自身是有linux rootfs的,也可以有linux shell。只是按照微服务的理念,一个容器只安装一个微服务,如一个web应用(linux shell不算应用,只能算是微服务应用所在容器的控制台终端而已)

第2章 docker容器实例的启动 -- 后台daemon运行

2.1 带命令行终端的前台运行:shell

docker run -itd --name ubuntu-test ubuntu /bin/bash

--d:以主机的后台daemon方式运行容器实例。

[root@i-vwwup7v8 ~]# docker run -itd --name ubuntu-daemon ubuntu /bin/bash180e5e8fa90fab0f677dd5e2daad76a8a385847523d986c26c10f49690cb7c37

运行后,容器进程在后台以daemon的方式运行,终端的控制权依然是host主机原有的shell。

依然可以在host当前终端中执行其他命令如:

[root@i-vwwup7v8 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES180e5e8fa90f ubuntu "/bin/bash" 12 seconds ago Up 10 seconds ubuntu-daemon

​2.2 无命令行终端的后台运行:Web应用​

docker run -d -p 5000:8080 training/webapp python app.py

-d:以主机的后台daemon方式运行容器实例。

-p:容器内部的5000 端口​指定映射​到我们本地主机的8080端口上,这样通过主机的8080端口就可以方案容器的web server。

运行后,容器进程在后台以daemon的方式运行,终端的控制权依然是host主机原有的shell。

依然可以在host当前终端中执行其他命令如:

docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4ce297bf4953 training/webapp "python app.py" 3 seconds ago Up 3 seconds 5000/tcp, 0.0.0.0:5000->8080/tcp, :::5000->8080/tcp eloquent_lichterman

第3章 在主机的控制台终端重新附着容器

在使用 ​-d​ 参数时,容器启动后会进入后台。此时想要在主机的host再进入(连接)容器,可以通过以下指令进入:

3.1 硬附着:​docker attach docker-id or docker-name​

[root@i-vwwup7v8 ~]# docker attach ubuntu-test1root@145545c5d372:/# exitexit

硬连接后,如果执行 exit,退出终端的同时,也退出后来的容器,回到主机的控制台。

[root@i-vwwup7v8 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4ce297bf4953 training/webapp "python app.py" 8 minutes ago Up 8 minutes 5000/tcp, 0.0.0.0:5000->8080/tcp, :::5000->8080/tcp eloquent_lichterman

可以看出, 带命令行终端容器ubuntu-test1也随之退出。

​3.2 软​附着​:docker exec docker-id or docker-name​

推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

docker run -itd --name ubuntu-test2 ubuntu /bin/bash

[root@i-vwwup7v8 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6cfaaa7b4736 ubuntu "/bin/bash" 29 seconds ago Up 28 seconds ubuntu-test24ce297bf4953 training/webapp "python app.py" 14 minutes ago Up 14 minutes 5000/tcp, 0.0.0.0:5000->8080/tcp, :::5000->8080/tcp eloquent_lichterman

docker exec -it ubuntu-test2 /bin/bash

root@6cfaaa7b4736:/#

执行docker exec后,离开主机host的控制台,进入ubuntu-test2控制台。

root@6cfaaa7b4736:/# exitexit[root@i-vwwup7v8 ~]#[root@i-vwwup7v8 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6cfaaa7b4736 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes ubuntu-test24ce297bf4953 training/webapp "python app.py" 18 minutes ago Up 18 minutes 5000/tcp, 0.0.0.0:5000->8080/tcp, :::5000->8080/tcp eloquent_lichterman

在容器的控制中执行exit,并不会导致容器线程被关闭,仅仅是退出容器的控制台终端而已。

备注:

上述方式,达到了一个效果,就是变相通过命令行,从容器外部进入了容器内部的。

第4章 显示容器

4.1 显示所有运行的容器

[root@i-vwwup7v8 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4ce297bf4953 training/webapp "python app.py" 28 minutes ago Up 28 minutes 5000/tcp, 0.0.0.0:5000->8080/tcp, :::5000->8080/tcp eloquent_lichterman

4.2 显示所有运行和终止的容器

[root@i-vwwup7v8 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6cfaaa7b4736 ubuntu "/bin/bash" 15 minutes ago Exited (127) 7 minutes ago ubuntu-test2145545c5d372 ubuntu "/bin/bash" 20 minutes ago Exited (0) 19 minutes ago ubuntu-test14ce297bf4953 training/webapp "python app.py" 28 minutes ago Up 28 minutes 5000/tcp, 0.0.0.0:5000->8080/tcp, :::5000->8080/tcp eloquent_lichterman2fb74076ca63 training/webapp "python app.py" 31 minutes ago Created recursing_meninsky180e5e8fa90f ubuntu "/bin/bash" 40 minutes ago Exited (0) 31 minutes ago ubuntu-daemon

4.3 显示容器的镜像

[root@i-vwwup7v8 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx v3 9ac0587209a8 2 hours ago 141MBubuntu latest d13c942271d6 2 weeks ago 72.8MBnginx latest 605c77e624dd 3 weeks ago 141MBredis latest 7614ae9453d1 5 weeks ago 113MBubuntu 15.10 9b9cb95443b5 5 years ago 137MBtraining/webapp latest 6fae60ef3446 6 years ago 349MB

第5章 重启启动stop后的容器

docker start docker-name or docker-id

第6章 容器的终止

6.1 停止容器stop

docker stop container-name or id

6.2 删除容器

docker rm container-name or id # 删除已经停止的容器docker rm -f container-name or id # 强制删除正在运行的容器

6.3 删除容器镜像

docker rmi container-name or id

第7章 主机开机自启动容器

按照常规的方式启动的容器,在主机自身重启后,容器就丢失。

如果需要主机在重启后自动启动容器,这需要添加--restart选项。

docker run -d --restart=always -p 5000:8080 training/webapp python app.py

第8章 端口镜像

作者主页(​​文火冰糖的硅基工坊​​​):​​文火冰糖(王文兵)的博客_文火冰糖的硅基工坊

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis定义sql语句标签之delete标签解析
下一篇:【Go语言实战】 (12) Docker 部署 Gin+MySQL+Redis 项目
相关文章

 发表评论

暂时没有评论,来抢沙发吧~