docker day04

2023-11-14

Dockerfile:
    - FORM:
        1.指定基础镜像,可以起别名,也可以指定多个FROM指令,用于多阶段构建;
        2.加载触发器,加载ONBUILD指令;
        3.不指定基础镜像,声明当前镜像不依赖任何镜像,官方保留字: scratch
        
    - RUN:
        1.在容器中运行命令,同一个Dockerfile中可以有多个RUN指令并不会被覆盖;
        
    - COPY:
        1.将宿主机的相对路径文件拷贝到容器中;
        2.用于多阶段构建,使用--from参数指定源阶段(编号,别名等);
        3.可以指定文件的属主和属组;
        
    - ADD:
        1.用于拷贝相对路径文件到容器中;
        2.如果源文件是tar包,会自动解压该文件;
        
    - CMD:
        1.指定容器启动的默认COMMAND;
        2.还可以和ENTRYPOINT搭配使用,作为ENTRYPOINT的参数传递;
        3.若用户启动容器时,指定的COMMAND则会覆盖CMD的指令;
        4.如果用户没有指定COMMAND且镜像也没有定义CMD则使用基础镜像的CMD指令;
        
    - ENTRYPOINT:
        1.指定容器启动的默认COMMAND
        2.还可以和CMD搭配使用,CMD将作为ENTRYPOINT的参数传递;

    - EXPOSE:
        1.暴露容器端口,多用于随机端口暴露,可以提醒用户该容器里面有哪些端口服务;
        2.端口是可以暴露多个的,比如说ftp:20,21,dns:53/udp,53/tcp,ES:9200,9300
        
    - VOLUME:
        1.对容器的路径做持久化存储,容器启动时,会创建匿名存储卷(随机存储卷);
        
    - WORKDIR:
        1.指定工作目录,当用户连接容器时默认的所在目录。
        
    - LABEL:
        打标签 
        
    - MAINTAINER:
        声明作者信息。
        
    - ENV:
        传递环境变量。
        
    - USER:
        指定服务的运行用户。
        
    - ONBUILD:
        指定基础镜像触发器。
        
    - HEALTHCHECK:
        健康检查。


Q1: "VOLUME"能否指定一个有名称的存储卷?
    暂时不支持自定义存储卷的名称.
    
    请问若官方支持自定义名称有什么缺陷? 
        这意味基于该镜像启动的容器,都使用同一个自定义名称的存储卷。请问你这样做的目的是啥?
        
Q2: 向容器传递参数有多少种方法,请尽可能多的说?
    1.Dockerfile ---> ENV
    2.COMMAND ---> ARGS
    3.-e,--env 
    4.ENTRYPOINT + CMD
    5.基础镜像---> 父镜像自带的变量
    
Q3:请问容器的内核和宿主机的内核有啥关系?换句话说,将centos环境的镜像迁移到Ubuntu环境的镜像,分别启动容器,看到的内核版本是否相同?
    不同,因为容器使用和宿主机相同的内核。
    
Q4: 虚拟机和容器有啥区别?请简要说明?
    虚拟机:
        1.虚拟的内核,效率低
        2.完全虚拟化,隔离性强
        3.占用资源多
        4.维护起来比较麻烦,启动速度慢,存在开机自启动流程;
        5.移植性差,对操作系统和软件版本依赖较高;
        6.虚拟机的镜像大,GB+
        7.不依赖于内核,可以虚拟任何操作系统;
        
    容器:
        1.使用宿主机的内容,效率高
        2.进程虚拟化,隔离性弱
        3.占用资源小
        4.维护起来简单,启动速度快,不存在开机自启动流程;
        5.移植性强,对操作系统和软件版本依赖较低;
        6.容器较小,KB+
        7.依赖LINUX内核,只能虚拟Linux发行版本的系统;
        
Q5:为什么容器只能虚拟Linux发行版本的系统,容器能否实现资源隔离和资源限制?底层使用了什么技术?
    容器使用到了LINUX的chroot,namespace,cgroup,overlay2;


dockerfile优化:
    编译镜像的速度:
        - ".dockerignore"文件忽略不必要文件;
        - "替换软件源仓库"从而提高下载的速度; 
        - 尽量合并指令,减少编译过程中,中间容器,镜像的产生;
        - 将不经常修改的Dockerfile指令靠前写,这样做的目的是充分利用缓存;
    
    镜像体积大小:
        - 删除缓存
        - 使用多阶段构建,只拷贝有用的软件
        - 卸载无用的软件包,比如编译安装后的编译器,下载的软件包等都可以被卸载哟;
        - 使用较小的基础镜像
            centos: 495MB
            ubuntu: 360MB
            alpine: 190MB

2007年前后,Linux内核支持Cgroup和NameSpace技术,这两种技术在增加对Linux的整体控制的同时,也成为了保持环境隔离的重要框架。

Linux Namespace是Linux系统提供的一种资源隔离机制,可实现系统资源隔离的列表如下:
    IPC:
        用于隔离进程间通信。
    MNT:
        用于隔离文件系统和提供硬盘挂载点。
    NET:
        用于隔离网络。
    PID:
        用于隔离进程ID。
    User:
        用于隔离用户和用户组。
    UTS:
        用于隔离HostName和DomianName。

NET网络名称空间测试案例:
    (1)创建一个名称为"oldboyedu-linux"的网络名称空间
ip netns add oldboyedu-linux
ll /var/run/netns/oldboyedu-linux 
ip netns exec oldboyedu-linux ip a

    (2)启动"oldboyedu-linux"的网络名称空间的网卡
ip netns exec oldboyedu-linux ping 127.0.0.1  # 未启动网卡,无法ping通自己。
ip netns exec oldboyedu-linux ifconfig lo up
ip netns exec oldboyedu-linux ping 127.0.0.1
    
    (3)宿主机创建网络设备对
ip link add veth100 type veth peer name veth200
ip a   # 会多出来2块网卡,即veth100,veth200。

    (4)将"veth200"设备关联到咱们自定义的"oldboyedu-linux"网络名称空间
ip link set veth200 netns oldboyedu-linux
ip a  # 你会发现宿主机的veth200不见啦!

    (5)将"veth200"设备配置IP地址
ip netns exec oldboyedu-linux ip a
ip netns exec oldboyedu-linux ifconfig veth200 172.31.100.200/24 up
ip netns exec oldboyedu-linux ip a

    (6)宿主机veth100也配置IP地址
ifconfig veth100 172.31.100.100/24 up
ifconfig veth100
ping 172.31.100.200

    (7)oldboyedu-linux"的网络名称空间ping宿主机的IP地址
ip netns exec oldboyedu-linux ping 172.31.100.100
ip netns exec oldboyedu-linux ping 10.0.0.102  # 未添加网关,无法跨网段ping通
ip netns exec oldboyedu-linux route add default gw 172.31.100.100  # 配置默认网关
ip netns exec oldboyedu-linux ping 10.0.0.102  # Duang~可以ping通啦!
ip netns exec oldboyedu-linux ping baidu.com  # 无法访问外网,这是正常的!此处建议pingIP地址,域名解析需要DNS。
tcpdump -i veth100 -nn icmp  # 宿主机可以抓取到数据报文。
ip netns exec oldboyedu-linux iptables -vnL -t nat  # 如果想要连接外网,可以尝试手动配置NAT。

    (8)测试完成后,删除名称空间
ll /var/run/netns/   # 可以先查看挂载点文件是否存在
ip netns del oldboyedu-linux  # 删除名称空间
ll /var/run/netns/
ip link del veth100    # 删除宿主机的虚拟网卡


Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。

这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。

在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展。

如上图所示,在Linux系统中能够控制的资源列表如下:
    cpu:
        主要限制进程的cpu使用率。
    cpuacct:
        可以统计cgroups中的进程的cpu使用报告。
    cpuset:
        可以为cgroups中的进程分配单独的cpu节点或者内存节点。
    memory:
        可以限制进程的memory使用量。
    blkio:
        可以限制进程的块设备io。
    devices:
        可以控制进程能够访问某些设备。
    net_cls:
        可以标记cgroups中进程的网络数据包,然后可以使用tc模块(traffic control)对数据包进行控制。
    net_prio:
        这个子系统用来设计网络流量的优先级
    freezer:
        可以挂起或者恢复cgroups中的进程。
    ns:
        可以使不同cgroups下面的进程使用不同的namespace
    hugetlb:
        这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。
        

CPU资源限制案例:
    (1)如上图所示,可以查看Cgroup类型
mount -t cgroup

    (2)进入到CPU的挂载路径,并创建自定义的资源限制组。
cd /sys/fs/cgroup/cpu && mkdir oldboyedu-linux && ls oldboyedu-linux 

    (3)使用stress压力测试
yum -y install epel-release
yum -y install stress
stress -c 4 -v -t 20m  # 压力测试20分钟,启动4个worker进程的CPU压测。如下图所示,4个cpu瞬间打满100%。

    (4)限制CPU的使用率在30%
cd /sys/fs/cgroup/cpu/oldboyedu-linux && echo 30000 > cpu.cfs_quota_us

    (5)将任务的ID加入自定义限制组。
# ps -ef | grep stress | grep -v grep
root      9862  4432  0 11:57 pts/1    00:00:00 stress -c 4 -v -t 10m
root      9863  9862 99 11:57 pts/1    00:06:29 stress -c 4 -v -t 10m
root      9864  9862 99 11:57 pts/1    00:06:29 stress -c 4 -v -t 10m
root      9865  9862 99 11:57 pts/1    00:06:29 stress -c 4 -v -t 10m
root      9866  9862 99 11:57 pts/1    00:06:29 stress -c 4 -v -t 10m

# cd /sys/fs/cgroup/cpu/oldboyedu-linux  # 进入到咱们自定义的限制组,分别加入限制的进程ID
echo 9862 >> tasks    # 建议加入后,立刻查看top的信息,最好执行一个看一个效果。
echo 9863 >> tasks   
echo 9864 >> tasks   
echo 9865 >> tasks   
echo 9866 >> tasks   

bridge:
    默认类型,桥接到宿主机docker0的网络,有点类似于VM虚拟机的NAT网络模型。
    案例:
        docker run --rm -it --network bridge --name oldboyedu-linux alpine
         
host:
    host类型,共享宿主机的网络空间,网络性能是最高的。
    案例:
        docker run --rm -it --network host --name oldboyedu-linux alpine

none:
    只有本地回环网卡,没有其他网络,即该容器不能上网。
    案例:
        docker run --rm -it --network none --name oldboyedu-linux alpine
        
container:
    共享其他容器的网络,这个网络在K8S中Pod是频繁使用的。
    案例:
        docker run --rm -it --network container:web01 --name oldboyedu-linux alpine

custom network:
    自定义网络,我们可以使用"docker network create"创建自定义网络。
    


docker network ls
    列出当前主机的网络列表。
    
docker network create -d bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 --ip-range 192.168.100.100/28 oldboyedu-linux
    创建自定义网络,常用的选项如下:
        -d 
            指定网络驱动,默认是bridge,也支持"ipvlan","macvlan","overlay"。
        --subnet 
            指定子网地址。
        --gateway
            指定网关地址。
        --ip-range
            指定容器的分配到子网地址。

docker network inspect oldboyedu-linux
    查看网络的详细信息,当然也支持Go模板语法,如下所示:
        docker network inspect -f '{{range .IPAM.Config}}{{.Gateway}}{{end}}' oldboyedu-linux
        docker network inspect -f '{{range .IPAM.Config}}{{.Subnet}}{{end}}' oldboyedu-linux
        docker network inspect -f '{{range .IPAM.Config}}{{.IPRange}}{{end}}' oldboyedu-linux    
    
docker network rm oldboyedu-linux
    删除指定的网络。
    
docker network connect bridge web
    将brige网络连接到web容器中。
    
docker network disconnect bridge web    
    将brige网络连接从web容器中断开。
    
docker network prune -f
    移除所有未使用的网络。

docker container run -id  --network oldboyedu-linux --name web alpine
    启动容器时使用咱们自定义的网络。
    
    
    
    
(1)创建网络名称空间
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

(2)启动mysql服务
docker run --name mysql-server -t \
             -e MYSQL_DATABASE="zabbix" \
             -e MYSQL_USER="zabbix" \
             -e MYSQL_PASSWORD="zabbix_pwd" \
             -e MYSQL_ROOT_PASSWORD="root_pwd" \
             --network=zabbix-net \
             --restart unless-stopped \
             -d mysql:8.0 \
             --character-set-server=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password
             
             
(3)启动java gateway服务
docker run --name zabbix-java-gateway -t \
             --network=zabbix-net \
             --restart unless-stopped \
             -d zabbix/zabbix-java-gateway:alpine-5.4-latest
             
             
(4)启动zabbix server服务
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-5.4-latest
      
      
(5)启动zabbix web服务
docker run --name zabbix-web-nginx-mysql -t \
             -e ZBX_SERVER_HOST="zabbix-server-mysql" \
             -e DB_SERVER_HOST="mysql-server" \
             -e MYSQL_DATABASE="zabbix" \
             -e MYSQL_USER="zabbix" \
             -e MYSQL_PASSWORD="zabbix_pwd" \
             -e MYSQL_ROOT_PASSWORD="root_pwd" \
             --network=zabbix-net \
             -p 80:8080 \
             --restart unless-stopped \
             -d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
             
             
温馨提示:
    zabbix默认的用户名为'Admin',密码为'zabbix'。    
    
    
参考链接:
    https://www.zabbix.com/documentation/5.4/en/manual/installation/containers
    
    
    
    
    

# 1.创建网络
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

# 2.启动MySQL数据库
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      --restart unless-stopped \
      -d mysql:8.0 \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password
      
# 3.启动Java-gateway
docker run --name zabbix-java-gateway -t \
      --network=zabbix-net \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-6.2-latest
      
# 4.启动zabbix-server
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-6.2-latest
      
# 5.启动zabbix-web
docker run --name zabbix-web-nginx-mysql -t \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker day04 的相关文章

  • 八路视频光端机技术导论:多通道视频传输的高效解决方案

    随着光通信技术的快速发展 八路视频光端机 已成为多通道视频传输的有效解决方案 本文将探讨该技术的原理 优势及应用前景 为光通信行业的技术人员和研究学者提供参考 技术原理 八路视频光端机基于 波分复用 WDM 技术 通过一个光纤同时传输多路视
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • 【信道估计】【MIMO】【FBMC】未来移动通信的滤波器组多载波调制方案(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • Corda 在终端中查看消耗状态

    有没有一种简单的方法可以使用 CordaRPCOps 界面查看终端中的消耗状态 似乎VaultQuery默认返回未使用的状态 我不知道如何使用vaultQueryBy或任何符合条件的东西 我知道应该有消耗状态 因为我可以用 H2 看到它们
  • PHP 的同步 AMQP

    PHP 能否像 RPC 服务一样对待 AMQP 发送消息并阻塞直到返回回复 是否有任何好的示例 是否有任何库以易于使用的方式包装此类功能 我希望拥有代理消息传递系统的灵活性 但避免 Web 层需要了解其异步性质 当然 绝对 看看 RPC 风
  • Java RMI 和 RPC 有什么区别?

    Java RMI 和 RPC 之间的实际区别是什么 我在一些地方读到 RMI 使用对象 RPC是基于C的 因此它具有结构化编程语义 另一方面 RMI是基于Java的技术 并且是面向对象的 通过 RPC 您可以调用导出到服务器中的远程函数 在
  • 没有代理/存根 DLL 的进程外 COM 服务器?

    我正在学习如何实现进程外 COM 服务器 并发现了这篇代码项目文章 构建本地 COM 服务器和客户端 分步示例 http www codeproject com Articles 8679 Building a LOCAL COM Serv
  • 有没有好的、简单的用于进程间调用的 RPC 库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • LRPC 的意义何在?为什么有人想要对同一台机器进行远程过程调用?

    根据我对 RPC 远程过程调用 的理解 它们提供了一种向远程计算机发送函数调用 调用等的方法 这样做的明显优点是 您可以拥有一个在机器集群上运行的单个程序 并且可以处理更多请求 更多数据等 但我很困惑LRPC 轻量级RPC http www
  • MessagePack:快速跨平台序列化器和RPC - 请分享经验

    寻找一些我偶然发现的快速 简单且稳定的 RPC 库消息包 http msgpack org 项目看起来非常好 它也正在积极开发中 如果您以任何方式使用它 可以分享一下您的经验吗 附 我认为这个问题应该是社区维基 好吧 过了一段时间 我发现
  • 微服务之间的通信

    假设您有微服务 A B 和 C 它们当前都通过 HTTP 进行通信 假设服务 A 向服务 B 发送请求 服务 B 得到响应 然后 该响应中返回的数据必须发送到服务 C 进行一些处理 然后最终返回到服务 A 服务 A 现在可以在网页上显示结果
  • 同步 gRPC 客户端同步/异步服务器

    我只是好奇 异步 gRPC 服务器是否支持多个客户端的连接 如果不是 异步的可以吗 以及异步服务器 同步客户端的组合 甚至可能吗 是的 同步 gRPC 支持开箱即用的多个连接客户端 我亲自测试了多达 2000 个同时连接的客户端到一个用 G

随机推荐

  • linux保存git用户名密码

    1 创建git credentials gt vim git credentials https username password github com gitlab或github地址 2 执行git命令 gt git config gl
  • leetcode分类刷题:二分查找(Binary Search)(四、基于值域的数组/矩阵类型)

    基于值域的二分法与基于定义域的题型不同 它的目标是从一 特殊排序序列 中确定 第k个元素值 而不像基于定义域的题型是从排序序列中找小于等于特定target值的第一个索引 同时 针对 特殊排序序列 往往需要嵌套使用双指针法进行操作 进一步增加
  • mysql数据库备份与表备份

    一 Mysql中的数据备份 Mysql中数据备份使用的命令是 mysqldump命令将数据库中的数据备份成一个文本文件 表的结构和表中的数据将存储在生成的文本文件中 mysqldump命令的 工作原理很简单 它先查出需要备份的表的结构 再在
  • 转码日记——Javascript笔记(13)修改css样式、事件冒泡和委派

    使用JS控制css样式 1 修改css样式 语法 元素 style 样式名称 样式值 样式值必须是一个字符串 修改box1的样式 box1 style width 300px 如果css中还有 如background color 这种名称在
  • 程序员修仙之路--优雅快速的统计千万级别uv(留言送书)

    菜菜 咱们网站现在有多少PV和UV了 Y总 咱们没有统计pv和uv的系统 预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的 直接接入一个不行吗 别人的不太放心 毕竟自己写的 自己拥有主动权 给你两天时间 系统性能不要太差呀
  • Head First 设计模式 C#实现

    Head First 设计模式 文章目录 Head First 设计模式 完整源码 设计模式入门 具体设计模式 策略模式 观察者模式 装饰者模式 工厂模式 抽象工厂模式 单例模式 命令模式 适配器模式 外观模式 模版方法模式 迭代器模式 组
  • 指针以及内存分配

    1 指针很灵活 这使得指针很难管理 在定义指针时 将在栈中开辟一块内存存放指针的地址 栈内的内存由系统分配和释放 指针的地址内存只是存放指针的地址 不存放指针指向的数据 值得注意的是 定义指针时指针会随机指向一块内存 如int p p会指向
  • 243. 一个简单的整数问题2(树状数组)

    输入样例 10 5 1 2 3 4 5 6 7 8 9 10 Q 4 4 Q 1 10 Q 2 4 C 3 6 3 Q 2 4 输出样例 4 55 9 15 解析 一般树状数组都是单点修改 区间查询或者单点查询 区间修改 这道题都是区间操作
  • 从C语言到C++(语法基础一)

    一 关键字的添加 C 是对C的 增强 几乎引入了一倍的关键字 C语言常用关键字 C 98关键字 二 命名空间 在写C语言程序时 当你写了一个函数把它命名为max 且此时包含头文件stdlib h时你会发现编译会报错 这是C语言的缺陷之一 因
  • 【漏洞复现】 Sudo缓存溢出提权漏洞(CVE-2021-3156)

    说明 此博客为本人的漏洞复现学习过程记录 前言 漏洞原理 本次的漏洞存在于Sudo上 一个基于堆的缓冲区溢出漏洞 CVE 2021 3156 该漏洞被命名为 Baron Samedit 在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢
  • C++面试知识点

    strcpy函数实现 char strcpy char dest const char src assert dest NULL src NULL 检查指针的有效性 char res dest while dest src 0 return
  • Idea 插件下载缓慢,无法下载的解决方式

    要给idea装一个插件 但今天的idea死活下不下来插件 总报错 Plugin JProfiler was not installed Cannot download https plugins jetbrains com pluginMa
  • 杨桃的Python进阶讲座17——数组array(七)三维数组和n维数组的索引和取值(配详细图解)

    本人CSDN博客专栏 https blog csdn net yty 7 Github地址 https github com yot777 三维数组的索引和取值 创建一个numpy三维数组z 如下所示 gt gt gt import num
  • Nginx官方文档(三十四)【ngx_http_ssl_module】

    ngx http ssi module 示例配置 指令 ssl ssl buffer size ssl certificate ssl certificate key ssl ciphers ssl client certificate s
  • 电脑报错vcomp100.dll丢失怎样修复?这三个方法可以解决

    vcomp100 dll是微软Visual C 2005 Redistributable Package的一部分 它包含了运行某些程序所需的C 运行时库 当电脑中的vcomp100 dll文件丢失或损坏时 可能会导致一些程序无法正常运行 甚
  • [springboot 项目启动类Application.java运行没有任何反应]

    1 问题 最近从网上找了一个springboot项目学习 发现项目启动类无法运行 运行没有任何反应 maven依赖检查没有任何问题 2 解决方案 Files Setting Plugins Groovy勾选 再次运行 成功 3
  • Python: 装饰器和语法糖

    一 Python 装饰器 Python 装饰器本身就是一个函数 它的作用是装饰一个其他的函数 但是不改变原有的程序功能 还要增添新的功能 调用函数时的接口没有变化 比如 装修一个房子 如果不隔音 我在墙上加一层隔音板 却不能把墙拆了 换成隔
  • C# 关于浏览器——WebBrowser篇

    最近要写一个浏览器包裹一个网站 试了各种浏览器插件 记录一下 第一个就是微软的WebBrowser 这个很容易 直接拖过来 然后写一下注册表调用IE11的内核显示 这个代码是抄的
  • python金融数据分析马伟明_Python金融数据分析

    前言 第1章Python在金融中的应用 1 1Python适合我吗 1 1 1免费 开源 1 1 2高级 强大 灵活的编程语言 1 1 3丰富的标准库 1 2面向对象编程与函数式编程 1 2 1面向对象式方法 1 2 2函数式方法 1 2
  • docker day04

    Dockerfile FORM 1 指定基础镜像 可以起别名 也可以指定多个FROM指令 用于多阶段构建 2 加载触发器 加载ONBUILD指令 3 不指定基础镜像 声明当前镜像不依赖任何镜像 官方保留字 scratch RUN 1 在容器