[Docker][Docker Container]详细讲解

news2024/11/15 11:17:44

目录

  • 1.什么是容器?
  • 2.容器命令
    • 1.docker creatre
    • 2.docker run
    • 3.docker ps
    • 4.docker logs
    • 5.docker attach
    • 6.docker exec
    • 7.docker start
    • 8.docker stop
    • 9.docker restart
    • 10.docker kill
    • 11.docker top
    • 12.docker stats
    • 13.docker container inspect
    • 14.docker port
    • 15.docker cp
    • 16.docker diff
    • 17.docker commit
    • 18.docker pause
    • 19.docker unpause
    • 20.docker rm
    • 21.docker export
    • 22.dockers wait
    • 23.docker rename
    • 24.docker container prune
    • 25.docker update
  • 3.容器交互模式
    • 1.attach
    • 2.detached
    • 3.Interactive
  • 4.常见问题
    • 1.creatre、start、run有什么区别?
    • 2.import 和 load 有什么区别?


1.什么是容器?

  • 通俗地讲:容器是镜像的运行实体
    • 镜像是静态的只读文件,而容器带有运行时需要的可写文件层
    • 并且容器中的进程属于运行状态
      • 即:容器运行着真正的应用进程
    • 容器有初建、运行、停止、暂停和删除五种状态
  • 容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制
    • 也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息
    • 这是容器与直接运行在主机上进程的本质区别
  • 容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器
  • 运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本
    • 这将添加一个容器层,该层允许修改镜像的整个副本
      请添加图片描述

2.容器命令

1.docker creatre

  • 功能:创建一个新的容器但不启动它
  • 语法docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 关键参数
    • -i:以交互模式运行容器,通常与-t同时使用
    • -P:随机端口映射,容器内部端口随机映射到主机的端口
    • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
    • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
    • --name="nginx-lb":为容器指定一个名称
    • -h "mars":指定容器的hostname
    • -e username="ritchie":设置环境变量
    • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定CPU运行
    • -m:设置容器使用内存最大值
    • -network="bridge":指定容器的网络连接类型
    • --link=[]:添加链接到另一个容器
    • --volume , -v:绑定一个卷
    • --rm:shell退出的时候自动删除容器
    • --restart:自动重启
  • 示例docker create --name mynginx nginx:latest

2.docker run

  • 功能:创建一个新的容器并运行一个命令
  • 语法docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 关键参数
    • -d后台运行容器,并返回容器 ID,比creatre多了这个参数
    • -i:以交互模式运行容器,通常与-t同时使用
    • -P:随机端口映射,容器内部端口随机映射到主机的端口
    • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
    • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
    • --name="nginx-lb":为容器指定一个名称
    • -h "mars":指定容器的hostname
    • -e username="ritchie":设置环境变量
    • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定CPU运行
    • -m:设置容器使用内存最大值
    • -network="bridge":指定容器的网络连接类型
    • --link=[]:添加链接到另一个容器
    • --volume , -v:绑定一个卷
    • --rm:shell退出的时候自动删除容器
    • --restart:自动重启
  • 示例
    #使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx
    docker run --name mynginx -d nginx:latest
    
    #使用镜像nginx:latest,以后台模式启动一个容器,将容器的80端口映射到主机的 80端口,主机的目录/data映射到容器的/data
    docker run -p 80:80 -v /data:/data -d nginx:latest
    

3.docker ps

  • 功能:查看容器,列出所有的正在运行的容器

  • 语法docker ps [OPTIONS]

  • 关键参数

    • -a:显示所有的容器,包括未运行的
    • -f:根据条件过滤显示的内容
    • --format:指定返回值的模板文件。如 json 或者 table
    • -l:显示 latest 的容器
    • -n:列出最近创建的 n 个容器
    • --no-trunc:不截断输出
    • -q:静默模式,只显示容器编号
    • -s:显示总的文件大小
  • 容器批量处理技巧

    命令解释
    docker ps -qf name=xxx根据名称过滤得到容器编号
    docker ps -f status=running根据状态过滤容器信息
    docker ps -aq静默获取全部容器ID
    docker ps -f ancestor=xxx过滤镜像名/ID为xxx的容器信息

4.docker logs

  • 功能:查看容器日志
  • 语法docker logs [OPTIONS] CONTAINER
  • 关键参数
    • -f, --follow:跟踪日志输出
    • --since:显示某个开始时间的所有日志
    • -t, --timestamps:显示时间戳
    • -n, --tail:仅列出最近N条容器日志

5.docker attach

  • 功能:连接到正在运行中的容器
  • 语法docker attach [OPTIONS] CONTAINER
  • 关键参数--sig-proxy:是否将所有信号代理,默认是true,如果设置为false,退出的话不会影响容器,否则退出会导致容器退出

6.docker exec

  • 功能:在容器中执行命令
  • 语法:`docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
  • 关键参数
    • -d:分离模式,在后台运行
    • -i:即使没有附加也保持STDIN打开
    • -t:分配一个伪终端
    • -e:设置环境变量
    • -u, --user:指定用户
    • -w, --workdir:指定工作目录
  • 示例
    # 在容器SnowK中以交互模式执行echo
    docker exec -it SnowK echo "Hello SnowK"
    
    # 在容器SnowK中以交互模式打开shell
    docker exec -it SnowK bash
    

7.docker start

  • 功能:启动停止的容器
  • 语法docker start [OPTIONS] CONTAINER [CONTAINER...]

8.docker stop

  • 功能:停止运行的容器
  • 语法docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数-s:发送的信号

9.docker restart

  • 功能:重启容器
  • 语法docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数-s:发送的信号

10.docker kill

  • 功能:强制退出容器
  • 语法docker kill [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数-s:发送的信号
  • 注意事项
    • docker stop发送的是SIGTERM信号
    • docker kill发送的是SIGKILL信号

11.docker top

  • 功能:查看容器中运行的进程信息,支持ps命令参数
  • 语法docker top CONTAINER [ps OPTIONS]
  • 注意事项:容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看Container中正在运行的进程

12.docker stats

  • 功能:显示容器资源使用情况,包括CPU、内存、网络IO等
  • 语法docker stats [OPTIONS] [CONTAINER...]
  • 关键参数
    • -a, -all:显示所有的容器,包括为运行的
    • --format:指定返回值的模板文件,如 table,json
    • --no-stream:展示当前状态就直接退出了,不再实时更新
    • --no-trunc:不截断输出

13.docker container inspect

  • 功能:查看容器详细信息
  • 语法docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数
    • -f:指定返回值的模板文件,如 table,json
    • -s:显示总的文件大小
  • 注意事项docker inspect会自动检查是镜像还是容器然后显示详细信息

14.docker port

  • 功能:用于列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
  • 语法docker port CONTAINER [PRIVATE_PORT[/PROTO]]

15.docker cp

  • 功能:在容器和宿主机之间拷贝文件
  • 语法
    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
    docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
    
  • 示例
    # 将主机/www/目录拷贝到容器mynginx的/www目录下
    docker cp /www/ mynginx:/www/
    # 将容器/www/目录拷贝到主机的/wwwbak目录下
    docker cp mynginx:/www/ /wwwbak/
    

16.docker diff

  • 功能:检查容器里文件结构的更改
  • 语法docker diff CONTAINER

17.docker commit

  • 功能:从容器创建一个新的镜像
  • 语法docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • 参数
    • -a:提交的镜像作者
    • -c:使用Dockerfile指令来创建镜像;可以修改启动指令
    • -m:提交时的说明文字
    • -p:在commit时,将容器暂停
  • 示例docker commit c3f279d17e0a SnowK/Die:v1.0

18.docker pause

  • 功能:暂停容器中所有的进程
  • 语法docker pause CONTAINER [CONTAINER...]

19.docker unpause

  • 功能:恢复容器中所有的进程
  • 语法docker unpause CONTAINER [CONTAINER...]

20.docker rm

  • 功能:删除停止的容器
  • 语法docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数-f:通过SIGKILL信号强制删除一个运行中的容器

21.docker export

  • 功能:导出容器内容为tar文件
  • 语法:`docker export [OPTIONS] CONTAINER
  • 关键参数-o:写入到文件

22.dockers wait

  • 功能:阻塞运行直到容器停止,然后打印出它的退出代码
  • 语法docker wait CONTAINER [CONTAINER...]

23.docker rename

  • 功能:重命名容器
  • 语法docker rename CONTAINER NEW_NAME

24.docker container prune

  • 功能:删除所有停止的容器
  • 语法:`docker container prune [OPTIONS]
  • 关键参数-f, --force:不提示是否进行确认

25.docker update

  • 功能:更新容器配置
  • 语法docker update [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数
    • --cpus:CPU数量
    • --cpuset-cpus:使用哪些CPU
    • --memory:内存限制
    • --memory-swap:交换内存
    • --cpu-period:是用来指定容器对CPU的使用要在多长时间内做一次重新分配
    • --cpu-quota:是用来指定在这个周期内,最多可以有多少时间用来跑这个容器

3.容器交互模式

1.attach

  • attached模式,容器在前台运行
  • 如果是在Linux服务器上,按Ctrl+C就会停止掉Docker服务,很容易误操作, 所以我们需要一个更好的,更稳定的模式,对应的是detached模式
  • attached模式仅适用于容器和程序的调试阶段

2.detached

  • 相比attach模式,启动时加上-d参数即可,容器则在后台运行
  • 比起attached模式更建议使用

3.Interactive

  • 当创建好一个容器之后, 可能需要去容器内部获取一些信息或执行一些命令,就需要进入到交互式模式
    • 例如:创建一个Ubuntu容器之后,需要到系统里输入各种Shell命令和系统进行交互就需要进入交互式模式才可以完成
  • 创建容器并进入到交互模式docker run -it nginx
  • 进入该容器的交互模式docker exec -it nginx /bin/bash

4.常见问题

1.creatre、start、run有什么区别?

  • docker create从Docker映像创建一个全新的容器,但是,它不会立即运行它
  • docker start命令将启动任何已停止的容器,如果使用docker create命令创建容器,则可以使用此命令启动它
  • docker run命令是创建和启动的组合,因为它创建了一个新容器并立即启动它
    • 实际上,如果docker run命令在您的系统上找不到上述映像,它可以从Docker Hub中提 取映像

2.import 和 load 有什么区别?

  • docker save images_name
    • 将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录
    • docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录
  • docker export container_id:将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照
  • 既可以使用docker load命令来导入镜像库存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库
  • 两者的区别
    • 容器快照将会丢弃所有的历史记录和元数据信息
    • 而镜像存储文件将保存完整记录,体积也会更大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0730评价项目 实现数据库行转列查询

0730评价项目包-CSDN博客 数据库字段: 实现业务: 1)查询对应部门,年份的员工季度评价信息: 对应sql语句: 使用 group by 和 GROUP_CONCAT 关键字进行行转列, case when 后接关联条件&#xf…

【Py/Java/C++三种语言详解】LeetCode 1334、LeetCode1334. 阈值距离内邻居最少的城市【全源最短路问题Floyd算法】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练(备注【CSDN】否则不通过) 文章目录 相关推荐阅读**一、题目描述****二、题目解析****三、参考代码**PythonJavaC **四、时空复杂度**华为OD算法/大厂面试高频题算法练习冲刺…

webstorm配置项目Typescript编译环境

使用npm命令安装typeScript编译器 npm install typescript -g 安装好,在命令行可以查看编译器的版本 tsc --version 用Webstorm打开一个Typescript的项目。为TypeScript文件更改编译设置,File->Settings->toosl -> File Watchers->TypeScri…

【工具篇】华为VRP通用操作系统 —— 基础命令介绍

文章目录 视图切换命令命令报错误类型命令行快捷键 【工具篇】华为VRP通用操作系统 —— 基础知识 通过上一节的华为VRP通用操作系统介绍,掌握如何登入设备以及命令行架构。也通过eNSP虚拟器搭建拓扑成功登入华为VRP通用操作系统。 本文章介绍基础命令以及快捷键&am…

【数据结构】二叉树基本操作(孩子兄弟表示法 + Java详解 + 原码)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构 📚本系列文章为个人学…

OpenStack入门体验

一、云计算概述 1.1什么是云计算 云计算(cloud computing)是一种基于网络的超级计算模式,基于用户的不同需求,提供所需的资源,包括计算资源、存储资源、网络资源等。云计算服务运行在若干台高性能物理服务器之上,提供每秒 10万亿次的运算能力…

MSF回弹木马ubuntu测试

网站地址为192.168.104.128 web.php内容为&#xff1a; <?php eval($_POST[123]); ?>linux版本信息&#xff1a;20.04.1-Ubuntu nginx信息&#xff1a;nginx-1.21.6 php信息&#xff1a;PHP 7.3.33-19 php-fpm信息&#xff1a;/etc/php/7.3/fpm/php-fpm.conf 一、使用…

解决VisualVM下载插件失败(手动安装)

解决VisualVM下载插件失败 当前为jdk8自带的jvisualvm,出现以下情况,已经配置了对于java版本的url 点设置,再点编辑,对url进行修改 进入这里网址 检查url是否对应,复制到上面的url上面 例如: 我的jdk版本为: jdk-8u321-windows-x64 , 选131 - 351 再重新下载 还是不行, 可以…

嵌入式人工智能(38-基于树莓派4B的角速度和加速度传感器-MPU6050)

1、角速度传感器 角速度传感器是一种用于测量物体在空间中绕坐标轴旋转的速度的传感器。角速度是一个物体围绕某一轴旋转的速度大小&#xff0c;通常以角度/秒或弧度/秒的形式表示。 角速度传感器通常使用陀螺仪原理来测量角速度。陀螺仪是基于角动量守恒定律的物理原理&…

力扣高频SQL 50题(基础版)第三十八题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十八题1484.按日期分组销售产品题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十八题 1484.按日期分组销售产品 题目说明 表 Activities&#xff1a; ---…

类型推断技术及仓颉语言实践

史磊 仓颉语言类型推断技术专家 一、一种看待类型系统的方式 一门编程语言一定得包含类型系统吗&#xff1f; 这个问题今天看来可能显而易见&#xff0c;一个程序没有类型的话还能算是个完整、正确的程序吗&#xff1f;但是其实关于类型系统的作用&#xff0c;一直是存在两种…

PCB打板——usb扩展坞

采用一个typec模块&#xff0c;四个typea模块&#xff0c;以及保险丝&#xff0c;电源滤波部分&#xff0c;原理图如下 这里usb信号线为差分信号&#xff0c;要用差分导线&#xff08;长度相同&#xff0c;对称&#xff09;

RK3568笔记五十:SPI通信-回环测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、SPI引脚关系 其中SPI1的引脚关系如下表所示 SPI 引脚 功能 MOSI GPIO3_C1 主设备输出/从设备输入 MISO GPIO3_C2 主设备输入/从设备输出 CLOCK CPIO3_C3 时钟信号线 CS0 GPIO3_A1 片选信号线0 CS1 NC …

kettle从入门到精通 第八十二课 ETL之kettle kettle中的【阻塞数据直到步骤都完成】使用教程

1、在使用步骤【阻塞数据直到步骤都完成】&#xff08;英文为Block this step until steps finish&#xff09;之前&#xff0c;我们先来了解下什么是 Copy Nr&#xff1f; Copy Nr是指 “副本编号” 或 “拷贝编号”&#xff0c;也就是下图中的复制的记录行数&#xff0c;图中…

全网最强Nginx教程 | 万字长文爆肝Nginx(五)

Nginx实现服务器端集群搭建 Nginx与Tomcat部署 前面课程已经将Nginx的大部分内容进行了讲解&#xff0c;我们都知道了Nginx在高并发场景和处理静态资源是非常高性能的&#xff0c;但是在实际项目中除了静态资源还有就是后台业务代码模块&#xff0c;一般后台业务都会被部署在…

基于Spring boot + Vue的灾难救援系统

作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址&#xff1a;程序员云翼-CSDN博客 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue ElementUI 数据库&#xff1a; …

Java 关键字之 native 详解

本篇博客我们将介绍Java中的一个关键字——native。 native 关键字在 JDK 源码中很多类中都有&#xff0c;在 Object.java类中&#xff0c;其 getClass() 方法、hashCode()方法、clone() 方法等等都是用 native 关键字修饰的。 那么为什么要用 native 来修饰方法&#xff0c;…

离线安装MeterSphere遇到的问题

1.安装步骤&#xff0c;参考官方文档 在线安装 - MeterSphere 文档 2.安装完成以后&#xff0c;docker ps查看有很多服务一直处于重启状态&#xff0c;查看容器日志docker logs ID,发现所有一直处于重启状态的容器都是因为服务无法创建日志目录和文件。一直处于重启的服务如…

【Java基础题型】矩阵的对角线之和

二维数组真是存矩阵的好东西啊&#xff0c;现在问题来了&#xff0c;输入一个5*5一共25个数字&#xff0c;要求你求出它们两个对角线上的数字之和&#xff01; 输入格式 25个数字&#xff0c;5行5列 输出格式 它们两个对角线上的和 左上->右下第一条 右上->左下第二…

【秋招笔试】24-07-27-OPPO-秋招笔试题(后端卷)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 💡 01.二进制反转游戏 问题描述 K小姐…