[云原生专题-9]:容器 - Docker的启动与关闭:runstop
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[云原生专题-9]:容器 - Docker的启动与关闭:runstop相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122704085
目录
第2章 docker容器实例的启动 -- 后台daemon运行
3.1 硬附着:docker attach docker-id or docker-name
3.2 软附着:docker exec docker-id or docker-name
前言:
在容器外部,如何通过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/bash
root@975181ce7357:/opt/webapp#
root@975181ce7357:/opt/webapp# pwd
/opt/webapp
root@975181ce7357:/opt/webapp# ls
Procfile 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/bash
root@975181ce7357:/opt/webapp#
root@975181ce7357:/opt/webapp# pwd
/opt/webapp
root@975181ce7357:/opt/webapp# ls
Procfile app.py requirements.txt tests.py
root@975181ce7357:/opt/webapp# cd /
root@975181ce7357:# ls
bin 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/bash
180e5e8fa90fab0f677dd5e2daad76a8a385847523d986c26c10f49690cb7c37
运行后,容器进程在后台以daemon的方式运行,终端的控制权依然是host主机原有的shell。
依然可以在host当前终端中执行其他命令如:
[root@i-vwwup7v8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
180e5e8fa90f 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ce297bf4953 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-test1
root@145545c5d372:/# exit
exit
硬连接后,如果执行 exit,退出终端的同时,也退出后来的容器,回到主机的控制台。
[root@i-vwwup7v8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ce297bf4953 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6cfaaa7b4736 ubuntu "/bin/bash" 29 seconds ago Up 28 seconds ubuntu-test2
4ce297bf4953 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:/# exit
exit
[root@i-vwwup7v8 ~]#
[root@i-vwwup7v8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6cfaaa7b4736 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes ubuntu-test2
4ce297bf4953 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ce297bf4953 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 -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6cfaaa7b4736 ubuntu "/bin/bash" 15 minutes ago Exited (127) 7 minutes ago ubuntu-test2
145545c5d372 ubuntu "/bin/bash" 20 minutes ago Exited (0) 19 minutes ago ubuntu-test1
4ce297bf4953 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
2fb74076ca63 training/webapp "python app.py" 31 minutes ago Created recursing_meninsky
180e5e8fa90f ubuntu "/bin/bash" 40 minutes ago Exited (0) 31 minutes ago ubuntu-daemon
4.3 显示容器的镜像
[root@i-vwwup7v8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v3 9ac0587209a8 2 hours ago 141MB
ubuntu latest d13c942271d6 2 weeks ago 72.8MB
nginx latest 605c77e624dd 3 weeks ago 141MB
redis latest 7614ae9453d1 5 weeks ago 113MB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
training/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章 端口镜像
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122704085
以上是关于[云原生专题-9]:容器 - Docker的启动与关闭:runstop的主要内容,如果未能解决你的问题,请参考以下文章
[云原生专题-8]:容器 - docker远程镜像仓库管理上传下载存储镜像与常见常用知名镜像
[云原生专题-13]:容器 - 通过docker network 构建docker微服务网络:Docker network
[云原生专题-19]:容器 - docker大规模集群部署与运维三剑客 - composemachineswarm总结
[云原生专题-7]:容器 - Ubuntu/CentOS Linux平台上Docker引擎及环境的安装