docker容器

一、简介

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

2、Docker将镜像文件运行起来后,产生的对象就是容器,容器相当于是镜像运行起来的一个实例

3、容器具备一定的生命周期

4、以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样

二、容器与虚拟机

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

2、容器和虚拟机一样,都会对物理硬件资源进行共享使用

3、容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)

4、容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等,也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样

5、同虚拟机一样,容器创建后,会存储在宿主机上,linux上位于/var/lib/docker/containers下

6、虚拟机的创建、启动和关闭都是基于一个完整的操作系统,一个虚拟机就是一个完整的操作系统,而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合

7、容器是轻量级的,虚拟机是重量级的,首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗,其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了

8、也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上

9、虚拟机的生命周期

10、容器的生命周期

三、容器生命周期管理

1、容器创建(docker create)

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

②命令格式:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

③命令参数(OPTIONS)

--tty(-t):分配一个伪TTY,也就是分配虚拟终端
--interactive(-i):即使没有连接,也要保持STDIN打开
--name:为容器起名,如果没有指定将会随机产生一个名称
[COMMAND]:表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
[ARG]:表示执行COMMAND时需要提供的一些参数,如ps命令的aux、ls命令的-a等等

④命令示例:docker create -ti --name test-container centos ps -A

2、容器启动(docker start)

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

②命令格式:docker start [OPTIONS] CONTAINER [CONTAINER...]

③命令参数(OPTIONS)

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

④命令示例:docker start -a 65ebc

3、容器创建并启动(docker run)

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

②命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

③命令参数(OPTIONS)

--tty(-t):分配一个伪TTY,也就是分配虚拟终端
--interactive(-i):即使没有连接,也要保持STDIN打开
--name:为容器起名,如果没有指定将会随机产生一个名称
--detach(-d):在后台运行容器并打印出容器ID
--rm:当容器退出运行后,自动删除容器
[COMMAND]:表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
[ARG]:表示执行COMMAND时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等

④命令示例:docker run -di centos ps -A

4docker run与docker create + docker start

①前台模式:docker run相当于docker create + docker start –a

②后台模式:docker run -d 相当于 docker create + docker start

5、容器暂停(docker pause)

①作用:暂停一个或多个处于运行状态的容器

②命令格式:docker pause CONTAINER [CONTAINER...]

③命令示例:docker ps -a => docker pause test-container2 => docker ps -a(容器变成了Pause状态)

6、容器取消暂停(docker unpause)

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

②命令格式:docker unpause CONTAINER [CONTAINER...]

③命令示例:docker ps -a => docker unpause test-container2 => docker ps -a(容器恢复成了运行状态)

7、容器关闭(docker stop)

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

②命令格式:docker stop [OPTIONS] CONTAINER [CONTAINER...]

③命令参数(OPTIONS)

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

④命令示例:docker stop -t 3 容器id

8、容器终止(docker kill)

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

②命令格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]

③命令参数(OPTIONS)

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

④命令示例:docker kill test-container2

9、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重启、容器内部进程运行发生错误等等“异常原因”

10、容器重启(docker restart)

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

②命令格式:docker restart [OPTIONS] CONTAINER [CONTAINER...]

③命令参数(OPTIONS)

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

11、容器删除(docker container rm)

①作用:删除一个或多个容器

②命令格式:docker container rm [OPTIONS] CONTAINER [CONTAINER...] 或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]

③命令参数(OPTIONS)

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

④命令示例:docker rm -f 容器id 容器名

四、容器信息查看

1、容器详细信息(docker container inspect)

①作用:查看本地一个或多个容器的详细信息

②命令格式:docker container inspect [OPTIONS] CONTAINER [CONTAINER...] 或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]

③命令参数(OPTIONS)

--format string(-f):利用特定golang的format格式输出结果
--size(-s):显示总大小

④命令示例:docker container inspect -f "{{json .State.Status}}" 容器id

2、容器日志信息(docker logs)

①作用:查看容器的日志信息,容器日志中记录的是容器主进程的输出STDOUT\STDERR

②命令格式:docker logs [OPTIONS] CONTAINER

③命令参数(OPTIONS)

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

3、容器重命名(docker rename)

①作用:修改容器的名称

②命令格式:docker rename CONTAINER NEW_NAME

五、容器运行时操作

1、容器连接(docker attach)

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

②命令格式:docker attach [OPTIONS] CONTAINER

③命令参数(OPTIONS)

--no-stdin:不绑定STDIN

2、容器中执行新命令(docker exec)

①作用:在容器中运行一个命令

②命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

③命令参数(OPTIONS)

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

六、过程图示

七、容器与镜像

1、容器与镜像的关系

2、容器提交(docker commit)

①作用:根据容器生成一个新的镜像

②命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

③命令参数(OPTIONS)

--author string(-a):作者
--change list(-c):为创建的镜像加入Dockerfile命令
--message string(-m):提交信息,类似git commit -m
--pause(-p):提交时暂停容器(default true)

④命令示例

docker run --rm -dti centos bash
docker ps
docker exec -d 容器id号 yum -y install net-tools
docker commit -m 'install net-tools' 容器id号 centos-net-tools:lastest
docker images
docker history centos-net-tools

3、容器导出(docker export)

①作用:将容器当前的文件系统导出成一个tar文件

②命令格式:docker export [OPTIONS] CONTAINER

③命令参数(OPTIONS)

--output string(-o):指定写入的文件,默认是STDOUT

4、容器打包的导入(docker import)

①作用:从一个tar文件中导入内容创建一个镜像

②命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

③命令参数(OPTIONS)

--change list(-c):为创建的镜像加入Dockerfile命令
--message string(-m):导入时,添加提交信息
posted @ 2020-09-13 14:25  专业搬砖人士  阅读(376)  评论(0)    收藏  举报