Dockerfile镜像的构建
Dockerfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组恒,每天指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取的Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,他明确的表明image是怎么产生的,有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。
Dockerfile由一行行命令语句组成,建议使用大写,并且支持以#开头的注释行。
Dockerfile的指令是忽略大小写的,建议使用大写,每一行只支持一条指令,每条指令可以携带多个参数。
Dockerfile的指令根据作用可以分为两种:构建指令和设置指令。
构建指令用于构建image,其指定的操作不会再运行image的容器上执行。
设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。
一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令。
下面是一个例子:
#This dockerfile uses the ubuntu image
#VERSION 2 - EDITION 1
#Author:docker_user
#Command format:Instruction [arguments / command] ..
#Base image to use,this must be set as the first line
#第一行必须指明基于的基础镜像
FROM ubuntu
#Maintainer:docker_user<docker_user at email.com>(@docker_user)
#维护该镜像的用户信息
MAINTAINER docker_user docker_user@email.com
#Commands to update the image
#镜像操作命令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >>/etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#开启80端口
EXPOSE 80
#Commands when createing a new container
#启动容器时执行的命令
CMD /usr/sbin/nginx
在编写dockerfile时,有严格的格式要遵循:
其中,一开始必须使用FROM指令指明基于的镜像名称,接下来使用MAINTAINER指令说明维护者信息。后面则是镜像操作指令,例如RUN指令,RUN指令将对镜像执行跟随命令。每运行一条RUN指令,都会给基础镜像添加新的一层并提交。最后是CMD指令,来指定运行容器时的操作命令。
dockerfile指令
指令的一般格式为INSTRUCTION(指令) arguments(参数),指令包括FROM、MAINTAINER、RUN等。
(1)FROM(指定基础image)
构建指令,必须指定且需要在爱Dockerfile其他指令的前面。后续的指令都依赖于该指令指定的image。FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库。
该指令有两种格式:
FROM <image>
指定基础image为该image的最后修改的版本。
或者:
FROM <image>:<tag>
指定基础image为该image的一个tag版本。
(2)MAINTAINER(用来指定镜像创建者信息)
构建指令,用于将image的制作者相关的信息写入到image中。当我们对该image执行dockerinspect命令时,输出中有相应的字段记录该信息。
格式:
MAINTAINER <name>
(3)RUN(安装软件用)
构建指令,RUN可以运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。
该指令有两种格式:
RUN <command> (the command is run in a shell - `/bin/sh -c`)
RUN ["executable","param1","param2" ...] (exec from)
前者将在shell终端中运行命令,即/bin/sh -c;后者则使用exec执行。
指定使用其他终端可以通过第二种方式实现,例如RUN ["/bin/bash","-c","echo hello"]。
每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用"\"来换行。
(4)CMD(设置container启动时执行的操作)
该指令有三种格式:
设置指令,用于container启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。
CMD ["executable","param1","param2"] 使用exec执行,推荐方式;
CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用;
当Dockerfile指定ENTRYPOINT,那么使用下面的格式:
CMD ["param1","param2"] 提供给ENTRYPOINT的默认参数;
ENTRYPOINT指定的是一个可执行的脚本或者程序的路径,该指定的脚本或者程序将会对param1和param2作为参数执行。所以如果CMD指令使用上面的形式,那么Dockerfile中必须要有配套的ENTRYPOINT。
指定启动容器时执行的命令,每个dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时指定了运行命令,则会覆盖掉CMD指定的命令。
(5)ENTRYPOINT(设置container启动时执行的操作)
设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。
两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell中执行)
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。
每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个有效。
该指令的使用分为两种情况,一种是独自使用,另一种和CMD指令配合使用。
当独自使用时,如果你还是用了CMD命令且CMD是一个完整的可执行命令,那么CMD指令和ENTRYPOINT会相互覆盖只有最后一个CMD或者ENTRYPOINT指令被执行。
例如:CMD指令将不会被执行,只有ENTRYPOINT指令被执行。
CMD echo "Hello,World"
ENTRYPOINT ls -l
另一种用法和CMD指令配合使用来指定ENTRYPOINT的默认参数,这时CMD指令不是一个完整的可执行命令,仅仅是参数部分;ENTRYPOINT指令只能使用JSON方式指定执行命令,而不能指定参数。
例如:
FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["/usr/bin/ls"]
(6)USER(设置container容器的用户,默认是root用户)
格式为:
USER daemon
指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户。
例如:
RUN groupadd -r postgres&&useradd -r -g postgres postgres
例如:指定memcached的运行用户
ENTRYPOINT ["memcached"]
USER daemon
或
ENTRYPOINT ["memcached","-u","daemon"]
(7)EXPOSE(指定容器需要映射到宿主机器的端口)
格式为:
EXPOSE <port> [<port>...]
设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器的时候,可以不使用容器IP地址而是使用宿主机的IP地址和映射后的端口。
要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器的时候指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会被随机映射成宿主机中的一个端口号。也可以指定需要映射到宿主机的那个端口,这时要确保宿主机上的端口号没有被使用。EXPOSE指令可以一次设置多个端口号,相应的运行容器的时候,可以配套的多次使用-p选项。
例如:映射一个端口
EXPOSE port1
#相应的运行容器使用的命令
docker run -p port1 image
例如:映射多个端口
EXPOSE port1 port2 port3
#相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
#还可以指定需要映射到宿主机上的某个端口号
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
端口映射是docker比较重要的一个功能,原因在于我们每次运行容器的时候容器的IP地址不能指定,而是在桥接网卡的地址范围内随机生成的。宿主机的IP地址是固定的,我们可以将容器的端口映射到宿主机上的一个端口,免去每次访问容器中的某个服务时都要查看容器的IP地址。对于一个运行的容器,可以使用docker port加上容器中需要映射的端口和容器的ID来查看该端口号在宿主机上的映射端口。
(8)ENV(用于设置环境变量)
构建指令,指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持。
格式:
ENV <key> <value>
设置了后,后续的RUN命令都可以使用,container启动后,可以通过docker inspect查看这个环境变量,也可以通过在docker run --env key=value时设置或修改环境变量。
假如你安装了JAVA程序,需要设置JAVA_HOME,那么可以在Dockerfile中这样写:
ENV JAVA_HOME /path/to/java/dirent
再例如:
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC
/usr/src/postgress
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
(9)ADD(将源文件复制到container的目标文件)
构建指令,所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0;
源文件要与DOckerfile位于相同目录中;
1、如果源路径是个文件,且目标路径是以/结尾,则docker会把目标路径当做一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。
2、如果源路径是个文件,且目标路径不是以/结尾,则docker会把目标路径当做一个文件。
如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件。
如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
如果目标文件实际是个存在目录,则会源文件拷贝到该目录下。注意,这种情况下,最好显示的以/结尾,以避免混淆。
3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
4、如果源文件是个归档文件(压缩文件),则docker会自动帮助解压。
格式:
ADD <src> <dest>
该命令将复制指定的<src>到容器中的<dest>。
其中<src>可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;还可以是一个tar文件(自动解压为目录)。
<dest>是container中的绝对路径
例如:
#test
FROM ubuntu
MAINTAINER hello
ADD test1.txt test1.txt
ADD test1.txt test1.txt.bak
ADD test1.txt /mydir/
ADD data1 data1
ADD data2 data2
ADD zip.tar /myzip
(10)COPY
格式为COPY <src> <dest>
复制本地主机的<src>(为Dockerfile所在目录的相对路径)到容器中的<dest>。
源文件/目录要与Dockerfile在相同的目录中。
COPY指令和ADD指令功能和使用方式类似。只是COPY指令不会做自动解压工作。
(11)VOLUME(指定挂载点)
设置指令,使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用,我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据需求时可以再DOckerfile中使用该指令。
格式:
VOLUME ["<mountpoint>"]
例如: FROM base
VOLUME ["/tmp/data"]
运行通过该Dockerfile生成image的容器,/tmp/data目录中的数据在容器关闭后,里面的数据还存在。例如另一个容器也有持久化数据的需求,且想使用上面容器共享的/tmp/data目录,那么可以运行下面的命令启动一个容器:
docker run -t -i -rm -volumes-from container1 image2 bash
container1为第一个容器的ID,image2为第二个容器运行image的名字。
(12)WORKDIR(切换目录)
设置指令,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效。为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
格式:
WORKDIR /path/to/workdir
例如:在/p1/p2下执行vim a.txt
WORKDIR /p1
WORKDIR p2
RUN vim a.txt
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
例如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终路径为/a/b/c。
(13)ONBUILD(在子镜像中执行)
ONBUILD <Dockerfile关键字>
ONBUILD指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。
格式为:
ONBUILD [INSTRUCTION]
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
例如,Dockerfile使用如下的内容创建了镜像image-A。
[...]
ONBUILD ADD ./app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基于image-A创建新的镜像时,新的Dockerfile中使用FROM image-A 指定基础镜像时,会自动执行ONBUILD指令内容。
等价于在后面添加了两条指令。
FROM image-A
#Automatically run the following
ADD ./app/src
RUN /usr/local/bin/python-build --dir /app/src
使用ONBUILD指令的镜像,推荐在标签中注明,例如ruby:1.9-onbuild。
编写完成Dockerfile之后,可以通过docker build命令来创建镜像。
基本的格式为docker build [选项]路径,该命令将读取指定路径下Dockerfile,并将该路径下所有内容发送给Docker服务端,由服务端来创建镜像。因此一般建议防止Dockerfile的目录为空目录。
要指定镜像的标签信息,可以通过-t选项,例如:
docker build -t myrepo /myapp/tmp/test1
Docker应用案例:使用dockerfile创建sshd镜像模板并提供http访问应用。
1)创建一个sshd_dockerfile工作目录
编辑run.sh脚本
在主机上生成ssh秘钥对,并创建authorized_keys文件
[root@localhost sshd_dockerfile]# cat /root/.ssh/id_rsa.pub > /root/sshd_dockerfile/authorized_keys
[root@localhost sshd_dockerfile]# ls
authorized_keys Dockerfile run.sh
2、编写Dockerfile文件,内容如下:
[root@localhost sshd_dockerfile]# vim Dockerfile
FROM centos:7
MAINTAINER from zhy@aliyun.com
RUN yum install -y -q httpd openssh-server sudo net-tools
RUN useradd admin
RUN echo "admin:admin" | chpasswd
RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN mkdir -p /var/run/sshd
RUN mkdir -p /home/admin/.ssh
RUN sed -ri 's/#ServerName www.example.com:80/ServerName www.cloud.com/g' /etc/httpd/conf/httpd.conf
ADD authorized_keys /home/admin/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 775 /run.sh
EXPOSE 22 80
CMD ["/run.sh"]
以上选项的含义解释:
FROM centos:7 选择一个已有的os镜像作为基础
MAINTAINER from zhy@aliyun.com 镜像作者
RUN yum install -y -q httpd openssh-server sudo net-tools 安装httpd、openssh-server、sudo、net-tools软件包
添加测试用户admin,密码admin,并且将此用户添加到sudoers里
RUN useradd admin
RUN echo "admin:admin" | chpasswd
RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers
下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
注意:centos7上下面4句必须要有,否则创建出来的容器sshd不能登录
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
将公钥信息上传到远程连接用户的宿主目录的.ssh下
ADD authorized_keys /home/admin/.ssh/authorized_keys
启动sshd服务并且暴露22端口
RUN mkdir -p /var/run/sshd
EXPOSE 22 80
CMD ["/run.sh"] 运行脚本,也可以写成这种方式CMD ["/usr/sbin/sshd","-D"]
3、在sshd_dockerfile目录下,使用docker build命令来创建镜像,注意:在最后还有一个".",表示使用当前目录中的dockerfile
[root@localhost sshd_dockerfile]# docker build --no-cache -t "centos:httpv1" .
4、可以查看生成的镜像文件:
[root@localhost sshd_dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpv1 a8951c594a9d About a minute ago 424MB
启动容器,并做映射端口
[root@localhost sshd_dockerfile]# docker run -itd -P --name web002 centos:httpv1
a0a59f28023edf1235afec2071e17203749b3b1c503c046324bf8743274e7513
[root@localhost sshd_dockerfile]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0a59f28023e centos:httpv1 "/run.sh" 6 seconds ago Up 5 seconds 0.0.0.0:32773->22/tcp, 0.0.0.0:32772->80/tcp web002
使用admin用户登录
[root@localhost sshd_dockerfile]# ssh admin@192.168.22.7 -p 32773
The authenticity of host '[192.168.22.7]:32773 ([192.168.22.7]:32773)' can't be established.
ECDSA key fingerprint is 82:8b:30:04:c4:aa:3e:39:6d:06:39:63:90:e7:5a:04.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.22.7]:32773' (ECDSA) to the list of known hosts.
[admin@a0a59f28023e ~]$
访问容器的网站服务:
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 小白初学JavaScript第三天
JavaScript-Day 3 一、程序结构 程序结构:程序的执行顺序 顺序结构 选择(分支)结构 if语句 if…else if…else if…else switch 循环结构 for while do…while for…in 二、分支结构 if 语句 //语法: if(条件…...
2024/5/3 2:32:27 - PHP中session(报错Notice: Undefined index)无法获取值的原因(原因之一)与分析
PHP中的SESSION问题: 本文主题: 在页面之间传递session时,两页面文件不在同文件夹中而导致session无法传递,报错Notice: Undefined index… 此问题测试: 文件结构: test文件夹: —gameIndex.ph…...
2024/4/25 6:41:58 - Redhat 8 yum 配置
Redhat 8 yum 配置 yum自带不能用,配置方法有本地和线上。 一般配置目录 /etc/yum.repos.d/ 1、本地yum配置,环境 虚拟机 一、挂载安装镜像iso [rootlocalhost ~]# mount /dev/sr0 /mnt/ mount: /mnt: WARNING: device write-protected, mounted read-o…...
2024/3/23 13:15:15 - JAVA DAY2 数据类型和运算符
1 注释 单行注释 // 主要用来语句的 解释 或者变量的说明 多行注释 /* / 一般用在类或者方法的 上 进行相关的功能说明 文档注释/* */ 主要用在类和方法上 用来生成该类的 API文档使用 2.关键字 关键字就是Java中被赋予特殊含义的 单词 特点:所有的关键字都是 一个…...
2024/3/23 13:15:15 - Java虚拟机(JVM)超详细面试题
文章目录一、Java内存区域1.1 说一下 JVM 的主要组成部分及其作用?1.2 说一下 JVM 运行时数据区1.3 深拷贝和浅拷贝1.4 说一下堆栈的区别?1.5 队列和栈是什么?有什么区别?二、HotSpot虚拟机2.1 对象的创建2.2 为对象分配内存2.3 处…...
2024/5/3 9:27:46 - PE结构
PE结构的各部分 DOS首部 DOS首部并不是一个文件的开始,但它指向PE真正的文件头 IMAGE_DOS_HEADER STRUCT { 0h WORD //Magic DOS signature MZ DOS可执行文件标记 (开始标志4D 5A) 2h WORD //Bytes on last page of file 4h WORD //Pages in…...
2024/3/23 13:15:12 - 图的最短路径-STL版
输入 第一行输入t,表示有t个测试实例 第二行输入顶点数n和n个顶点信息 第三行起,每行输入邻接矩阵的一行,以此类推输入n行 第i个结点与其它结点如果相连则为距离,无连接则为0,数据之间用空格隔开。 第四行输入v0&#…...
2024/4/23 1:49:45 - 阿里技术专家23天纯手撸笔记,演绎最新“Kafka部署实战”,开源,限时白嫖
导言 我们知道,当下流行的MQ非常多,不过很多公司在技术选型上还是选择使用Kafka。与其他主流MQ进行对比,我们会发现Kafka最大的优点就是吞吐量高。实际上Kafka是高吞吐低延迟的高并发、高性能的消息中间件,配置良好的Kafka集群甚…...
2024/4/23 10:29:40 - 记录一次增加硬件导致网卡报Failed to start LSB Bring updown networking.解决过程
记录一次增加硬件导致网卡报Failed to start LSB: Bring up/down networking.解决过程 增加配置导致ens33网卡和docker0 无法正常启动 [rootserver1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen…...
2024/4/24 19:22:50 - Pytorch nn.RNN模块的输入维度
输入数据的维度 最近复习RNN记录一下 一般CNN的输入形状为: <[batch_size(一次性运算的个数), channels(通道数), height(行数,或者说图片的高), width(列数,或者说图片的宽)]> 一般RNN的输入形状为: <[seq_len(序列的长度,或者说时间的步…...
2024/4/24 19:22:47 - 【Codeforces 739B】Alyona and a tree | dsu on a tree、 倍增、二分、树上差分、一题多解
题目链接:https://codeforces.com/contest/739/problem/B 题目大意: 给出一棵树,如果v是u的孩子节点,并且dis(u,v) < a[v],那么称为u可以控制到v 输出每个节点可以控制的节点的数量 题目思路: 读完…...
2024/4/24 19:22:53 - mysql的读写分离
一、mysql主从复制读写分离 1、mysql主从复制的作用和特点 1】mysql主从复制的作用 保证mysql数据的可靠性和稳定性 避免单点故障 2】mysql主从复制特点 可靠性强 稳定性强 避免数据丢失 3】mysql主从复制的原理 主数据库开启二进制日志 允许日志复制 备份mysql监听主mysql日志…...
2024/4/24 19:22:45 - 程序测试:断点调试
下面简单介绍一下Eclipse开发环境,并通过一个小例子简单介绍一下Eclipse下调试Java程序的一些方法。 Eclipse是一款非常优秀的开源IDE(集成开发环境),基于Java的可扩展开发平台。除了可作为 Java 的集成开发环境外,还…...
2024/4/24 19:22:44 - 后端开发面试题(十)消息中间件篇
文章目录1、为什么使用MQ?MQ的优点2、消息队列有什么优缺点?RabbitMQ有什么优缺点?3、你们公司生产环境用的是什么消息中间件?4、Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?5、MQ 有哪些常见问题?…...
2024/4/24 19:22:50 - 中国石油大学《工程力学》在线考试题
1A 在铸铁压缩试验中,破坏后的铸铁试样断口平滑呈韧性,与轴线近似成45。破坏前,该断口所在斜截面的应力有何特点? 答:剪应力最大 1B 在铸铁扭转试验中,铸铁断口的形态是什么样的? 答…...
2024/4/24 19:22:45 - 【Vue学习(一),Vue和MVVM介绍、Vue常用标签】
初识Vue 什么是Vue 以下引自Vue官方文档 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。 Vue 的核心库只关注视图层,不仅易于上手,还便于与…...
2024/4/24 19:22:44 - 后端开发面试题(十一)ZooKeeper篇
文章目录1、ZooKeeper 是什么?2、ZooKeeper 提供了什么?3、Zookeeper 文件系统4、Zookeeper 怎么保证主从节点的状态同步?5、四种类型的数据节点 Znode6、Zookeeper Watcher 机制 – 数据变更通知7、客户端注册 Watcher 实现8、服务端处理 Wa…...
2024/4/27 23:17:16 - 【学习总结】块级作用域:var缺陷以及为什么要引入let和const?
正是由于 JavaScript 存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是 JavaScript 的一个重要设计缺陷。 “探病因”——分析为什么在 JavaScript 中会存在变量提升,以及变量提升所带来的问题; “开药方”——介绍如…...
2024/4/9 9:05:10 - 08运算符重载
08运算符重载 运算符重载 本质上是函数重载 成员函数重载 成员函数声明的格式 : 函数类型 operator 运算符(参数表); 成员函数定义的格式 : 函数类型 类名::operator 运算符(参数表){} class Complex{ private:int real_;int imag_; public:Complex(int r0, int i0):real_…...
2024/3/29 4:08:14 - Unity Shder Graphs 水效果
Unity Shder Graphs 水效果...
2024/4/25 12:01:18
最新文章
- jupyter notebook使用与本地位置设置
本地安装好Anaconda之后,自带的有Jupter notebook。 使用jupyter notebook 使用jupyter notebook时,可以直接打开或者搜索打开: 打开后,我们生成的或者编辑的一些文件,都可以看到,如下: j…...
2024/5/3 11:44:50 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - axios拦截器:每次请求自动带上 token
Step 1:创建Axios实例并添加拦截器 在你的Vue项目中,一般我们会先导入axios,然后创建一个axios实例。这样做是为了方便统一管理和配置。 import axios from axios; // 引入axios// 创建一个axios实例 const service axios.create();// 添加请…...
2024/4/30 17:13:59 - 备战蓝桥杯Day37 - 真题 - 特殊日期
一、题目描述 思路: 1、统计2000年到2000000年的日期,肯定是需要遍历 2、闰年的2月是29天,非闰年的2月是28天。我们需要判断这一年是否是闰年。 1、3、5、7、8、10、12月是31天,4、6、9、11月是30天。 3、年份yy是月份mm的倍数…...
2024/5/2 2:42:10 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/2 11:19:01 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/2 16:04:58 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/2 23:55:17 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/2 9:47:31 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/3 11:10:49 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/2 6:03:07 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/2 9:47:30 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/2 23:47:43 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/2 5:31:39 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/3 1:55:15 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/2 9:47:28 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/2 9:47:27 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/3 1:55:09 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/2 8:37:00 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/2 9:47:26 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/2 9:47:25 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/2 23:47:16 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/2 18:46:52 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/3 7:43:42 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/3 1:54:59 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57