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

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[云原生专题-9]:容器 - Docker的启动与关闭:runstop相关的知识,希望对你有一定的参考价值。

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

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122704085


目录

前言:

第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/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引擎及环境的安装

[云原生专题-17]:容器 - docker自带的集群管理工具swarm - 简介原理架构

[云原生专题-15]:容器 - docker主机管理工具-docker machine