(2)Docker 常用命令

文章目录

    • Docker 服务器
    • Docker 镜像
    • Docker 容器
    • 本地 Registry
    • RUN vs CMD vs ENTRYPOINT
      • RUN
      • CMD
      • ENTRYPOINT
    • 限制容器对内存、CPU 和 IO 资源的使用
      • 内存
      • CPU
      • Block IO
        • 设置权重
        • bps 和 iops
    • cgroup 和 namespace
      • cgroup
      • namespac
        • Mount namespace
        • UTS namespace
        • IPC namespace
        • PID namespace
        • Network namespace
        • User namespace

Docker 服务器

  • systemctl status docker.service:查看 Docker daemon 服务状态
  • vim /etc/systemd/system/multi-user.target.wants/docker.service:修改 docker.service 配置
  • systemctl daemon-reload:重新加载 Docker daemon 配置
  • systemctl restart docker.service:重启 Docker daemon 服务
  • docker -H 192.168.138.132 info:通过命令行与 Docker daemon 通信,查看 Docker 服务器的信息

Docker 镜像

  • docker pull httpd:从 Registry 下载镜像
  • docker inspect xxxxx:用于查看容器、镜像、网络或数据卷的详细信息
  • dcoker run hello-world
    • docker run -d -p 8080:80 httpd:先下载镜像(如果本地没有),然后再启动容器。
    • docker run -it 镜像名:以交互模式进入容器,并打开终端
  • docker images [centos][-a]:查看镜像,-a 会显示所有中间镜像
  • Docker 容器的 ubuntu 镜像配置 apt 国内源
# 将文件中所有 archive.ubuntu.com 和 security.ubuntu.com 替换为 mirrors.aliyun.com。
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
# 清理 apt 包管理器的本地缓存(即 /var/cache/apt/archives 目录下的 .deb 文件)。避免旧版本的软件包占用磁盘空间。
apt-get clean
# 从新的软件源(阿里云镜像源)下载最新的软件包列表。
apt-get update
  • apt-get install -y vim:安装 vim,并跳过安装提示
  • docker commit wonderful_sa ubuntu_with_vi:将容器保存为镜像
  • docker rmi [-f] 容器id:删除镜像(先停止容器才能删除)。如果一个镜像对应了多个 tag,只有当最后一个 tag 被删除时,镜像才被真正删除。
  • touch Dockerfile:创建Dockerfile文件
  • docker build -t ubuntu-with-vi-dockerfile . :运行 docker build 命令,-t 将新镜像命名为 ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 为当前目录。Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置。
  • docker history ubuntu-with-vi-dockerfile:显示镜像的构建历史
  • docker build -t --no-cache ubuntu-with-vi-dockerfile-2 . 根据当前目录下的 dockerfile 构建镜像,不使用缓存
  • docker tag aaa:latest bbb:1:修改镜像的REPOSITORY和TAG
  • docker search httpd:搜索 Docker Hub 中的镜像。

Docker 容器

  • docker attach:进入容器的启动命令终端,不会启动新的进程。如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。
  • docker exec -it container bash :在容器中打开新的终端,并且可以启动新的进程。
  • docker logs -f container:如果只是为了查看启动命令的输出,可以使用 docker logs 命令。-f 的作用与 tail -f 类似,能够持续打印输出。
  • docker ps -a/ docker container ls -a:查看正在运行的容器,-a 会显示所有状态的容器。
  • ctrl + p + q :退出容器
  • docker run hello-world
    • docker run -d -p 8080:80 httpd:先下载镜像(如果本地没有),然后再启动容器。服务类容器通过 -d 以后台方式启动是非常合适的。
    • docker run -it 镜像名:以交互模式进入容器,并打开终端。退出 Shell(输入 exit 或 Ctrl+D):主进程(bash)终止 → 容器停止。若你不退出 Shell:容器会保持运行(因为主进程未终止)。工具类容器通常给能我们提供一个临时的工作环境,通常以 run -it 方式运行。工具类容器多使用基础镜像,例如 busybox、debian、ubuntu 等。
    • docker run --name my_nginx_container nginx:–name 参数显示地为容器命名,如果不指定,docker 会自动为容器分配名字。
    • docker run -d \
      –name mysql-container \
      -e MYSQL_ROOT_PASSWORD=my-secret-pw \
      -p 3306:3306 \
      -v /path/on/host:/var/lib/mysql \
      mysql:latest
    • docker run -d --restart=always httpd:无论容器因何种原因退出(包括正常退出),就立即重启。 只有当容器的启动进程退出时,–restart 才生效。 如果容器是因为执行 docker stop 或docker kill 退出,则不会自动重启。
  • docker stop/kill 镜像名:停止容器。kill 会快速停止容器。
  • docker create mysql-container:创建的容器处于 Created 状态。docker run 命令实际上是 docker create 和 docker start 的组合。
  • docker start/restart mysql-container:重新启动容器。
  • docker pause/unpause mysql-container:暂停容器/恢复运行容器。
  • docker rm container1 container2 container3:删除容器。
    • docker rm -v $(docker ps -aq -f status=exited):批量删除所有已经退出的容器。

本地 Registry

  • docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2:-d 是后台启动容器。-p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口。-v 将容器 /var/lib/registry 目录映射到 Host 的 /myregistry,用于存放镜像数据。
  • docker tag hanfei/httpd:1 ubuntu:5000/hanfei/httpd:1:repository 的完整格式为:[registry-host]:[port]/[username]/xxx。只有 Docker Hub 上的镜像可以省略 [registry-host]:[port] 。在 Docker 主机上,可以使用 hostname 命令查看主机的名称。

RUN vs CMD vs ENTRYPOINT

RUN

  • RUN 指令通常用于安装应用和软件包,构建镜像
  • RUN 有两种格式:
(1)Shell 格式:
RUN ["apt-get", "install", "python3"]  
(2)Exec 格式:
RUN apt-get install python3
RUN apt-get update && apt-get install -y \  bzr \cvs \git \mercurial \subversion

CMD

  • CMD 指令通常用于设置容器启动后默认执行的命令及其参数。
  • CMD 能够被 docker run 后面跟的命令行参数替换。如果 Dockerfile 中有多个 CMD 指令,只有最后一个 CMD 有效。
  • 推荐使用 Exec 格式,因为指令可读性更强,更容易理解。
(1)Exec 格式:
CMD ["executable","param1","param2"]
(2)CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式。
CMD ["world"]
(3)Shell 格式(不推荐)

ENTRYPOINT

  • ENTRYPOINT 配置容器启动时运行的命令。让容器以应用程序或者服务的形式运行。
  • ENTRYPOINT 看上去与 CMD 很像,它们都可以指定要执行的命令及其参数。不同的地方在于 ENTRYPOINT 不会被忽略,一定会被执行,即使运行 docker run 时指定了其他命令。
  • 推荐使用 Exec 格式,因为指令可读性更强,更容易理解。
(1)使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。
ENTRYPOINT ["/bin/echo", "Hello"]  
CMD ["world"]
(2)Shell 格式(不推荐)
ENTRYPOINT 的 Shell 格式会忽略任何 CMD 或 docker run 提供的参数。

限制容器对内存、CPU 和 IO 资源的使用

内存

docker run -m 200M --memory-swap=300M ubuntu # 容器最多使用 200M 内存和 100M swap。默认情况下,上面两组参数为-1,即对内存和swap使用没有限制。如果只指定-m不指定--memory-swap,那么--memory-swap 默认为-m的两倍。
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M  # 使用progrium/stress模拟系统资源压力:启动 1 个内存工作线程,每个线程分配 280M 内存,正常工作。

CPU

  • 通过 -c 或 --cpu-shares 设置容器使用 CPU 的权重。如果不指定,默认值为 1024。
  • 通过 -c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。换句话说:通过 cpu share 可以设置容器使用 CPU 的优先级。
  • 权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU。
docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu

Block IO

  • Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽。目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。
设置权重
  • 默认情况下,所有容器能平等地读写磁盘,可以通过设置 --blkio-weight 参数来改变容器 block IO 的优先级,设置的是相对权重值,默认为 500。
docker run -it --name container_A --blkio-weight 600 ubuntu   
docker run -it --name container_B --blkio-weight 300 ubuntu
bps 和 iops
  • bps 是 byte per second,每秒读写的数据量。
    iops 是 io per second,每秒 IO 的次数。
    • –device-read-bps,限制读某个设备的 bps。
    • –device-write-bps,限制写某个设备的 bps。
    • –device-read-iops,限制读某个设备的 iops。
    • –device-write-iops,限制写某个设备的 iops。
# 限制容器写 /dev/sda 的速率为 30 MB/s
docker run -it --device-write-bps /dev/sda:30MB ubuntu 
# 该命令通过直接I/O方式,使用dd工具从/dev/zero读取数据并生成一个800MB的文件(test.out),同时利用time命令测量整个过程的执行时间,以测试磁盘的写入性能。
time dd if=/dev/zero of=test.out bs=1M  count=800 oflag=direct

cgroup 和 namespace

  • cgroup 实现资源限额, namespace 实现资源隔离。

cgroup

  • cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。–cpu-shares、-m、–device-write-bps 实际上就是在配置 cgroup。
    • /sys/fs/cgroup/cpu/docker/容器长ID:目录中包含所有与 cpu 相关的 cgroup 配置。
    • /sys/fs/cgroup/memory/docker/容器长ID:目录中包含所有与 memory 相关的 cgroup 配置。
    • /sys/fs/cgroup/blkio/docker/容器长ID:目录中包含所有与 blkio 相关的 cgroup 配置。

namespac

  • 在每个容器中,我们都可以看到文件系统,网卡等资源,这些资源看上去是容器自己的。拿网卡来说,每个容器都会认为自己有一块独立的网卡,即使 host 上只有一块物理网卡。这种方式非常好,它使得容器更像一个独立的计算机。Linux 实现这种方式的技术是 namespace。namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace 实现了容器间资源的隔离。Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User。
Mount namespace
  • 容器有自己的 / 目录,可以执行 mount 和 umount 命令。当然我们知道这些操作只在当前容器中生效,不会影响到 host 和其他容器。
1.你插入了一个 U 盘,系统识别它为 /dev/sdb1。
2.你执行命令:
mount /dev/sdb1 /mnt
3.现在,你可以通过 /mnt 访问 U 盘里的文件了:
ls /mnt
4.当你用完 U 盘后,可以卸载它。这样,U 盘就“关门”了,/mnt 目录下不再显示 U 盘的内容:
umount /mnt
UTS namespace
  • 让容器有自己的 hostname。
  • UTS namespace 为每个Docker容器设置了一个独立的主机名和域名。这使得每个容器都能够被视为网络上的一个独立节点,从而简化了应用的访问和管理,并增强了应用之间的隔离性和安全性。
docker run -h/--hostname myhost -it ubuntu 
IPC namespace
  • IPC namespace 让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与 host 和其他容器的 IPC 混在一起。
PID namespace
  • 容器在 host 中以进程的形式运行。
  • 容器中进程的 PID 不同于 host 中对应进程的 PID,容器中 PID=1 的进程当然也不是 host 的 init 进程。也就是说:容器拥有自己独立的一套 PID,这就是 PID namespace 提供的功能。
ps axf # 查看容器进程。所有容器的进程都挂在 dockerd 进程下,同时也可以看到容器自己的子进程。 
docker exec -it container bash # 进入到某个容器,ps axf 查看自己的进程。
Network namespace
  • 容器拥有自己独立的网卡、IP、路由等资源。
User namespace
  • 让容器能够管理自己的用户,host 不能看到容器中创建的用户。

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

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

相关文章

Django 实现电影推荐系统:从搭建到功能完善(附源码)

前言:本文将详细介绍如何使用 Django 构建一个电影推荐系统,涵盖项目的搭建、数据库设计、视图函数编写、模板渲染以及用户认证等多个方面。🔗软件安装、环境准备 ❤ 【作者主页—📚阅读更多优质文章、获取更多优质源码】 目录 一…

C#进阶学习(七)常见的泛型数据结构类(2)HashSet和SortedSet

目录 using System.Collections.Generic; // 核心命名空间 一、 HashSet 核心特性 常用方法 属性 二、SortedSet 核心特性 1、整型(int、long 等) 2、字符串型(string) 3、字符型(char) 4、自定义…

SQL之DML(查询语句:select、where)

🎯 本文专栏:MySQL深入浅出 🚀 作者主页:小度爱学习 select查询语句 在开发中,查询语句是使用最多,也是CRUD中,复杂度最高的sql语句。 查询的语法结构 select *|字段1 [, 字段2 ……] from 表…

vue | 不同 vue 版本对复杂泛型的支持情况 · vue3.2 VS vue3.5

省流总结&#xff1a;defineProps 的泛型能力&#xff0c;来直接推导第三方组件的 props 类型 引入第三方库的类型&#xff0c;并直接在 <script setup> 中作为 props 使用。这种类型一般是复杂泛型&#xff08;包含联合类型、可选属性、交叉类型、条件类型等&#xff0…

Unity-无限滚动列表实现Timer时间管理实现

今天我们来做一个UI里经常做的东西&#xff1a;无限滚动列表。 首先我们得写清楚实现的基本思路&#xff1a; 所谓的无限滚动当然不是真的无限滚动&#xff0c;我们只要把离开列表的框再丢到列表的后面就行&#xff0c;核心理念和对象池是类似的。 我们来一点一点实现&#x…

Docker的基本概念和一些运用场景

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员更加高效地打包、发布和运行应用程序。以下是 Docker 的基本概念和优势&#xff1a; 基本概念&#xff1a; 容器&#xff1a;Docker 使用容器来打包应用程序及其依赖项&#xff0c;容器是一个独立且可移植的运行环境…

Unity中基于第三方插件扩展的对于文件流处理的工具脚本

在Unity的项目中对应文件处理,在很多地方用到,常见的功能,就是保存文件,加载文件,判断文件或者文件夹是否存在,删除文件等。 在之前已经写过通过C#的IO实现的这些功能,可查看《Unity C# 使用IO流对文件的常用操作》,但是不能保证所有平台都可以使用 现在基于第三方跨…

Flink介绍——实时计算核心论文之MillWheel论文详解

引入 通过前面的文章&#xff0c;我们从S4到Storm&#xff0c;再到Storm结合Kafka成为当时的实时处理最佳实践&#xff1a; S4论文详解S4论文总结Storm论文详解Storm论文总结Kafka论文详解Kafka论文总结 然而KafkaStorm的第一代流式数据处理组合&#xff0c;还面临的三个核心…

python异步协程async调用过程图解

1.背景&#xff1a; 项目中有用到协程&#xff0c;但是对于协程&#xff0c;线程&#xff0c;进程的区别还不是特别了解&#xff0c;所以用图示的方式画了出来&#xff0c;用于理清三者的概念。 2.概念理解&#xff1a; 2.1协程&#xff0c;线程&#xff0c;进程包含关系 一…

【React】获取元素距离页面顶部的距离

文章目录 代码实现 代码实现 import { useEffect, useRef, useState } from react;const DynamicPositionTracker () > {const [distance, setDistance] useState(0);const divRef useRef(null);useEffect(() > {const targetDiv divRef.current;if (!targetDiv) re…

26.OpenCV形态学操作

OpenCV形态学操作 形态学操作&#xff08;Morphological Operations&#xff09;源自二值图像处理&#xff0c;主要用于分析和处理图像中的结构元素&#xff0c;对图像进行去噪、提取边缘、分割等预处理步骤。OpenCV库中提供了丰富的形态学函数&#xff0c;常见的包括&#xf…

逻辑回归:损失和正则化技术的深入研究

逻辑回归&#xff1a;损失和正则化技术的深入研究 引言 逻辑回归是一种广泛应用于分类问题的统计模型&#xff0c;尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归"&#xff0c;但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添…

大模型面经 | 介绍一下CLIP和BLIP

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…

【MCP】第二篇:IDE革命——用MCP构建下一代智能工具链

【MCP】第二篇&#xff1a;IDE革命——用MCP构建下一代智能工具链 一、引言二、IDE集成MCP2.1 VSCode2.1.1 安装VSCode2.1.2 安装Cline2.1.3 配置Cline2.1.4 环境准备2.1.5 安装MCP服务器2.1.5.1 自动安装2.1.5.2 手动安装 2.2 Trae CN2.2.1 安装Trae CN2.2.2 Cline使用2.2.3 内…

【新能源科学与技术】MATALB/Simulink小白教程(一)实验文档【新能源电力转换与控制仿真】

DP读书&#xff1a;新能源科学与工程——专业课「新能源发电系统」 2025a 版本 MATLAB下面进入正题 仿真一&#xff1a;Buck 电路一、仿真目的二、仿真内容&#xff08;一&#xff09;Buck电路基本构成及工作原理&#xff08;二&#xff09;Buck电路仿真模型及元件连接&#xf…

BootStrap:首页排版(其一)

今天我要介绍的是在BootStrap中有关于首页排版的内容知识点&#xff0c;即&#xff08;模态框&#xff0c;选项卡&#xff09;。 模态框&#xff1a; 模态框经过了优化&#xff0c;更加灵活&#xff0c;以弹出对话框的形式出现&#xff0c;具有最小和最实用的功能集。 在运行…

Spring Data

目录 一、Spring Data 简介与生态概览 什么是 Spring Data&#xff1f; Spring Data 与 Spring Data JPA 的关系 Spring Data 家族&#xff1a;JPA、MongoDB、Redis、Elasticsearch、JDBC、R2DBC…… 与 MyBatis 的本质差异&#xff08;ORM vs SQL 显式控制&#xff09; 二…

建筑末端配电回路用电安全解决方案

一、电气火灾的严峻现状 根据国家应急管理部消防救援局的数据&#xff0c;电气火灾长期占据各类火灾原因之首&#xff0c;2021年占比高达50.4%。其中&#xff0c;末端配电回路因保护不足、监测手段落后&#xff0c;成为火灾高发隐患点。私拉电线、线路老化、接触不良、过载等问…

华为开发岗暑期实习笔试(2025年4月16日)

刷题小记&#xff1a; 第一题怀疑测试样例不完整&#xff0c;贪心法不应该能够解决该题。第二题使用0-1BFS解决单源最短路径的问题&#xff0c;往往搭配双端队列实现。第三题是运用动态规划解决最大不重叠子区间个数的问题&#xff0c;难点在于满足3重判断规则&#xff0c;所需…

Rust: 从内存地址信息看内存布局

内存布局其实有几个&#xff1a;address&#xff08;地址&#xff09;、size&#xff08;大小&#xff09;、alignment&#xff08;对齐位数&#xff0c;2 的自然数次幂&#xff0c;2&#xff0c;4&#xff0c;8…&#xff09;。 今天主要从address来看内存的布局。 说明&…