linux怎么查看本机内存大小
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~