Dokcer-容器

一、什么是容器

容器是一种轻量级、可移植、并将应用程序进行打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。
docker运行一个镜像,这个镜像就会生成一个进程,这个进程就被称为容器

二、容器和虚拟机对比

相同点不同点
容器和虚拟机一样,都会对物理硬件资源(主机)进行共享使用虚拟机是一个完整的操作系统,容器是直接运行在宿主机的内核上
容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等)容器是轻量级的,虚拟机是重量级
容器中或虚拟机中都可以安装各种应用,如mysql、nginx等在给定的硬件上能运行更多的容器
同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下

三、虚拟机和docker容器的生命周期

虚拟机的生命周期镜像的生命周期
image.pngimage.png

四、容器的操作

4.1、容器创建

  • 作用:利用镜像创建出一个created状态的待启动容器
  • 命令格式:

    • 英文下的:docker create [options] IMAGE [COMMAND] [ARG...]
    • 译:docker create [参数] 镜像 [容器启动后,需要在容器中执行的命令] [执行命令时提供的参数]
  • 参数:

    • --name 为容器起名,没有则随机生成一个名称
  • 更多的用法:docker create --help
# 创建一个tomcat容器且默认运行命令为ls -a
docker create --name tomcat_test tomcat:latest ls -a
# 查看当前运行docker容器
docker ps -a

image.png

4.2、容器的删除

  • 作用:删除历史版本的一些不再使用或需要保存的容器,减少磁盘占用
  • 命令格式:

    • docker rm [OPTION] IMAGE_NAME[IMAGE_NAMES...] IMAGE_ID[IMAGE_IDS...]
  • 参数:

    • -f,强制删除运行中的容器
    • IMAGE_NAME表示一个或者多个容器名称
    • IMAGE_ID表示一个或者多个容器ID
  • 更多的用法:docker rm --help/-h
# 1.看查正在运行的容器
docker ps -a
# 2.根据NAMES和ID删除 一个或多个容器
docker rm -f  85e  python_test

image.png

4.3、容器的启动

  • 作用:将一个或多个处理创建状态或关闭状态的容器启动起来
  • 命令格式:

    • docker start [OPTIONS] CONTAINER [CONTAINER...]
  • 参数:

    • -a,--attach 将当前shell的STDOUT/STDERR连接到容器上
    • -i,--interactive 将当前shell的STDIN连接到容器上
  • 更多的用法:docker start --help/-h

eg:

# 创建一个容器
docker create --name python_test  python:3.8.0  ls -a
# 查看容器
docker ps -a

image.png

# 启动刚创建的容器
docker start 3a3

image.png

分析: 启动后发现容器的状态是Exited也就是退出状态,并不是期望的running状态。这是因为在
创建容器的时候使用的命令ls -a,这条命令是瞬间就执行完成,进程执行结束,所以容器也
就直接退出了。同时也没有打印出ls -a的执行结果
# 加入可选参数-a,将标准输入和错误信息显示出来,再次启动容器
docker start  3a3 -a

image.png

4.4、容器创建并启动

  • 作用:利用镜像创建并启动一个容器
  • 命令格式:docker run [options] IMAGE [COMMAND] [ARG...]
  • 参数:

    • -t,--tty 分配一个伪TTY,也就是分配虚拟终端
    • -i,--interactive即使没有连接,也要保持STDIN打开
    • --name为容器起名,如果没有指定将会随机产生一个名称
    • -d,--detach 在后台运行容器并打印出容器ID
    • --rm 当容器退出运行后,自动删除容器
    • command 表示容器启动后,需要在容器中执行的命令
    • ARG表示执行command时所需要提供的一些参数
  • 更多用法:docker run --help

eg:

#  运行一个容器
 docker run --name python_test python:3.8.0 ls -a
# 查看容器
dokcer ps -a

image.png

注意:docker run 等价于 docker create + docker start -a

  • docker run 和docker create + docker start

    • docker run 相当于docker create + docker start -a 前台模式
    • docker run -d 相当于docker create + docker start 后台模式
# 创建一个名为pytho_test 的容器并置于后台运行
 docker run -dti --name python_test python:3.8.0 python

image.png

4.5、容器关闭

  • 作用:关闭一个或者多个处于暂停状态或者运行状态的容器
  • 命令格式:docker stop [OPTIONS] CONTAINER [CONTAINER..]
  • 参数:

    • -t,--time int关闭前,等待的时间,单位秒(默认10s)
  • 更多用法:docker stop --help/-h

eg:

# 运行一个后台运行的容器
docker run -dti --name test_02 centos:latest
# 查看运行容器
docker ps -a

image.png

# 3s后关闭这个容器,不加-t 参数默认为10s
docker stop -t 3 deb

image.png

4.6、容器终止

  • 作用:强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
  • 命令格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]
  • 参数:

    • -s,--signal string 指定发送给容器的关闭信息
  • 更多用法:docker kill -h/--help
# 强行终止正在运行的容器
docker kill 049

image.png

  • docker stop 和 docker kill 的区别

       linux中有两种终止进程的信号:SIGTERM和SIGKILL
    SIGKILL信号SIGTERM信号docker stopdocker kill
    无条件终止进程信号。进程接收到该信号会立即终止,不进行清理和暂存工作。该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。程序终结信号,可以由kill命令产生。与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等docker stop会先发出SIGTERM信号给进程,告诉进程即将会被关闭,在-t指定的等待时间之后,将会发出SIGKILL的信号,直接关闭容器docker kill 直接发出SIGKILL的信息关闭容器。但也可以通过-s参数修改发出的信号。因此会发现dock stop的等待过程中,如果终止dock stop的执行,容器最终是不会关闭。而docker kill几乎是立刻发生,无法撤销

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

4.7、容器的暂停

  • 作用:暂停一个/多个处于运行状态的容器
  • 命令格式:docker pause CONTAINER[CONTAINER..]
  • 更多用法:docker pause -h/--help

eg:

# 根据容器名称:test_02暂停容器
docker pause test_02

image.png

4.8、容器取消暂停

  • 作用:暂停一个/多个处于暂停状态的容器,恢复运行
  • 命令格式:docker unpause CONTAINER[CONTAINER..]
  • 更多用法:docker unpause -h/--help

eg:

# 根据容器名称:test_02取消容器暂停,恢复启动状态
docker unpause test_02

image.png

4.9、容器重启

  • 作用:重启一个或多个处于运行状态、暂停状态、关闭状态或新建状态的容器,该命令相当于stop和start的结合
  • 命令格式:docker restart [OPTIONS] CONTAINER[CONTAINER...]
  • 参数:

    • -t,-time int 重启前,等待的时间,单位秒(默认10s)实则是关闭前等待的时间
  • 更多用法:docker restart -h/--help

eg:

# 根据容器ID重启容器
docker restart -t 3 049

image.png

4.10、容器信息查看

  • 作用:查看本地一个/对个容器的详情信息
  • 命令格式:

    • docker inspect [OPTIONS] CONTAINER[CONTAINER...]
    • docker container inspect [OPTIONS] CONTAINER[CONTAINER...]
  • 参数:

    • -f,--format string 利用特定Go语言的format格式输入结果
    • -s,--size显示总大小
  • 更多用法:docker inspect -h/--help

eg:

# 查看容器的运行状态信息
docker container inspect -f "{{json .State.Status}}" 049
# 查看容器完整信息
docker inspect 049

image.png

4.11、容器日志信息

  • 作用:查看容器的日志信息
  • 命令格式:docker logs [OPTIONS] CONTAINER
  • 参数:

    • --details 显示日志的额外信息
    • -f,--follow 动态跟踪显示的日志信息
    • --since string 只显示某时间节点之后的
    • --tail string 显示倒数的行数(默认全部)
    • -t,--timestamps 显示timestamps时间
    • --until string 只显示某时间节点之前的
  • 更多用法:docker logs -h/--help

4.12、容器重命名

  • 作用:修改容器的名称
  • 命令格式:docker rename CONTAINER NEW_NAME

4.13、容器运行时操作

4.13.1、容器连接

  • 作用:将终端的STDIN、STDOUT、STDERROR绑定到正在运行的容器的主进程上实现连接
  • 命令格式:docker attach [OPTIONS] CONTAINER
  • 参数:--no-stdin 不绑定STDIN
  • 更多用法:docker attach -h/--help

4.13.2、容器中执行新命令

  • 作用:在容器中运行一个命令,容器必须时运行状态
  • 命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 参数:

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

eg:

# 容器必须是运行状态
# 执行ls -a
docker exec -i 049 ls -a

image.png

测试小白爱测试!!!

10 声望
3 粉丝
0 条评论
推荐阅读
数据结构与算法
一、算法1.1、算法基础概念:算法是独⽴存在的⼀种解决问题的⽅法和思想算法的特性:输入:算法具有0个或多个输⼊输出: 算法⾄少有1个或多个输出有穷性: 算法在有限的步骤之后会⾃动结束⽽不会⽆限循环,并且每⼀...

测试菜鸟阅读 344

Aliyun-使用Docker方式安装Jenkins
之前自己在阿里云ECS上面安装了Jekins(安装jenkins的文章),最近因为服务器中了挖矿木马于是准备重新安装一下,但是想到每次安装jenkins都要手动安装jdk、maven、docker、kubectl,感觉好麻烦,于是使用官方推荐...

Awbeci2阅读 2.1k

Win10 安装Docker以及Jenkins(超级详细篇)
安装Docker下载地址:[链接] ,按照它的指引教程,无脑下一步即可。安装成功后电脑会重启。打开docker桌面端,会显示进入链接,下载WSL 安装包进行无脑安装即可。安装 Linux 内核更新包 (重启电脑)重启 Docker ...

九旬3阅读 1.1k

蚂蚁安全科技 Nydus 镜像加速实践
蚂蚁安全科技 Nydus 镜像加速实践原创 曦栖 金融级分布式架构文|蚂蚁集团 ZOLOZ 团队使用全球领先安全科技,为用户和机构提供安全、便捷的安全风控解决方案。本文 6386 字 阅读 12 分钟背景简介ZOLOZ[1]是蚂蚁集...

SOFAStack1阅读 3.8k

封面图
Redis集群容器化安装
主从复制在数据库中很常见,一般用来做读写分离,Redis中也是如此。要求只有1个Master(主节点),可以有N个slaver(从节点),而且Slaver也可以有自己的Slaver,由于这种主从的关系决定他们是在配置阶段就要指定...

KerryWu2阅读 2.3k

LeanCloud 云引擎支持预览环境
云引擎最近支持了 预览环境,可以自动将 Pull request 部署到一个新的环境,每个预览环境有单独的域名,让开发者在线上测试过后再合并 PR。

LeanCloud1阅读 1.5k

封面图
Tomcat处理http请求之源码分析 | 京东云技术团队
在上面的代码中,socket = serverSocketFactory.acceptSocket(serverSocket);与客户端建立连接,将连接的socket交给processSocket(socket)来处理。在processSocket中,对socket进行包装一下交给线程池来处理:

京东云开发者2阅读 294

封面图

测试小白爱测试!!!

10 声望
3 粉丝
宣传栏