0
点赞
收藏
分享

微信扫一扫

[云原生专题-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章 端口镜像​​

前言:

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

在容器外部,​如何通过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内应用程序的代码决定)​随机映射​到我们使用的主机上端口上。这样,就是通过访问主机的端口,来访问容器的端口。

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

 由于是在主机的前台运行该容器实例,而该容器实例又没有前台终端,因此主机的命令行终端会会被阻塞。直到通过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章 端口镜像

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

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

举报

相关推荐

0 条评论