news 2026/2/5 21:05:53

docker容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker容器

docker-容器

文章目录

  • docker-容器
    • 运行容器
    • 进入容器
    • 容器用途分类
    • 运行容器
    • 常用操作
    • 限制容器对内存的使用
    • 限制容器对CPU的使用
    • 容器导出导入
      • docker save 和 docker export 对比
    • 实现容器的底层技术
      • cgroup
      • namespace

运行容器

docker run=docker create + docker start

可用三种方式指定容器启动时 执行的命令

  1. CMD 指令。
  2. ENTRYPOINT 指令。
  3. 在 docker run 命令行中指定。
#使用ubuntu镜像创建容器[root@docker ~]# docker create ubuntueb1aa0ca86b2d49250ebe64913af50e88482ad68b9c3e61ef8f8da9c24b00f7a#create的容器状态时Created[root@docker ~]# docker ps -a[root@docker ~]# docker start eb1aa0ca86b2#查看容器状态,启动了又退出了[root@docker ~]# docker ps -a#使用ubuntu镜像创建容器并执行pwd命令[root@docker ~]# docker run ubuntu pwd /#查看所有正在运行中的容器[root@docker ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES# -a 看全部#让容器保存运行[root@docker ~]# docker run ubuntu /bin/bash -c "while true ; do sleep 1 ; echo hahaha; done"# -d 后台运行[root@docker ~]# docker run -d ubuntu /bin/bash -c "while true ; do sleep 1 ; echo hahaha; done"

进入容器

#attach[root@docker ~]# docker run -d ubuntu /bin/bash -c "while true ; do sleep 1 ; echo I_am_in_container ; done"[root@docker ~]# docker attach dc508b94447f83b46080267580607569a187fcc7f780433f646e9d66949731a6I_am_in_container I_am_in_container I_am_in_container I_am_in_container#exec#格式:docker exec -it <container> bash|sh[root@docker ~]# docker exec -it dc508 bash#查看启动命令的输出[root@docker ~]# docker logs -f dc508b94447f

容器用途分类

  1. 服务类容器以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d 以后 台方式启动这类容器是非常合适的。如果要排查问题,可以通过 exec -it 进入容器。
  2. 工具类容器:通常给能我们提供一个临时的工作环境,通常以 run -it 方式运行。

运行容器

[root@docker ~]# docker run -it busybox/#/# wget www.baidu.comConnecting to www.baidu.com(223.109.82.6:80)saving to'index.html'index.html100%|********************|23810:00:00 ETA'index.html'saved /#/# exit[root@docker ~]#

常用操作

stop/start/restart

  1. stop:容器在 docker host 中实际上是一个进程, docker stop 命令本质上是向该进程发送一个 SIGTERM 信 号。如果想快速停止容器,可使用 docker kill 命令,其作用是向容器进程发送 SIGKILL 信号。
  2. 对于处于停止状态的容器,可以通过 docker start 重新启动。会保留容器的第一次启动时的所有参数。
  3. docker restart 可以重启容器,其作用就是依次执行 docker stop 和 docker start 。容器可能会因某种错误而停止运行。对于服务类容器,我们通常希望在这种情况下容器能够自动重启。 启动容器时设置 --restart 就可以达到这个效果。 如果docker run -d httpd不加–restart=always参数,attach进去ctrl+c不会重启。
  4. 只有当容器的启动进程 退出 时, --restart 才生效。
  5. 有时我们只是希望暂时让容器暂停工作一段时间,比如要对容器的文件系统打个快照,或者 dcoker host 需要使用 CPU,这时可以执行 docker pause 。
  6. 处于暂停状态的容器不会占用 CPU 资源,直到通过 docker unpause 恢复运行。
#举例#基于httpd镜像创建容器httpd11,重启策略配置为always[root@docker ~]# docker run -d --restart=always --name httpd11 httpd7671267fabf6aafe49fe74256af8d0af07cd65e4af4222933385f3203bc0228e#查看发现多了个httpd11容器[root@docker ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7671267fabf6 httpd"httpd-foreground"3seconds ago Up2seconds80/tcp`httpd11`27359e7cf87e httpd"httpd-foreground"About a minute ago Up About a minute80/tcp eager_northcutt#登陆到容器httpd11,然后执行ctrl_c退出容器(会触发--restart=always参数)[root@docker ~]# docker attach httpd11^C[Mon Nov1707:48:31.5827312025][mpm_event:notice][pid1:tid1]AH00491: caught SIGTERM, shutting down#发现httpd11重启了[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7671267fabf6 httpd"httpd-foreground"32seconds ago Up2seconds80/tcp httpd11 27359e7cf87e httpd"httpd-foreground"2minutes ago Up About a minute80/tcp eager_northcutt#管理员停止httpd11(不会触发重启)[root@docker ~]# docker stop httpd11httpd11#发现httpd11没有重启[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7671267fabf6 httpd"httpd-foreground"51seconds ago Exited(0)1second ago httpd11 27359e7cf87e httpd"httpd-foreground"2minutes ago Up2minutes80/tcp eager_northcutt

限制容器对内存的使用

cgroup( Control Groups):docker 通过 cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的 资源配额和使用量控制。

#stress模拟压力测试的工具[root@docker dockerfile]# vim DockerfileFROM ubuntu MAINTAINER xxx"123@qq.com"RUNapt-get-y update&&apt-get-yinstallstress ENTRYPOINT["/usr/bin/stress"]# 以服务或进程的形式运行[root@docker ~]# docker build -t ubuntu-with-stress .[root@docker ~]# docker run -it -m 200M --memory-swap=300M ubuntu-with-stress --vm 1 --vm-bytes 280M -v#如果在启动容器时只指定 -m 而不指定 --memory-swap ,那么 --memory-swap 默认为 -m 的两倍。

限制容器对CPU的使用

Docker 可以通过 -c 或 --cpu-shares 设置容器使用 CPU 的权重。如果不指定,默认值为 1024。

[root@docker ~]# docker run --name "container_A" -it -c 1024 ubuntu-withstress --cpu 4 -v#使用如下命令,创建容器,则最终生成的 cgroup 的 CPU 份额配置可以下面的文件中找到。[root@docker ~]# cat /sys/fs/cgroup/cpu/docker/<容器长ID>/cpu.shares1024#再开一个窗口,启动 container_B,cpu share 为 512[root@docker ~]# docker run --name "container_B" -it -c 512 ubuntu-withstress --cpu 4 -v[root@docker ~]# cat /sys/fs/cgroup/cpu/docker/<容器长ID>/cpu.shares512#top命令查看总比例是2:1#或者再开一个窗口看cpu使用率[root@docker docker]# docker stats#现在暂停 container_A观察cpu[root@docker ~]# docker pause container_A#top 显示 container_B 在 container_A 空闲的情况下能够用满整颗 CPU

容器导出导入

#将容器导出为一个tar包#不管此时这个容器是否处于运行状态,都可以导出为文件# 创建容器httpd1用于测试[root@docker ~]# docker run -d --name httpd1 httpde4f0a329c4df50ef0afb0bf21e22edc20e5a24c03ae64c6340aa2992d6e32525[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e4f0a329c4df httpd"httpd-foreground"3minutes ago Up3minutes80/tcp httpd1[root@docker ~]# docker export httpd1 -o myhttpd.tar[root@docker ~]# lsmyhttpd.tar[root@docker ~]# docker import myhttpd.tarsha256:9ae4699fa217a7240c73a50e93a8c1d359d22cf60869d350c8aab8b3c02aabcf[root@docker ~]# docker import myhttpd.tar myweb:v1sha256:9fcb90561d2014130ef19f9dd8af5efd7a0a4a2154907bc818ac6b887f13755c[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE myweb v1 9fcb90561d203seconds ago 146MB<none><none>9ae4699fa21732seconds ago 146MB httpd latest 90f191b9781e11days ago 148MB hello-world latest 74cc54e27dc46months ago10.1kB

docker save 和 docker export 对比

  • docker save :将镜像保存为文件,save会保存该镜像的所有元数据和历史记录。
  • docker export :将容器导出为文件,文件会丢失所有元数据和历史记录,仅保存容器当时的状 态,再次导入会当作全新的镜像。
  • docker save导出的文件可以使用docker import导入。

实现容器的底层技术

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

cgroup

#在 /sys/fs/cgroup 中找到cgroup[root@docker docker]# docker run -it --cpu-shares 512 ubuntu-with-stress -c 1 -v#在 /sys/fs/cgroup/cpu/docker 目录中,Linux 会为每个容器创建一个 cgroup 目录,以容器长ID 命名。

namespace

#UTS namespace 让容器有自己的 hostname, -h简写#User namespace 让容器能够管理自己的用户,host 不能看到容器中创建的用户。[root@docker ~]# docker exec -it a80f1f8b692c bashroot@a80f1f8b692c:/#root@a80f1f8b692c:/# useradd gaoqd #容器中创建用户gaoqdroot@a80f1f8b692c:/#root@a80f1f8b692c:/# exitexit[root@docker ~]# su - gaoqd #宿主机中并没有用户gaoqdsu: user gaoqd does not exist#在容器中创建了用户 gaoqd,但 host 中并不会创建相应的用户。

92c bash
root@a80f1f8b692c:/#
root@a80f1f8b692c:/# useradd gaoqd #容器中创建用户gaoqd
root@a80f1f8b692c:/#
root@a80f1f8b692c:/# exit
exit
[root@docker ~]# su - gaoqd #宿主机中并没有用户gaoqd
su: user gaoqd does not exist
#在容器中创建了用户 gaoqd,但 host 中并不会创建相应的用户。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 5:27:14

快速优化Mac鼠标滚动:完整平滑体验指南

快速优化Mac鼠标滚动&#xff1a;完整平滑体验指南 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for your mouse …

作者头像 李华
网站建设 2026/2/4 7:30:49

Qwen All-in-One性能对比:与传统多模型方案的优劣分析

Qwen All-in-One性能对比&#xff1a;与传统多模型方案的优劣分析 1. 背景与问题提出 在当前AI应用快速落地的背景下&#xff0c;边缘设备和低资源环境下的模型部署成为工程实践中的关键挑战。尤其是在缺乏GPU支持的CPU服务器或本地终端上&#xff0c;如何在有限算力下实现多…

作者头像 李华
网站建设 2026/2/4 11:06:37

提示工程架构师前沿实践:用动态prompt适应用户需求变化的创新案例

提示工程架构师前沿实践&#xff1a;用动态Prompt适应用户需求变化的创新案例 引言&#xff1a;静态Prompt的“刻舟求剑”困境 作为一名提示工程架构师&#xff0c;我曾遇到过这样的真实场景&#xff1a; 某头部电商平台的智能客服系统&#xff0c;初期用静态Prompt覆盖了“退货…

作者头像 李华
网站建设 2026/2/4 5:52:52

STM32定时器控制LED灯亮度深度剖析

STM32定时器驱动LED调光&#xff1a;从原理到实战的硬核指南 你有没有遇到过这样的场景&#xff1f;想让一块开发板上的LED灯“呼吸”起来&#xff0c;结果用软件延时写了个闪烁程序&#xff0c;灯光生硬得像故障报警&#xff1b;或者调节亮度时&#xff0c;低档位根本看不出变…

作者头像 李华
网站建设 2026/2/5 5:28:50

KK-HF_Patch终极指南:快速解锁恋活游戏完整体验

KK-HF_Patch终极指南&#xff1a;快速解锁恋活游戏完整体验 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 还在为Koikatu游戏的语言障碍和功能限…

作者头像 李华
网站建设 2026/2/4 9:28:04

Qwen3-0.6B性能优化指南,让推理更快一步

Qwen3-0.6B性能优化指南&#xff0c;让推理更快一步 1. 概述 在大语言模型&#xff08;Large Language Model, LLM&#xff09;的实际部署中&#xff0c;性能优化是决定用户体验和系统效率的核心因素。Qwen3-0.6B作为通义千问系列中轻量级的密集模型&#xff0c;具备低延迟、…

作者头像 李华