当前位置: 首页 > news >正文

使用 Docker-compose 搭建lnmp

服务编排:

应用编排

  • 单机环境下:shell/python脚本
  • 多机/集群环境下:ansible、saltstack、pubbet

docker容器编排:

  • 单机:docker-compose
  • 多机/集群:docker swarm,mesos+ marathon,kubernetes

一、Docker-Compose简介

1.1 为什么使用 Docker-compose

我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍Docker 官方产品Docker Compose。

Dockerfile可以让用户管理一个单独的应用容器;而Compose则 允许用户在一个模板(YAML格式) 中定义一组相关联的应用容器( 被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等。

1.2 Docker-compose概述

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service) 以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务 发现及负载均衡,比如Consul。

Docker-Compose的工程配置文件默认为docker-compose. yml,可通过环境变量COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose允许用户通过一个单独的docker-compose. yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目 (project) 。

Docker-Compose项目由Python编写,调用Docker服 务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

二、compose 部署

2.1 Docker Compose 环境安装

Docker Compose是 Docker 的独立产品,因此需要安装 Docker 之后再单独安装Docker Compose。

 #方法一:下载。curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose#安装,给予执行权限chmod +x /usr/local/bin/docker-compose#查看版本docker-compose --version​#方法二:也可以提前下载好安装包,之后上传到系统中。cd /opt/lschmod +x docker-composemv docker-compose /usr/local/bin/docker-compose --version

2.2 YAML文件格式及编写注意事项

2.2.1 YAML文件格式

YAML是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json简单的很多。

  • YAML数据结构通过缩进来表示
  • 连续的项目通过减号来表示
  • 键值对用冒号分隔
  • 数组用中括号 [ ] 括起来
  • hash 用花括号 { } 括起来
 #一个键如果有多个值。符号可以不缩进,但值要缩进。name:- zhangsan- lisi- wangwu​name:- zhangsan- lisi- wangwuname: ["zhangsan", "lisi", "wangwu"]

2.2.2 使用YAML时需要注意下面事项

  • 大小写敏感
  • 通过缩进表示层级关系
  • 不支持制表符tab键缩进T只能使用空格缩进
  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
  • 用 # 号注释
  • 符号字符后缩进1个空格,如"冒号 : "、 "逗号 ,"、"横杠 - "
  • 如果包含特殊字符用单引号(' ')引起来会作为普通字符串处理,双引号(" "):特殊字符作为本身想表示的意思
 #双引号示例:name: "hello, \nworld"最后name值是两行内容name: hello,world​#单引号示例:name: 'hello, \nworld',只会作为普通字符 name: hello,\nworld

2.2.3 数据结构

 #对象: 键值对的字典animal: pets​#数组: 一组按次序排列的列表- cat- dog- goldfish​#布尔值debug: "true"debug: "false"​​#Yaml示例languages:      #序列的映射- Java- Golang- Pythonwebsites:       #映射的映射(键的值,仍然是键值对)Baidu: www.baidu.comWangyi: www.163.comSouhu: www.souhu.com#或者 languages: ["Java","Golong","Python"]websites: Baidu: www.baidu.comWangyi: www.163.comSouhu: www.souhu.com#Json格式{languages: ['Java','Golong','Python',],websites: [Baidu: 'www.baidu.com',Wangyi: 'www.163.com',Souhu: 'www.souhu.com',]}

2.3 Docker Compose 配置常用字段

字段描述
build使用Dockerfile构建镜像。指定Dockerfile 文件名,要指定Dockerfile文件需要在bui ld标签的子级标签中使用dockerfile标签指定
dockerfile构建镜像上下文路径(指定Dockerfile文件)
context可以是dockerfile 的路径,或者是指向git 仓库的url地址
image指定镜像
command执行命令,覆盖容器启动后默认执行的命令(类似于 docker run)
container_name指定容器名称,由于容器名称是唯一的, 如果指定自定义名称,则无法scale指定容器数量(同一个镜像指定多个容器数量)
deploy指定部署和运行服务相关的配置,只能在Swarm模式使用
environment添加环境变量
networks加入网络,引用顶级networks下条目
networks_mode设置容器的网络模式,如 host,bridge
ports暴露容器端口,与-p相同,但端口不能低于60
volumes挂载一个宿主机目录或命令卷到容器中,命令卷要在顶级volumes定义卷名称
volumes_from从另一个服务或容器挂载卷,可选参数:ro 和:rw。仅版本'2' 支持
hostname容器主机名
sysctls在容器内设置内核参数
links连接到另外一个容器,- 服务名称[:服务别名] (类似于容器互联)
privileged用来给容器root权限,注意是不安全的,只有两个值:true或false
restart设置重启策略,never,always, no-failure, unless-stopped
never,默认策略,在容器退出时不重启容器。
on-failure,在容器非正常退出时(退出状态非0),才会重启容器。
on-failure:3,在容器非正常退出时重启容器,最多重启3次。
always,在容器退出时总是重启容器。
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
depends_on在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。

(1)depends_on 指定依赖关系和启动顺序

 php:depends_on:- apache- mysql

(2)使用镜像

  • 如果想使用已存在的镜像,使用image。
  • 如果想使用自己构建的镜像,使用build、dockerfile、context。

(3)引用网络

在顶级层设置两个网络模式,在服务中引用不同的网络,可以实现网络的隔离,和网络的兼容。(可以理解为vlan)

 networks:lnmplampservice:nginx:networks:lnmpapache:networks:lampmysql:networks:lnmplampphp:networks:lnmplamp 

(4)命令卷

在 version 3,可以在顶级层中定义一个命令卷(例如:db-data),db-data 作为一个中间件,实际并不存在,只是为了做数据同步。(可以理解为vlan)

 version: "3"​services:​nginx:volumes:- db_data:/var/lib/dbmysql:volumes:- db_data:/var/lib/backup/data​volumes:       #在顶级层定义一个命令卷db_data:

2.4 Docker Compose 常用命令

命令描述
build重新构建服务
ps列出容器
up创建和启动容器
exec在容器里面执行命令
scale指定一个服务容器启动数量
top显示容器进程
logs查看容器输出
down删除容器、网络、数据卷和镜像
stop/start/restart停止/启动/重启服务

三、使用Docker-compose 搭建lnmp

3.1 Docker Compose 文件结构

 [root@zy7 compose_lnmp]# yum -y install tree​[root@zy7 compose_lnmp]# tree /opt/compose_lnmp/ -L 2/opt/compose_lnmp/├── docker-compose.yml├── mysql                            #创建模板脚本│   ├── Dockerfile                   #创建容器脚本│   ├── my.cnf                       #复制配置文件│   └── mysql-boost-5.7.20.tar.gz    #复制源码包├── nginx│   ├── Dockerfile│   └── nginx-1.12.0.tar.gz├── php│   ├── Dockerfile│   └── php-7.1.10.tar.bz2└── wwwroot├── index.html                   #站点网页├── wordpress                          └── wordpress-4.9.4-zh_CN.tar.gz

3.2 准备依赖文件,配置nginx

 #创建项目目录 compose_lnmp; #创建服务子目录[root@zy7 ~]# mkdir /opt/compose_lnmp/[root@zy7 ~]# cd /opt/compose_lnmp[root@zy7 compose_lnmp]# mkdir nginx mysql php wwwroot​#上传wordpress软件包,准备测试页面[root@zy7 compose_lnmp]# cd /opt/compose_nginx/wwwroot/[root@zy7 wwwroot]# lswordpress-4.9.4-zh_CN.tar.gz[root@zy7 wwwroot]# tar xf wordpress-4.9.4-zh_CN.tar.gz  [root@zy7 wwwroot]# echo "<h1>this is test web</h1>" > /opt/compose_lnmp/wwwroot/index.html​​#上传nginx软件包[root@zy7 compose_lnmp]# cd nginx/[root@zy7 nginx]# lsnginx-1.12.0.tar.gz ​​#编写nginx的Dockerfile文件[root@zy7 nginx]# vim Dockerfile#基于基础镜像FROM centos:7#用户信息MAINTAINER this is nginx image <yuji>#添加环境包RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ makeRUN useradd -M -s /sbin/nologin nginx#上传nginx软件压缩包,并解压ADD nginx-1.12.0.tar.gz /usr/local/src/#指定工作目录WORKDIR /usr/local/src/nginx-1.12.0RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module && make -j8&& make installENV PATH /usr/local/nginx/sbin:$PATH#修改nginx配置文件RUN sed -i 's/#charset koi8-r;/charset utf-8;/' /usr/local/nginx/conf/nginx.conf \&& sed -i '45 s/index  index.html index.htm;/index  index.html index.php;/' /usr/local/nginx/conf/nginx.conf \&& sed -i '65,71 s/#//' /usr/local/nginx/conf/nginx.conf \&& sed -i 's/fastcgi_pass   127.0.0.1:9000;/fastcgi_pass   172.18.0.30:9000;/' /usr/local/nginx/conf/nginx.conf \&& sed -i 's#/scripts#/usr/local/nginx/html#' /usr/local/nginx/conf/nginx.conf#也可以提前将修改好nginx.conf,放入nginx目录下,之后使用ADD指令复制到镜像中。则可避免在镜像中修改。#暴露端口EXPOSE 80EXPOSE 443#前台启动nginxENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

3.3 配置mysql

 #进入mysql子目录[root@zy7 ~]# cd /opt/compose_lnmp/mysql/#将mysql包上传到此目录[root@zy7 mysql]# lsmysql-boost-5.7.20.tar.gz​#编写mysql的Dockerfile文件[root@zy7 mysql]# vim DockerfileFROM centos:7MAINTAINER this is mysql image <zhi>RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake makeRUN useradd -M -s /sbin/nologin  mysqlADD 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 -j8 && make installRUN chown -R mysql:mysql /usr/local/mysql/ADD my.cnf /etc/RUN chown mysql:mysql /etc/my.cnfENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATHWORKDIR /usr/local/mysql/RUN bin/mysqld \--initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/dataRUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/EXPOSE 3306CMD /usr/local/mysql/bin/mysqld

编写myslq主配置文件my.cnf

 #配置myslq主配置文件my.cnf(用来复制到容器)[root@zy7 mysql]# vim my.cnf [client]port = 3306socket = /usr/local/mysql/mysql.sock​[mysql]port = 3306socket = /usr/local/mysql/mysql.sock​[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataport = 3306character_set_server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket = /usr/local/mysql/mysql.sockserver-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

3.4 配置php

 [root@zy7 compose_lnmp]# cd /opt/compose_lnmp/php/#将php包上传[root@zy7 php]# lsphp-7.1.10.tar.bz2​#编写php的Dockerfile[root@zy7 php]# vim DockerfileFROM centos:7MAINTAINER this is php image <yuji>RUN yum -y install gd \libjpeg libjpeg-devel \libpng libpng-devel \freetype freetype-devel \libxml2 libxml2-devel \zlib zlib-devel \curl curl-devel \openssl openssl-devel \gcc gcc-c++ make pcre-develRUN useradd -M -s /sbin/nologin nginxADD php-7.1.10.tar.bz2 /usr/local/src/WORKDIR /usr/local/src/php-7.1.10RUN ./configure \--prefix=/usr/local/php \--with-mysql-sock=/usr/local/mysql/mysql.sock \--with-mysqli \--with-zlib \--with-curl \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-openssl \--enable-fpm \--enable-mbstring \--enable-xml \--enable-session \--enable-ftp \--enable-pdo \--enable-tokenizer \--enable-zip && make && make installENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH​RUN \cp /usr/local/src/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini \&& sed -i 's#mysqli.default_socket =#mysqli.default_socket = /usr/local/mysql/mysql.sock#' /usr/local/php/lib/php.ini \&& sed -i '939 s#;date.timezone =#date.timezone = Asia/Shanghai#' /usr/local/php/lib/php.ini​RUN \cp /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf \&& sed -i '17 s/^;//' /usr/local/php/etc/php-fpm.conf​RUN \cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf \&& sed -i 's#user = nobody#user = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \&& sed -i 's#group = nobody#group = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \  && sed -i 's#listen = 127.0.0.1:9000#listen = 172.18.0.30:9000#' /usr/local/php/etc/php-fpm.d/www.conf​#也可以提前准备好php.ini、php-fpm.conf、www.conf这三个文件,放入php目录下,之后使用ADD指令复制到镜像中​EXPOSE 9000ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]

3.5 编写docker-compose.yml

 #先拉取镜像centos:7[root@zy7 compose_lnmp]# docker pull centos:7​[root@zy7 compose_lnmp]# vim /opt/compose_lnmp/docker-compose.yml#使用版本2(3版本不支持指令volumes_from)version: '2'​#使用services定义服务services:#配置nginx服务nginx:#设置容器名container_name: nginx#设置主机名为nginxhostname: nginx#使用dockerfile创建镜像。Dockerfile文件在当前目录的nginx目录下,文件名为Dockerfilebuild:#指定Dockerfile文件所在位置context: ./nginxdockerfile: Dockerfile#映射端口ports:- 1315:80- 1316:443#加入到lnmp网络中,使用ip172.18.0.0.10networks:lnmp:ipv4_address: 172.18.0.10#将当前目录下的wwwroot目录挂载到容器的/usr/local/nginx/html目录volumes:- ./wwwroot/:/usr/local/nginx/html#配置服务mysqlmysql:container_name: mysqlhostname: mysqlbuild:context: ./mysqldockerfile: Dockerfileports:- 3306:3306networks:lnmp:ipv4_address: 172.18.0.20#设置/usr/local/mysql目录为数据卷volumes:- /usr/local/mysql#配置服务php    php:hostname: phpbuild:context: ./phpdockerfile: Dockerfilecontainer_name: phpports:- 9000:9000networks:lnmp:ipv4_address: 172.18.0.30#从nginx容器和mysql容器获取数据卷    volumes_from:- nginx- mysql#php容器需要在nginx和mysql之后启动  depends_on:- nginx- mysql#php和容器nginx,容器mysql连接   links:- nginx- mysql#设置网络为自定义网络#配置网络模式和网络名      networks:#设置网络名lnmplnmp:#网络模式为bridge桥接模式driver: bridgeipam:config:#使用的网段为172.18.0.0/16- subnet: 172.18.0.0/16

运行docker-compose

 #在工作目录使用此命令。#-f: --file-name, 指定模板文件。默认为docker-compose.yml#-p: --project-name NAME ,指定项目名称,默认使用目录名#-d: 在后台运行[root@zy7 compose_lnmp]# docker-compose -f docker-compose.yml up -d​#在工作目录,使用 docker-compose ps 可以看到启动的容器状态[root@zy7 compose_lnmp]# docker-compose ps

进入mysql容器,进行用户授权

 #进入mysql容器,进行用户授权。[root@zy7 mysql]# docker exec -it mysql /bin/bash[root@mysql mysql]# mysql​mysql> create database wordpress;​mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by 'abc123';​mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';​mysql> flush privileges;

3.6 浏览器访问测试

 http://192.168.126.27:1315/wordpress/index.php   #在yaml文件中nginx端口映射为1315​http://192.168.126.27:1315/    #直接访问,可以看见创建的测试网页

相关文章:

使用 Docker-compose 搭建lnmp

服务编排&#xff1a; 应用编排&#xff1a; 单机环境下&#xff1a;shell/python脚本多机/集群环境下&#xff1a;ansible、saltstack、pubbet docker容器编排&#xff1a; 单机&#xff1a;docker-compose多机/集群&#xff1a;docker swarm&#xff0c;mesos marathon&a…...

chatgpt赋能python:Python中的矩阵合并方法:介绍和使用方法

Python中的矩阵合并方法: 介绍和使用方法 矩阵合并是Python编程中常用的操作之一&#xff0c;特别是针对数据分析、机器学习和深度学习等领域。Python提供了多种方法来合并矩阵&#xff0c;本文将介绍这些方法并分享如何在实际应用中使用它们。 普通矩阵合并 最基础的矩阵合…...

Java动态代理:优化静态代理模式的灵活解决方案

文章目录 代理模式定义具体实现分析优缺点 优化使用动态代理解决优化相关知识动态代理种类场景应用 代理模式 定义 代理模式&#xff0c;为其他对象提供一种代理以控制对这个对象的访问 具体实现 代理模式的具体实现描述可以分为以下几个步骤&#xff1a; 创建抽象对象接…...

四种Bootloader程序安全机制设计

正文 大家周末好&#xff0c;我是bug菌~ 不管是玩单片机还是嵌入式linux&#xff0c;基本上都会接触到bootloader&#xff0c;所以bootloader程序也是一个关键的组件&#xff0c;进行硬件初始化&#xff0c;应用程序的合法性、完成性检测、升级功能等等都与其息息相关。 像一些…...

【DBA 警世录之习惯性命令---读书笔记】

&#x1f448;【上一篇】 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 【下一篇】&#x1f449; &#x1f53b;【&#x1f4a3; 话题引入&#xff1a;既然 DBA 这个职业如此危险&#xff0c;那么哪些习惯是 DBA 必须养成的呢&#x…...

Vue中如何进行状态持久化(LocalStorage、SessionStorage)

Vue中如何进行状态持久化&#xff08;LocalStorage、SessionStorage&#xff09;&#xff1f; 在Vue应用中&#xff0c;通常需要将一些状态进行持久化&#xff0c;以便在用户关闭浏览器或刷新页面后&#xff0c;仍能保留之前的状态。常见的持久化方式包括LocalStorage和Sessio…...

【30天熟悉Go语言】6 Go 复杂数据类型之指针

文章目录 一、前言二、数据类型总览三、指针1、特殊运算符& *2、内存角度来看指针3、使用指针修改数据4、指针使用的注意事项5、对比着看Java的引用类型 三、总结 一、前言 Go系列文章&#xff1a; GO开篇&#xff1a;手握Java走进Golang的世界2 Go开发环境搭建、Hello Wor…...

Linux内核使用红黑树的场景

进程调度队列 (Process Scheduling)&#xff1a;内核需要对进程按照一定的调度策略进行排队&#xff0c;以便更好地利用 CPU 的时间片。因此&#xff0c;内核使用红黑树作为查找和管理进程调度队列的数据结构&#xff0c;以支持快速的查找、插入和删除操作。 文件系统 (File S…...

遗留的 AppSec 工具迷失在云端

随着应用程序开发步伐的加快&#xff0c;IT 和安全团队正在对旧的应用程序安全(AppSec) 工具失去信心。 根据 Backslash 对 300 名 CISO、AppSec 经理和工程师的调查&#xff0c;遗留工具无法跟上并陷入永远的追赶游戏。 影响是深远的&#xff0c;大多数组织都看到云原生 App…...

直流稳压电源与信号产生电路(模电速成)

目录 一、直流稳压电源 1、直流稳压电路 2、串联型稳压电路 3、集成稳压电路 二、信号产生电路 1、振荡电路 2、波形发生器 一、直流稳压电源 1、直流稳压电路 直流电源由 变压器、整流、滤波、稳压 四部分组成 整流&#xff1a;将交流变为直流 滤波&#xff1a;减小…...

0202性能分析-索引-MySQL

1 索引语法 创建索引 CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_column_name,...);Index_name&#xff1a;规范为idx_表名_字段名... 查看索引 SHOW INDEX FROM table_name;删除索引 DROP INDEX index_name ON table_name;按照下列要求&#xff0c;创建…...

Play wright自动化测试工具该如何更加完美地使用

目录 1.1 拦截网络请求 1.2 pytest 管理用例 1.3 PO模型 1.4 API 和 UI 自动化测试融合 1.5 数据驱动 1.6 动态挑选用例执行 1.6 Allure测试报告 1.7 持续集成 1.1 拦截网络请求 网络拦截&#xff1a; 无响应 pass 中止 route.abort("aborted") 放行 route…...

数据可视化学习笔记:Python实现汽车品牌销售量矩形树图

引言 本文将介绍如何使用 Python 和 Pyecharts 库创建一个汽车品牌销售量的矩形树图。我们将使用 Pandas 读取 CSV 文件数据,然后对数据进行处理、封装,最后将数据可视化为矩形树图。 准备工作 首先,我们需要先安装好相关库: PandasPyecharts可以使用 pip 命令进行安装:…...

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业

0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv&#xff0c;绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…...

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持

文章目录 零、学习目标一、Spring MVC 自动配置&#xff08;一&#xff09;自动配置概述&#xff08;二&#xff09;Spring Boot整合Spring MVC 的自动化配置功能特性 二、Spring MVC 功能拓展实现&#xff08;一&#xff09;创建Spring Boot项目 - SpringMvcDemo2021&#xff…...

chatgpt赋能python:Python安装EGG——一个简单的指南

Python安装EGG——一个简单的指南 如果你使用Python有一段时间了&#xff0c;你可能会遇到需要安装扩展包&#xff08;Package&#xff09;的情况。在Python中&#xff0c;这些扩展包的文件格式通常是.egg&#xff08;Easy Installable GZip&#xff09;。在本文中&#xff0c…...

Web前端-React学习

React基础 React 概述 React 是一个用于构建用户界面的JavaScript库。 用户界面&#xff1a; HTML页面&#xff08;前端&#xff09; React主要用来写HTML页面&#xff0c; 或构建Web应用 如果从MVC的角度来看&#xff0c;React仅仅是视图层&#xff08;V&#xff09;,也就…...

【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息

github仓库&#xff1a;https://github.com/open-rust-initiative/sensleak-rs Rust是一门神奇的编程语言&#xff0c;它提供了内存安全、零成本抽象、并发安全等特性&#xff0c;使开发人员能够编写高性能、高抽象和安全的代码。 这是我用rust开发的第一个工作&#xff0c;希望…...

搭建一个定制版New Bing吧

项目介绍 项目地址&#xff1a;https://github.com/adams549659584/go-proxy-bingai 引用项目简介&#xff1a;用 Vue3 和 Go 搭建的微软 New Bing 演示站点&#xff0c;拥有一致的 UI 体验&#xff0c;支持 ChatGPT 提示词&#xff0c;国内可用&#xff0c;国内可用&#xff…...

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻&#xff0c;上周Quest 3发布之后&#xff0c;本周苹果MR头显Vision Pro正式发布&#xff0c;也是本周AR/VR新闻的重头戏。 ​AR方面&#xff0c;苹果发布VST头显Vision Pro&#xff08;虽然本质是台VR&#xff0c;但以AR场景为核心&#xff09;以及visionOS&…...

在Spring Boot微服务使用JedisCluster操作Redis集群String字符串

记录&#xff1a;449 场景&#xff1a;在Spring Boot微服务使用JedisCluster操作Redis集群的String字符串数据类型。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。 1.微服务中配置Redis信息 1.1在pom.xml添加依赖 pom.xml文件&#xff1a; <…...

5.1 合并数据

5.1 合并数据 5.1.1 堆叠合并数据1、横向堆叠 concat()2、纵向堆叠 concat()和append() 5.1.2 主键合并数据 merge()和join()5.1.3 重叠合并数据 combine_first() 5.1.1 堆叠合并数据 堆叠就是简单地把两个表拼在一起&#xff0c;也被称作轴向连接、绑定或连接。依照连接轴的方…...

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根&#xff0c;不使用库函数。保留一位小数。 数据范围&#xff1a;∣val∣≤20 。 二、输入描述 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…...

初探BERTPre-trainSelf-supervise

初探Bert 因为一次偶然的原因&#xff0c;自己有再次对Bert有了一个更深层地了解&#xff0c;特别是对预训练这个概念&#xff0c;首先说明&#xff0c;自己是看了李宏毅老师的讲解&#xff0c;这里只是尝试进行简单的总结复述并加一些自己的看法。 说Bert之前不得不说现在的…...

Ficus 第二弹,突破限制器的 Markdown 编辑管理软件!

大家好&#xff0c;我们是 ggG 团队&#xff0c;我们开发的 markdown 笔记管理软件 Ficus Beta 版本正式发布了。详情可以见我们官网&#xff0c;也可以来我们仓库查看。 相对于 Alpha 版本&#xff08;可以在我们之前的博客中查看&#xff09;&#xff0c;主要有 3 点明显的提…...

基于Springboot+vue+协同过滤+前后端分离+鲜花商城推荐系统(用户,多商户,管理员)+全套视频教程

基于Springbootvue协同过滤前后端分离鲜花商城推荐系统(用户,多商户,管理员)(毕业论文11000字以上,共33页,程序代码,MySQL数据库) 代码下载: 链接&#xff1a;https://pan.baidu.com/s/1mf2rsB_g1DutFEXH0bPCdA 提取码&#xff1a;8888 【运行环境】Idea JDK1.8 Maven MySQL…...

MixQuery系列(一):多数据源混合查询引擎调研

背景 存储情况 当前的存储引擎可谓百花齐放,层出不穷。为什么会这样了?因为不存在One for all的存储,不同的存储总有不同的存储的优劣和适用场景。因此,在实际的业务场景中,不同特点的数据会存储到不同的存储引擎里。 业务挑战 然而异构的存储和数据源,却给分析查询带…...

d2l学习——第一章Introduction

x.0 环境配置 使用d2l库&#xff0c;安装如下&#xff1a; conda create --name d2l python3.9 -y conda activate d2lpip install torch1.12.0 torchvision0.13.0 pip install d2l1.0.0b0mkdir d2l-en && cd d2l-en curl https://d2l.ai/d2l-en.zip -o d2l-en.zip u…...

【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式

标题的格式 二级标题&#xff1a; 数字.数字. 文字 三级标题&#xff1a;数字.数字.数字 文字 python代码 使用方法 只保留一个需要应用的WORD文档运行程序&#xff0c;逐行匹配 使用效果 代码 import win32com.client import redef compile_change_Word_titlestyle():#…...

阳江市网站建设/网站建设需求模板

***********************************************声明************************************************************ 原创作品&#xff0c;出自 “晓风残月xj” 博客&#xff0c;欢迎转载&#xff0c;转载时请务必注明出处&#xff08;http://blog.csdn.net/xiaofengcanyuex…...

郑州树标网站建设/腾讯云域名购买

类内部Hack&#xff1a; IE6 识别下划线 _ 和 * IE7 识别 * (不能识别 _ ) FF两个都不能识别 选择器Hack&#xff1a; IE6能识别 *html IE7能识别 *html 或 *:first-childhtml HTML头部引用(if IE)Hack&#xff1a; 所有IE&#xff1a;&…...

wordpress一键分享代码/百度关键词点击器

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。 DELETE products PUT products {"settings": {"number_of_shards": 1} }POST /products/_bulk { "index": { "_id": 1 }} { "prod…...

下载网站的表格要钱如何做/企业网站制作哪家好

各种算法学习集合 https://github.com/youngyangyang04/leetcode-master 方法介绍 前缀树、字典树 https://blog.csdn.net/weixin_39778570/article/details/81990417 // 侧面有好多的算法集合 https://baike.baidu.com/item/%E5%AD%97%E5%85%B8%E6%A0%91/9825209?fro…...

网页与网站的区别与联系/重庆的seo服务公司

word生成pdf保留书签设置 点击“另存为”选项&#xff1a; 在另存为界面选择保存为pdf&#xff0c;如下&#xff0c;会出现“选项”设置项&#xff0c;点击进入&#xff1a; 在选项中&#xff0c;设置需要的设置&#xff0c;若要将pdf保留word中的标题作为书签&#xff0c;则…...

实时新闻/seo权重优化软件

简介在早前的博客中曾经写过 Spring 程序通过 Bean 映射实现配置信息的读取。 在SpringBoot 框架中读取配置的方式变得非常多样&#xff0c;这导致读者在搜寻资料时反而容易迷糊。到底&#xff0c;SpringBoot 是按什么顺序加载配置&#xff1f;相应的&#xff0c;我们该选择什么…...