Docker 简介

news/2024/11/15 1:28:09/文章来源:https://www.cnblogs.com/solicit/p/18395632

首先说明一些特性:一个容器中只有一个主进程,遵循单一原则,否则一个容器挂了会导致多个进程挂掉;容器其实就是一个进程,docker可以管理这些进程。docker能够进行容器隔离,我们操作的其实是docker客户端,而不是server端。

docker info # 查看docker信息

docker基本概念

docker客户端可以操作本地服务器,也可以操纵远程服务器。服务器再去访问注册中心。注册中心有多个镜像仓库,也可以搭建私有镜像仓库。

  • 镜像:用于创建docker容器的模板

  • 容器:镜像运行的实体,独立运行的一个或多个应用

  • docker machine: 一个简化docker命令行安装的工具,通过一个简单的命令行即可运行。

docker解决的问题:本地环境和生产环境不一致的问题,方便应用快速迁移;应用程序资源使用问题;快速扩展、快速伸缩。容器技术严格上并不是虚拟化,没有客户机操作系统,是共享内核的。

直观感受client请求server

sudo apt install socat
# -v 提高可读性,unix-listen让socket在一个unix套接字上监听,unix-connect让socat连接到docker的unix套接字
socat -v UNIX-LISTEN:/tmp/dockerapi.sock UNIX-CONNECT:/var/run/docker.sock &
docker -H unix:///tmp/dockerapi.sock ps

docker容器隔离机制

Linux命名空间

namespace用来是内核用来隔离资源的方式,linux实现了六种不同类型的命名空间。

# fork新的进程,拥有新的命名空间
unshare --fork -m -u -i -n -p -U -C sleep 100
# 查看所有命名空间
lsn --output-all

容器进程命名空间

查看容器进程命名列表

# 启动一个nginx容器
docker run -d --name xsnginx nginx
# pull iamges完成之后
docker images ls # 显示当前安装的镜像
# 获取nginx主进程ID
docker top xsnginx
# 使用主进程ID查看其命名空间
sudo lsns -p <pid> --outpuy-all

可以看到命名空间维持在进程id下。

容器进程命名空间的体现

# 开启容器命名空间的配置
sudo vim /etc/docker/daemon.json
"userns-remap" : "default" # 或者使用"userns-remap" : "user:group"
sudo systemctl restart docker.service 
# 查看docker生成的默认用户配置
cat /etc/subuid # 表示宿主机使用dockremap用户,容器使用从属ID,范围为0~65536,与之对应的宿主机ID范围为165536~165536+65536

id <user>
# 运行容器,指定私有cgroupsn,指定user
docker run -d --cgroupns private --user root --name mynginx1 nginx
# 重启容器
docker restart mynginx1
# 以伪终端模式运行一个bash shell -i交互模式运行,-t伪终端
docker exec -it mynginx1 bash

宿主机内查看容器命名空间

容器内查看命名空间

明显可以看出的是,容器有自己的私有命名空间。

UTS命名空间:启动新容器,设置hostname与domain

// -d 指明后台运行容器
docker run -d --domainname abc.nick.com --hostname abcdefg --userns host --name mynginx2 nginx# 进入交互界面
docker exec -it mynginx2 bash
# 查看主机名和域名
hostname
domainname
# 通过hostname和domainname访问应用
curl http://abcdefg
curl http://abcdefg.abc.nick.com
# 通过文件查看hostname和domainname
cat /proc/sys/kernel/hostname
cat /proc/sys/kernel/domainname

容器网络信息

# 运行一个工具容器
docker run -dit --name mycurl radial/busyboxplus:curl
docker exec -it mycurl sh
# mount命名空间
mount
# 网络信息
ifconfig

容器里查看

宿主机查看网络信息

容器控制组cgroup

cgroups全称是control groups,整合在了linux内核当中,把进程放到组中,对组设置权限,对进程进行控制

linux调度方式

  • CFS完全公平调度,在cgropus间按比例分配CPU时间
  • RT实时调度,对实时任务使用cpu时间限制

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

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

相关文章

阿里重磅开源Qwen2-VL:超越人类的视觉理解能力,从医学影像到手写识别,这款开源多模态大模型究竟有多强?(附本地化部署教程)

阿里重磅开源Qwen2-VL:超越人类的视觉理解能力,从医学影像到手写识别,这款开源多模态大模型究竟有多强?(附本地化部署教程)模型介绍 最近呢,阿里巴巴开源了Qwen2-VL,在多模态大模型展现了在实际应用中的巨大潜力,尤其是在处理跨模态数据方面表现出众。以下是该模型的几…

2024 秋季PAT认证甲级(题解A1-A4)

2024 秋季PAT认证甲级(题解A-D) 写在前面 这一次PAT甲级应该是最近几次最简单的一次了,3个小时的比赛差不多30分钟就ak了(也是拿下了整场比赛的rk1),下面是题解报告,每个题目差不多都是20-30行代码,难度在洛谷普及组左右(cf 1000-1200分)A. A-1 Happy Patting 题目描述…

安装远程软件

1.进入raylink官网点击立即下载【https://www.raylink.live/download.html】2.下载好后双击安装3.安装完成后打开raylink

Hyper-V 安装 Centos

Author: ACatSmiling Since: 2024-09-02CentOS 安装 ISO 镜像下载官方网站:https://www.centos.org/目前,最新版本为 CentOS Stream 9:本文以 CentOS 7 为例,下载页拉到下面,选择旧版本安装。Older Versions Legacy versions of CentOS are no longer supported. For hist…

使用zig语言制作简单博客网站(八)归档页和关于页

后端代码注册路由// 归档文章router.get("/api/article/archive", &articleController.getArchiveArticles);model/article.zig增加以下代码/// 用于存放归档文章信息 pub const ArchiveArticle = struct {id: u32,title: []const u8,cate_name: []const u8,crea…

多线程、任务、异步的区别

Task和Thread的区别 这是一个高频,深刻的问题,无论去哪都逃不过被询问这个问题。Task是基于Thread的,这是众所周知的。但是Task和Thread的联系如此简单和纯粹确实我没想到的。甚至只需要几十行代码就能呈现其原理。一个简单的模拟实例说明Task及其调度问题,这真是一篇好文章…

UART

UART协议帧在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成。起始位当不传输数据时, UART 数据传输线通常保持高电压电平。若要开始数据传输,发送UART 会将传输线从高电平拉到低电平并保持1 个时钟周期。当接收 UART 检测到高到低电压跃迁…

电路分析 ---- 加法器

1 同相加法器分析过程虚短:\(u_{+}=u_{-}=\cfrac{R_{G}}{R_{G}+R_{F}}u_{O}\) \(i_{1}=\cfrac{u_{I1}-u_{+}}{R_{1}}\);\(i_{2}=\cfrac{u_{I2}-u_{+}}{R_{2}}\);\(i_{3}=\cfrac{u_{I3}-u_{+}}{R_{3}}\);且有\(i_{1}+i_{2}+i_{3}=0\). 所以得到\(\cfrac{u_{I1}}{R_{1}}+\cfr…

docker 配置elasticSearch

1、拉取elasticSearch容器 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.0 2、运行容器并且与物理机映射端口(9200,物理机器) 9300(容器端口) docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node&quo…

mini-lsm通关笔记Week1Day7

Summary在上一章中,您已经构建了一个具有get/scan/put支持的存储引擎。在本周末,我们将实现SST存储格式的一些简单但重要的优化。欢迎来到Mini-LSM的第1周零食时间! 在本章中,您将:在SST上实现布隆过滤器,并集成到LSM读路径get中。 以SST块格式实现对key存储的压缩。要将…

记一次我的博客园页面突然无法显示markdown数学公式

记一次我的博客园页面突然无法显示markdown数学公式,之前都还好好的,今天突然给我数学公式卡没了......之前都还好好的,今天突然给我数学公式卡没了......具体情况如下但是我编辑的时候预览明明可以摘要里显示也没有问题给官方写了封邮件后得到回复如下 您好,我们这边测试一…

RRAM流片调试心得

RRAM流片调试心得 去年进行了一次RRAM的流片工作,也是人生第一次流片,一些工作细节不便涉及,但是可以谈谈这次流片以及后续测试中碰到的问题,以便后续查阅。 芯片于UMC完成180nm的CMOS前道工艺,共生长5层金属(到V5),随后出Fab,送到所里生长RRAM和M6完成后道工艺,版图…