Dockerfile构建镜像(SSH、Systemctl、nginx、tomcat 、mysql、)

news/2024/2/25 14:10:21/文章来源:https://blog.csdn.net/qq_51545656/article/details/135578401

目录

构建SSH镜像

构建Systemctl镜像

构建nginx镜像

构建Tomcat镜像

构建MySQL镜像


构建SSH镜像

切换到目录 /opt/sshd

cd /opt/sshd

        这是为了进入一个特定的目录,后续的操作将在这个目录下进行。

创建一个 Dockerfile 并使用 Vim 编辑它:

vim Dockerfile

        在这一步,你使用Vim编辑器创建或编辑名为Dockerfile的文件。Vim是一个文本编辑器,你可以使用其他编辑器替代。

在 Dockerfile 中添加以下内容,这些内容定义了构建Docker镜像的步骤:

# 使用的基础镜像
FROM centos:7# 作者信息
MAINTAINER this is ssh image <ssh># 安装软件包和设置SSH服务
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo '123456' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd
RUN ssh-keygen -t rsa -A
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh# 暴露SSH服务端口
EXPOSE 22# 启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]

        保存并退出 Vim。

构建镜像:

docker build -t sshd:centos .

        这一步使用Docker命令构建一个新的镜像,-t参数指定了镜像的名称和标签。

启动容器并修改 root 密码:

docker run -d -P sshd:centos
docker ps -a

        这一步启动了一个新的Docker容器,-d参数表示在后台运行,-P参数会随机映射容器内SSH服务的端口到主机上。使用docker ps -a查看容器的详细信息。

使用 SSH 连接到容器:

ssh localhost -p 11451

        最后,这一步使用SSH客户端连接到运行的容器,其中-p参数指定了映射后的端口号,而连接时使用密码 123456 进行身份验证。确保你的本地主机上已安装SSH客户端。

构建Systemctl镜像

用于创建一个基于CentOS的Docker镜像,该镜像中包含了systemd和ssh服务。

创建目录和进入目录:

mkdir /opt/systemctl
cd /opt/systemctl

/opt/systemctl 目录下创建一个新的Docker镜像。

创建 Dockerfile 并编辑它:

vim Dockerfile

        在这一步,使用Vim编辑器创建或编辑名为 Dockerfile 的文件。

在 Dockerfile 中添加以下内容,用于构建包含 systemd 和 ssh 服务的镜像:

FROM sshd:centos
MAINTAINER this is systemctl image <sys>
ENV container docker# 删除不必要的 systemd 文件
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;VOLUME [ "/sys/fs/cgroup" ]
#CMD ["/usr/sbin/init"]

保存并退出 Vim。

构建镜像:

docker build -t systemd:centos .

使用Docker命令构建一个新的镜像,-t参数指定了镜像的名称和标签。

启动容器并挂载目录进行初始化:

docker run --privileged -d -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init

        这一步启动了一个新的Docker容器,使用 --privileged 参数使得容器内的root用户拥有真正的root权限。-v参数用于将宿主机的 /sys/fs/cgroup 目录挂载到容器内,并进行了初始化。

查看容器信息:

docker ps -a

使用该命令查看容器的详细信息,包括容器的ID等。

进入容器并检查 SSH 服务状态:

docker exec -it <container_id> bash
systemctl status sshd

使用 docker exec 命令进入容器,并在容器内执行 systemctl status sshd 来检查 SSH 服务的状态。

        这一系列命令主要用于创建包含 systemd 和 ssh 服务的 Docker 镜像,并在容器内进行一些初始化。请替换 <container_id> 为实际的容器ID。请注意,使用 systemd 在容器内运行时,一些操作可能需要额外的配置和权限。

两种启动方法

docker run --privileged -it -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init &

  • -it: 分配一个交互式终端,允许用户与容器进行交互。这使得在终端内执行 systemd:centos /sbin/init

  • &: 在命令的末尾表示将该命令放到后台运行。

    这个命令的效果是以交互方式启动容器,并在容器内运行 systemd 的初始化进程。由于使用了 -it,用户可以在启动的容器中进行交互。& 将容器放到后台运行,但在这种情况下,可能无法直接看到容器的输出,因为终端会返回到主机。

docker run --privileged -d -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init

  • -d: 在后台运行容器,即使没有交互终端。

  • 没有使用 -it,因此容器在后台运行时不会分配交互式终端。

    这个命令的效果是以后台方式启动容器,容器在后台运行且没有交互式终端。可以通过 docker logs <container_id> 来查看容器的输出。

总的来说,第一个命令是以交互方式启动容器,适合需要手动交互的场景,而第二个命令是在后台运行容器,适合无需用户干预的场景。具体选择取决于你的需求和使用场景。

构建nginx镜像

构建基于CentOS 7的Nginx Docker镜像的Dockerfile文件

创建目录并复制Nginx压缩包到指定目录:

mkdir /opt/nginx
cd /opt/nginx/
cp /opt/nginx-1.12.0.tar.gz /opt/nginx

进入Nginx目录并创建Dockerfile文件:

cd /opt/nginx/
vim Dockerfile

Dockerfile内容:

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <ngi>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.0.tar.gz /opt/
#指定工作目录
WORKDIR /opt/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf   #关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

编辑run.sh脚本文件:

vim run.sh

run.sh内容:

#!/bin/bash
/usr/local/nginx/sbin/nginx

构建Docker镜像:

docker build -t nginx:centos .

运行Docker容器:

docker run -d -P nginx:centos

查看容器运行状态:

docker ps -a

在示例中,容器的端口映射为0.0.0.0:32799->80/tcp和0.0.0.0:32798->443/tcp。

访问Nginx服务: 打开浏览器访问 http://192.168.31.31:32799(具体IP和端口根据你的环境配置而定)。

构建Tomcat镜像

创建一个基于CentOS 7的Docker容器,其中包含了Tomcat和Java环境

创建目录并进入:

mkdir /opt/tomcat
cd /opt/tomcat

/opt目录下创建一个名为tomcat的目录,并进入该目录。

复制文件:

cp /opt/jdk-8u91-linux-x64.tar.gz /opt/tomcat
cp /opt/apache-tomcat-8.5.16.tar.gz /opt/tomcat

jdk-8u91-linux-x64.tar.gzapache-tomcat-8.5.16.tar.gz复制到/opt/tomcat目录下。

创建Dockerfile并编辑:

vim Dockerfile

创建一个名为Dockerfile的文件并编辑。

Dockerfile内容:

FROM centos:7
MAINTAINER this is tomcat image <tom>ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATHADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcatEXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

Dockerfile定义了构建Docker镜像的步骤。它基于CentOS 7,安装了Java和Tomcat,并设置了相应的环境变量。

构建Docker镜像:

docker build -t tomcat:centos .

使用Dockerfile构建一个名为tomcat:centos的Docker镜像。

运行Docker容器:

docker run -d --name tomcat01 -p 1216:8080 tomcat:centos

在后台运行名为tomcat01的Docker容器,将容器的8080端口映射到主机的1216端口。

访问Tomcat应用: 打开浏览器并访问:http://192.168.41.31:1216

构建MySQL镜像

创建并进入 /opt/mysqld 目录。

mkdir /opt/mysqld
cd /opt/mysqld

使用 vim 编辑器创建名为 Dockerfile 的文件。

vim Dockerfile

Dockerfile 内容:

FROM centos:7
MAINTAINER this is mysql image <mysql>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
RUN useradd -M -s /sbin/nologin  mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make && make install
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
WORKDIR /usr/local/mysql/
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
ADD run.sh /usr/local/src
RUN chmod 755 /usr/local/src/run.sh
RUN sh /usr/local/src/run.sh
#CMD ["/usr/sbin/init"]
  • FROM centos:7:基于 CentOS 7 镜像构建。

  • MAINTAINER:设置镜像的作者信息。

  • 安装依赖包:

RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
  • 创建 MySQL 用户:
RUN useradd -M -s /sbin/nologin mysql
  • 将 MySQL 源代码压缩包解压到 /usr/local/src/ 目录:
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
  • 进入 MySQL 源代码目录:
WORKDIR /usr/local/src/mysql-5.7.20/
  • 使用 cmake 进行 MySQL 的配置和编译:
RUN cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \...&& make && make install
  • 设置文件权限和清理不需要的文件:
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
  • 添加自定义的 MySQL 配置文件并设置文件权限:
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
  • 设置环境变量 PATH
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
  • 进入 MySQL 安装目录:
WORKDIR /usr/local/mysql/
  • 初始化 MySQL 数据库:
RUN bin/mysqld \--initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
  • 将 systemd 的 MySQL 服务配置文件复制到正确的目录:
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
  • 暴露 MySQL 的默认端口:
EXPOSE 3306
  • 添加运行脚本和设置权限:
ADD run.sh /usr/local/src
RUN chmod 755 /usr/local/src/run.sh
RUN sh /usr/local/src/run.sh
  • 注释的 #CMD ["/usr/sbin/init"] 行,该行是被注释掉的,可能是为了在容器内运行 systemd 的初始化进程。

配置MySQL配置文件(my.cnf)

vim my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

[client]:

  • port = 3306: 指定客户端连接 MySQL 服务器的端口号为 3306。

  • default-character-set=utf8: 设置客户端默认字符集为 UTF-8。

  • socket = /usr/local/mysql/mysql.sock: 指定客户端连接 MySQL 服务器时使用的套接字文件路径。

[mysql]:

  • port = 3306: 指定 MySQL 客户端程序连接 MySQL 服务器的端口号为 3306。

  • default-character-set=utf8: 设置 MySQL 客户端程序默认字符集为 UTF-8。

  • socket = /usr/local/mysql/mysql.sock: 指定 MySQL 客户端程序连接 MySQL 服务器时使用的套接字文件路径。

[mysqld]:

  • user = mysql: 指定 MySQL 服务器运行的用户为 "mysql"。

  • basedir = /usr/local/mysql: 指定 MySQL 安装的基础目录。

  • datadir = /usr/local/mysql/data: 指定 MySQL 存储数据文件的目录。

  • port = 3306: 指定 MySQL 服务器监听的端口号为 3306。

  • character_set_server=utf8: 设置 MySQL 服务器的字符集为 UTF-8。

  • pid-file = /usr/local/mysql/mysqld.pid: 指定保存 MySQL 服务器进程ID的文件路径。

  • socket = /usr/local/mysql/mysql.sock: 指定 MySQL 服务器的套接字文件路径。

  • server-id = 1: 设置 MySQL 服务器的唯一标识 ID 为 1。

sql_mode:

  • NO_ENGINE_SUBSTITUTION: 不替换存储引擎。

  • STRICT_TRANS_TABLES: 严格遵守事务处理规则。

  • NO_AUTO_CREATE_USER: 不自动创建用户。

  • NO_AUTO_VALUE_ON_ZERO: 在插入时,如果列的值为零,则不自动增加。

  • NO_ZERO_IN_DATE: 日期中不允许使用零值。

  • NO_ZERO_DATE: 不允许日期列的零值。

  • ERROR_FOR_DIVISION_BY_ZERO: 发生除零错误时产生错误。

  • PIPES_AS_CONCAT: 将管道符号(|)视为字符串连接运算符而非逻辑运算符。

  • ANSI_QUOTES: 启用 ANSI_QUOTES 模式,双引号用于引用标识符。

编写脚本用于启动 MySQL 服务器的 Docker 容器,并进行相关初始化和权限配置。

启动 MySQL 服务器的 Docker 容器:

docker run --name=mysql_server -d -P --privileged mysql:centos /usr/sbin/init
  • --name=mysql_server: 指定容器的名称为 "mysql_server"。

  • -d: 在后台运行容器。

  • -P: 将容器内部使用的网络端口映射到随机的主机端口。

  • --privileged: 赋予容器所有的 Linux 的权限。

  • mysql:centos: 使用名为 "mysql:centos" 的 Docker 镜像。

  • /usr/sbin/init: 启动容器的初始化进程。

授权远程连接 MySQL:

docker exec -it f9a4d8f6c65f /bin/bash
  • 进入容器内部的 Bash 环境。
mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'localhost' identified by '123456';
flush privileges;
  • 登录 MySQL 服务器,使用 root 用户,并输入密码。

  • 授权 root 用户允许从任何主机连接,并设置密码为 '123456'。

  • 同样,授权 root 用户允许从本地连接,并设置密码为 '123456'。

  • 刷新权限以使更改生效。

在客户端连接 MySQL 容器:

mysql -h 192.168.41.31 -u root -P 49153 -123456
  • 连接到 MySQL 服务器的容器,指定主机地址为 192.168.41.31,用户名为 root,端口为 49153,密码为 '123456'。

注意:确保防火墙或网络配置允许从客户端到容器的连接,同时保护数据库密码的安全性。

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

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

相关文章

关于html导出word总结一

总结 测试结果不理想&#xff0c;html-to-docx 和 html-docx-js 最终导出的结果 都 差强人意&#xff0c;效果可以见末尾的附图 环境 "electron": "24.3.0" 依赖库 html-docx-js html-docx-js - npm html-to-docx html-to-docx - npm file-saver…

基于DNA的密码学和隐写术综述

摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…

JDK8-JDK17版本升级

局部变量类型推断 switch表达式 文本块 Records 记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类&#xff0c;但代码少得多&#xff1b;大多数开发人员使用 Lombok 生成 POJO 类&#xff0c;但是有了记录&#xff0c;你就不需要使…

第 2 章 数据结构和算法概述

文章目录 2.1 数据结构和算法的关系2.2 看几个实际编程中遇到的问题2.2.1 问题一-字符串替换问题2.2.2 一个五子棋程序2.2.3 约瑟夫(Josephu)问题(丢手帕问题)2.2.4 其它常见算法问题: 2.3 线性结构和非线性结构2.3.1 线性结构2.3.2 非线性结构 2.1 数据结构和算法的关系 数据 …

使用Qt连接scrcpy-server控制手机

Qt连接scrcpy-server 测试环境如何启动scrcpy-server1. 连接设备2. 推送scrcpy-server到手机上3. 建立Adb隧道连接4. 启动服务5. 关闭服务 使用QTcpServer与scrcpy-server建立连接建立连接并视频推流完整流程1. 开启视频推流过程2. 关闭视频推流过程 视频流的解码1. 数据包协议…

【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决)

【STM32】HAL库的STOP低功耗模式UART串口唤醒&#xff0c;第一个接收字节出错的问题&#xff08;已解决&#xff09; 文章目录 BUG复现调试代码推测原因及改进方案尝试中断时钟供电外设唤醒方式校验码硬件问题 切换到STOP0模式尝试结论和猜想解决方案附录&#xff1a;Cortex-M…

js动态设置关键侦@keyframes

js动态设置关键侦keyframes 1.前置知识 关键侦keyframes规则通过在动画序列中定义关键侦的样式来控制CSS动画序列的中间步骤 keyframes slidein {from {transform: translateX(0%);}to {transform: translateX(100%);} } // from 等价于 0%&#xff1b;to 等价与 100% // 或…

【已解决】C语言进行多线程数据切割查找数据

第一次听到多线程切割&#xff0c;笔者也没听的太懂&#xff0c;但发现多线程数据切割其实就是分出多个线程&#xff0c;进行处理查找数据的事情。而为什么切割呢&#xff0c;就是因为数据不够线程数分的&#xff0c;假如1k个数据&#xff0c;7个线程&#xff0c;这里不能够整除…

RabbitMQ的安装使用

RabbitMQ是什么&#xff1f; MQ全称为Message Queue&#xff0c;消息队列&#xff0c;在程序之间发送消息来通信&#xff0c;而不是通过彼此调用通信。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时&#xff0c;消费者无法快速消费&#xff0c;…

蓝桥杯备赛 | 洛谷做题打卡day5

蓝桥杯备赛 | 洛谷做题打卡day5 图论起航&#xff0c;一起来看看深&#xff08;广&#xff09;度优先吧 ~ 文章目录 蓝桥杯备赛 | 洛谷做题打卡day5图论起航&#xff0c;一起来看看深&#xff08;广&#xff09;度优先吧 ~【深基18.例3】查找文献题目描述 输入格式输出格式样例…

vue知识-04

计算属性computed 注意&#xff1a; 1、计算属性是基于它们的依赖进行缓存的 2、计算属性只有在它的相关依赖发生改变时才会重新求值 3、计算属性就像Python中的property&#xff0c;可以把方法/函数伪装成属性 4、computed: { ... } 5、计算属性必须要有…

MySQl Mybatis

一、MySQL 1.1 概述 1.1.1 MySQL安装 1.1.2 数据模型 1.1.3 SQL简介 1.2 DDL 1.2.1 数据库操作 1.2.2 图形化工具 1.2.3 表结构操作 &#xff08;一&#xff09;创建 &#xff08;二&#xff09;数据类型 &#xff08;1&#xff09;数值类型 age tinyint unsigned——加上…

Kubernetes 集群管理—日志架构

日志架构 应用日志可以让你了解应用内部的运行状况。日志对调试问题和监控集群活动非常有用。 大部分现代化应用都有某种日志记录机制。同样地&#xff0c;容器引擎也被设计成支持日志记录。 针对容器化应用&#xff0c;最简单且最广泛采用的日志记录方式就是写入标准输出和标…

书生·浦语大模型--第三节课笔记--基于 InternLM 和 LangChain 搭建你的知识库

文章目录 大模型开发范式RAGLangChain框架&#xff1a;构建向量数据库构建检索问答链优化建议web 部署 实践部分环境配置 大模型开发范式 LLM的局限性&#xff1a;时效性&#xff08;最新知识&#xff09;、专业能力有限&#xff08;垂直领域&#xff09;、定制化成本高&#…

测试平台出问题?看我20分钟快速定位!

今天遇到一个问题&#xff0c;感觉挺有意思&#xff0c;处理过程也非常有意义&#xff0c;希望能给大家一个借鉴吧。今天一位小姐姐找到了我们大组长&#xff0c;说测试平台添加自动化测试用例失败&#xff0c;之后我们组长把我拉到了一个群里让我去看一下&#xff0c;硬着头皮…

C++面试宝典第19题:最长公共前缀

题目 编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串""。说明:所有输入只包含小写字母a-z。 示例1: 输入: ["flower", "flow", "flight"]输出: "fl" 示例2: 输入: ["dog",…

如何在Windows 10/11的防火墙中禁止和允许某个应用程序,这里提供详细步骤

想阻止应用程序访问互联网吗&#xff1f;以下是如何通过简单的步骤阻止和允许Windows防火墙中的程序。​ 一般来说&#xff0c;大多数用户永远不需要担心应用程序访问互联网。然而&#xff0c;在某些情况下&#xff0c;你需要限制应用程序访问互联网。 例如&#xff0c;有问题…

vue知识-03

购物车案例 要实现的功能&#xff1a; 1、计算商品总价格 2、全选框和取消全选框 3、商品数量的增加和减少 <body> <div id"app"><div class"row"><div class"col-md-6 col-md-offset-3"><h1 class"text-center…

TinyLog iOS v3.0接入文档

1.背景 为在线教育部提供高效、安全、易用的日志组件。 2.功能介绍 2.1 日志格式化 目前输出的日志格式如下&#xff1a; 日志级别/[YYYY-MM-DD HH:MM:SS MS] TinyLog-Tag: |线程| 代码文件名:行数|函数名|日志输出内容触发flush到文件的时机&#xff1a; 每15分钟定时触发…

【Spring 篇】走进SpringMVC的世界:舞动Web的激情

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于SpringMVC的博客&#xff0c;让我们一起探索这个舞动Web的框架&#xff0c;感受它带来的激情和便利。在这个世界里&#xff0c;我们将学到SpringMVC的概述、开发步骤以及如何快速入门&#xff0c;一切都是如此的令人兴奋…