目录

1.容器简介

1.1 什么是容器

2.容器与虚拟机

2.1 Docker容器与虚拟机相同点

2.2 Docker容器与虚拟机不同点

3.容器生命周期

3.1 虚拟机的生命周期

3.2 容器的生命周期

4.容器生命周期管理

4.1 容器创建 – docker create

4.2 容器启动 – docker start

4.3 容器创建并启动 – docker run

4.4 容器暂停 – docker pause

4.5 容器取消暂停 – docker unpause

4.6 容器关闭 – docker stop

4.7 容器终止 – docker kill

4.8 容器重启 – docker restart

4.9 容器删除 – docker container rm

5.容器信息查看

5.1 容器详细信息 – docker container inspect

5.2 容器日志信息 – docker logs

5.3 容器重命名 – docker rename

6.容器运行时操作

6.1 容器连接 – docker attach

6.2 容器中执行新命令 – docker exec

7.容器总结


1.容器简介

1.1 什么是容器

容器(Container):容器是一种轻量级可移植并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行

  • Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。
  • 容器具备一定的生命周期。
  • 另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。

2.容器与虚拟机

2.1 Docker容器与虚拟机相同点

  • 容器和虚拟机一样,都会对物理硬件资源进行共享使用。
  • 容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
  • 容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。
  • 同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下

2.2 Docker容器与虚拟机不同点

注意:容器并不是虚拟机,但它们有很多相似的地方

  • 虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
  • 容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。
  • 也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。

docker容器cpu架构_docker容器cpu架构

                          

docker容器cpu架构_生命周期_02

 

3.容器生命周期

3.1 虚拟机的生命周期

docker容器cpu架构_docker容器cpu架构_03

3.2 容器的生命周期

docker容器cpu架构_Docker_04

4.容器生命周期管理

4.1 容器创建 – docker create

  • 作用:

    利用镜像创建出一个Created 状态的待启动容器

  • 命令格式:

    docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

 

    -t, --tty                   分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive        即使没有连接,也要保持STDIN打开
    --name                  为容器起名,如果没有指定将会随机产生一个名称

  • 命令参数(COMMAND\ARG):

    COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等

  • 命令演示:

docker容器cpu架构_Docker_05

4.2 容器启动 – docker start

  • 作用

    将一个或多个处于创建状态或关闭状态的容器启动起来

  • 命令格式:

    docker start [OPTIONS] CONTAINER [CONTAINER...]

  • 命令参数(OPTIONS):

    -a, --attach        将当前shell的 STDOUT/STDERR 连接到容器上
    -i, --interactive        将当前shell的 STDIN连接到容器上  

  • 命令演示: 

docker容器cpu架构_Docker_06

docker容器cpu架构_docker容器cpu架构_07

4.3 容器创建并启动 – docker run

  • 作用:

    利用镜像创建并启动一个容器

  • 命令格式:

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    -t, --tty                   分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive        即使没有连接,也要保持STDIN打开
    --name                  为容器起名,如果没有指定将会随机产生一个名称
    -d, --detach        在后台运行容器并打印出容器ID
    --rm            当容器退出运行后,自动删除容器

  • 命令参数(COMMAND\ARG):

    COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令

    ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等

  • 命令演示:

docker容器cpu架构_docker_08

docker容器cpu架构_Docker_09

docker run 与 docker create + docker start

docker run 相当于 docker create + docker start –a       前台模式
docker run -d 相当于 docker create + docker start       后台模式

4.4 容器暂停 – docker pause

  • 作用:

    暂停一个或多个处于运行状态的容器

  • 命令格式:

    docker pause CONTAINER [CONTAINER...]

  • 命令参数(OPTIONS):

    无    

  • 命令演示:

docker容器cpu架构_Docker_10

4.5 容器取消暂停 – docker unpause

  • 作用:

取消一个或多个处于暂停状态的容器,恢复运行

  • 命令格式:

docker unpause CONTAINER [CONTAINER…]

  • 命令参数(OPTIONS):

  • 命令演示:

docker容器cpu架构_Docker_11

4.6 容器关闭 – docker stop

  • 作用:

关闭一个或多个处于暂停状态或者运行状态的容器

  • 命令格式:

docker stop [OPTIONS] CONTAINER [CONTAINER…]

  • 命令参数(OPTIONS):

-t, --time int 关闭前,等待的时间,单位秒(默认 10s)

  • 命令演示:

docker容器cpu架构_Docker_12

4.7 容器终止 – docker kill

 

  • 作用:

强制并立即关闭一个或多个处于暂停状态或者运行状态的容器

  • 命令格式:

docker kill [OPTIONS] CONTAINER [CONTAINER…]

  • 命令参数(OPTIONS):

-s, --signal string 指定发送给容器的关闭信号 (默认“KILL”信号)

  • 命令演示:

docker容器cpu架构_docker容器cpu架构_13

docker stop和docker kill的区别

前提知识点:
Linux其中两种终止进程的信号是:SIGTERM和SIGKILL
    
SIGKILL信号:无条件终止进程信号。进程接收到该信号会立即终止,不进行清理和暂存工作。该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
SIGTERM信号:程序终结信号,可以由kill命令产生。与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。

docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。在-t指定的等待时间过了之后,将会立即发出SIGKILL信号,直接关闭容器。
docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。

因此会发现在docker stop的等过过程中,如果终止docker stop的执行,容器最终没有被关闭。而docker kill几乎是立刻发生,无法撤销。

此外还有些异常原因也会导致容器被关闭,比如docker daemon重启、容器内部进程运行发生错误等等“异常原因”。

4.8 容器重启 – docker restart

  • 作用:

重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
该命令相当于stop和start命令的结合

  • 命令格式:

docker restart [OPTIONS] CONTAINER [CONTAINER…]

  • 命令参数(OPTIONS):

-t, --time int 重启前,等待的时间,单位秒(默认 10s)
实则是关闭前等待的时间

4.9 容器删除 – docker container rm

 

  • 作用:

删除一个或多个容器

  • 命令格式:

docker container rm [OPTIONS] CONTAINER [CONTAINER…]
或者 docker rm [OPTIONS] CONTAINER [CONTAINER…]

  • 命令参数(OPTIONS):

-f, --force 强行删除容器(会使用 SIGKILL信号)
-v, --volumes 同时删除绑定在容器上的数据卷

  • 命令演示:

docker容器cpu架构_Docker_14

5.容器信息查看

5.1 容器详细信息 – docker container inspect

  • 作用:

查看本地一个或多个容器的详细信息

  • 命令格式:

docker container inspect [OPTIONS] CONTAINER [CONTAINER…]
或者 docker inspect [OPTIONS] CONTAINER [CONTAINER…]

  • 命令参数(OPTIONS):

-f, --format string 利用特定Go语言的format格式输出结果

-s, --size 显示总大小

命令演示:

docker容器cpu架构_docker容器cpu架构_15

5.2 容器日志信息 – docker logs

  • 作用:

查看容器的日志信息

  • 命令格式:

docker logs [OPTIONS] CONTAINER

  • 命令参数(OPTIONS):

–details 显示日志的额外信息
-f, --follow 动态跟踪显示日志信息
–since string 只显示某事时间节点之后的
–tail string 显示倒数的行数(默认全部)
-t, --timestamps 显示timestamps时间
–until string 只显示某事时间节点之前的

注意:容器日志中记录的是容器主进程的输出STDOUT\STDERR

5.3 容器重命名 – docker rename

  • 作用:
    修改容器的名称
  • 命令格式:
    docker rename CONTAINER NEW_NAME
  • 命令参数(OPTIONS):

6.容器运行时操作

6.1 容器连接 – docker attach

 

  • 作用:

将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接

  • 命令格式:

docker attach [OPTIONS] CONTAINER

  • 命令参数(OPTIONS):

–no-stdin 不绑定STDIN

6.2 容器中执行新命令 – docker exec

  • 作用:

在容器中运行一个命令

  • 命令格式:

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

  • 命令参数(OPTIONS):

-d, --detach 后台运行命令
-i, --interactive 即使没连接容器,也将当前的STDIN绑定上
-t, --tty 分配一个虚拟终端
-w, --workdir string 指定在容器中的工作目录
-e, --env list 设置容器中运行时的环境变量

7.容器总结

docker容器cpu架构_docker容器cpu架构_16