当前位置: 首页 > news >正文

[Docker][Docker Container]详细讲解

目录

  • 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命令来导入一个容器快照到本地镜像库
  • 两者的区别
    • 容器快照将会丢弃所有的历史记录和元数据信息
    • 而镜像存储文件将保存完整记录,体积也会更大

相关文章:

[Docker][Docker Container]详细讲解

目录 1.什么是容器?2.容器命令1.docker creatre2.docker run3.docker ps4.docker logs5.docker attach6.docker exec7.docker start8.docker stop9.docker restart10.docker kill11.docker top12.docker stats13.docker container inspect14.docker port15.docker c…...

塑造美好心灵,激发创造活力|第三届瓷艺中华“陶溪川杯”儿童青少年陶瓷作品展开展

第三届瓷艺中华“陶溪川杯”儿童青少年陶瓷作品展 展览现场 由中央美术学院、景德镇陶瓷大学、景德镇陶文旅控股集团共同主办,由中国非物质文化遗产保护协会陶瓷分会、中国文化艺术发展促进会陶瓷专业委员会、中央美术学院陶瓷艺术研究院、中央美术学院少儿美术教…...

鸿蒙开发刷新单个item会闪一下处理

鸿蒙开发刷新单个item会闪一下 首先我用的是懒加载方式,改变某位数据后我调listener.onDataChange(index),发现item的改动是变了,但是item也闪了一下。 先分析为什么item会闪一下 其他是因为item上有图片,加载的网络图。你onDataChange(index)时,它会重新加载这一item,…...

您需要了解的有关 5G 的一切。

转载 https://www.qualcomm.com/5g/what-is-5g 在这里,您可以找到 5G 技术的解释——5G 的工作原理、5G 的重要性以及它如何改变世界连接和沟通的方式。在 Qualcomm,我们发明了使 5G 成为可能的根本性突破。 问:什么是 5G? 答&…...

【redis】初识redis入门,基础部署以及介绍

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...

数据库基础 -- 数据库约束

数据库基础 – 数据库约束 1.约束 1.1 概念 约束是用于强制数据库中数据 完整性 和 一致性 的规则。它们定义了对表中数据的限制,确保数据的有效性和正确性,实际上就是表中数据的限制条件。 1.2 分类 1.2.1 完整性约束 主键约束(Primary Key Const…...

U盘文件或目录损坏无法读取?专业恢复策略全解析

U盘困境:文件目录的隐形危机 在日常的数字生活中,U盘作为便捷的数据存储与传输工具,扮演着至关重要的角色。然而,当U盘中的文件或目录突然遭遇损坏,导致无法被正常读取时,这无疑给用户带来了极大的困扰。这…...

dpdk实现udp协议栈

使用DPDK实现UDP用户态协议栈,实现流程中包括: 三类线程 1、收发包线程 2、用户态协议栈线程 3、udp服务端线程 两类缓冲区: 1、协议栈收包缓冲区和协议栈发包缓冲区 2、udp收包缓冲区和udp发包缓冲区 协议栈缓冲区中存储的数据是str…...

Shell编程——基础语法(2)和 Shell流程控制

文章目录 基础语法(2)echo命令read命令printf命令test命令 Shell流程控制if-else语句for 循环while 语句until 循环case ... esac跳出循环 基础语法(2) echo命令 Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于…...

Python基础教程(二)字符串和函数

6.字符串 6.1 字符串的表示方式 6.1.1 普通字符串 普通字符串指用单引号()或双引号(”")括起来的字符串。例如:Hello或"Hello" >>> Hello Hello >>> "Hello" Hello >>> s\u0048\u0065\u006c\u006c\u006f >>> …...

智算新风向丨趋动科技获中国信通院泰尔实验室首张智算资源池化能力泰尔测评证书

近日,趋动科技“OrionX AI算力资源池化软件”经中国泰尔实验室依据《FG-Z14-0172-01智算资源池化平台测试方案》评估测试,获得智算资源池化能力泰尔测评证书,成为该领域首个完成此评价的产品。 图1.OrionX通过智算资源池化平台评测 随着AI大…...

计算机基础(Windows 10+Office 2016)教程 —— 第4章 计算机网络与Internet(上)

第4章 计算机网络与Internet 4.1 计算机网络概述4.1.1 计算机网络的定义4.1.2 计算机网络的发展4.1.3 计算机网络的功能4.1.4 计算机网络体系结构和TCP/IP 参考模型 4.2 计算机网络的组成和分类4.2.1 计算机网络的组成4.2.2 计算机网络的分类 4.3 网络传输介质和通信设备4.3.1 …...

MES系统在数字化转型中的核心作用与影响

数字化转型是企业利用数字技术改变其业务模式、运营方式、组织结构、产品服务等方面的过程,旨在提高效率、降低成本、增强竞争力并实现可持续发展。数字化转型涉及多个层面,主要包括以下几个方面: 数字化转型转什么 转战略:由构…...

装修施工注意事项

1 地漏保护 咋墙拆改时,一定要用保护盖把所有的地漏下水管道都拧紧 2 卫生间防水做完,必须要先用水泥砂浆做好保护层再贴,不然后续施工,不小心破坏防水层,以后漏水后悔都晚了。 3 入户门口处,一定要用…...

【Docker学习记录】

Docker学习记录 目录 1. Windows上使用wsl1.1 安装docker后遇到的一些疑惑1.2. wsl的一些相关命令1.3. 补一点,wsl的作用 2. docker一些常用的命令2.1 构建docker镜像2.2 运行镜像 3. Dockerfile的编写3.0 docker的一些概念3.0.1 容器的分层3.0.2 COPY-ON-WRITE 3.…...

互联网政务应用安全管理规定

互联网政务应用安全管理规定 (2024年2月19日中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部制定 2024年5月15日发布) 第一章 总则 第一条为保障互联网政务应用安全,根据《中华人民共和国网络安全法…...

HarmonyOS开发商城首页实现

目录 一:功能概述 二:代码实现 三:效果图 一:功能概述 这一节我们主要在鸿蒙OS系统中实现的一个底部导航功能,并在首页底部使用TabSwitch组件进行导航切换。同时,首页采用Search组件实现商品搜索框,Scroll和Swiper组件实现图片轮播功能,以展示推荐内容或图片。 1:…...

QtQuick Text-文本样式

属性 Text项目的style属性可以设置文本的样式。 支持的文本样式有: Text.Normal(默认)Text.OutlineText.RaisedText.Sunken 示例 import QtQuickRow{spacing: 10padding: 10Text {font.pointSize: 40text: "Normal"}Text {font…...

人工智能未来展望

深入剖析人工智能:现状、挑战与未来展望 在当今这个日新月异的科技时代,人工智能(AI)无疑是最为耀眼的明星之一。它以其独特的魅力,正引领着一场前所未有的技术革命,深刻地改变着人类社会的方方面面。本文…...

Pymol开源版安装 新版 3.0 / 3.1 Windows安装Pymol开源版

PyMOL 简介 PyMOL 是一个开源的分子可视化系统,被广泛应用于结构生物学中。它允许用户可视化分子结构,并创建高质量的蛋白质、核酸和其他大分子的3D图像。多年来,PyMOL不断发展,新版本引入了更多的功能和改进。 PyMOL 3.0 / 3.1…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...