Docker 常用服务 安装使用 教程

Docker安装常用服务

1、 安装mysql

# 1.拉取mysql镜像到本地
docker pull mysql:tag (tag不加默认最新版本)
# 2.运行mysql服务
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:tag --没有暴露外部端口外部不能连接
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag --暴露外部端口外部能连接(前提是防火墙开放暴露的端口并且端口不能冲突)
# 3.进入mysql容器
docker exec -it 容器名称|容器id bash
# 4.外部查看mysql日志
docker logs 容器名称|容器id
# 5.mysql容器启动配置
docker run --name mysql -v /root/mysql/data:/var/lib/mysql -v /home/mysql/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag
    配置项说明:
  • -v /root/mysql/data:/var/lib/mysql:挂载数据
  • -v /home/mysql/my.cnf:/etc/my.cnf:挂载mysql配置文件(根据自己容器内的配置位置,可以进入容器使用find / -name my.cnf 查询配置文件所在位置)
  • -e MYSQL_ROOT_PASSWORD=root:设置root账号的密码
    
# 6.通过其他客户端访问 如在window系统|macos系统使用客户端工具访问可以实现数据的备份(客户端工具方式)
# 7.将mysql数据库备份为sql文件(命令方式)
docker exec mysql|容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出全部数据
docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据
docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据不要数据
# 9.执行sql文件到mysql中
docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql

2、 安装Redis服务

# 1.在docker hub搜索redis镜像
docker search redis
# 2.拉取redis镜像到本地
docker pull redis

# 3.挂载配置文件
(1)创建配置文件
touch redis.conf

(2)修改配置文件
 vim redis.conf


(3)添加如下配置
 bind 0.0.0.0                                              ----------开启远程访问

 appendonly yes                                        ---------开启持久化
 appendfilename "appendonly.aof"           ----------持久化文件名称
 requirepass 123456                                 ----------设置密码
# 4.启动redis服务运行容器(基础)
docker  run  --name  redis  --network  3c  -p  6379:6379  -v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  -v /home/redis/db:/data  --restart=always  -d  redis:5.0.10  redis-server  /usr/local/etc/redis/redis.conf 
配置项说明:
  • -v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:挂载配置文件
  • -v /home/redis/db:/data:挂载数据实现持久化
  • --restart=always:设置redis容器随docker启动而自启动
  • redis-server  /usr/local/etc/redis/redis.conf:指定redis在docker中的配置文件路径
# 5.查看启动日志
docker logs -t -f 容器id|容器名称
# 6.进入容器内部查看
docker exec -it 容器id|名称 bash

3、 安装Nginx

# 1.在docker hub搜索nginx
docker search nginx
# 2.拉取nginx镜像到本地(如下下载没有指定版本默认下载最新版本)
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
# 3.启动nginx容器(基础)
docker run --name nginx01 -p 80:80 -d nginx:1.19.10
# 4.进入容器
docker exec -it nginx01 bash
查找nginx目录:
find / -name 'nginx' -------------------关于nginx的所有目录
find / -name 'nginx.conf' --------------nginx的配置文件所在目录(/etc/nginx/nginx.conf
find / -name 'index.html' --------------nginx的index页面所在目录也是nginx的资源目录(/usr/share/nginx/html/index.html
# 5.然后退出容器到宿主机
exit
# 6.复制配置文件到宿主机
docker cp nginx01(容器id|容器名称):/etc/nginx/nginx.conf 宿主机目录
例如:docker cp nginx-test:/etc/nginx/nginx.conf ./
# 7.挂在nginx配置以及html到宿主机外部
docker run --name nginx02 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html -p 80:80 -d nginx:1.19.10
nginx可以作为负载均衡,也可以作为服务器使用。

4、 安装Tomcat

# 1.在docker hub搜索tomcat
docker search tomcat
# 2.下载tomcat镜像
docker pull tomcat
# 3.运行tomcat镜像
docker run -p 8080:8080 -d --name mytomcat tomcat
# 4.进入tomcat容器
docker exec -it mytomcat bash
# 5.将webapps目录挂载在外部
docker run -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps -d --name mytomcat tomcat
#注意:如果挂载server.xml配置文件,挂载的路径要精确到server.xml文件
#如下示例:
docker run --name hkht-tomcat -p 8081:8081 -v /data/hkht/tomcat/webapps:/usr/local/tomcat/webapps -v /data/hkht/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml -d tomcat:8.0-jre8
#这里再注意:下面的图片中挂载配置文件是直接挂载到conf文件,暂时不知道什么原因,但是在实践中挂载到conf不精确到配置文件,访问前端资源是无法访问的(前后端不分离的web项目)。
#还有就是这里选用tomcat的8.0-jre8镜像而不是单独的版本号8.0,因为没有单独的下载jdk镜像,如果要是用8.0需采用dockerfile进行打包,我是直接下载了包含jre的tomcat,这样就可以运行项目了(前后端不分离的web项目)。

5、 安装MongoDB数据库

# 1.运行mongDB
docker run -d -p 27017:27017 --name mymongo mongo ---无须权限
docker logs -f mymongo ---查看mongo运行日志
# 2.进入mongodb容器
docker exec -it mymongo bash
直接执行mongo命令进行操作
# 3.常见具有权限的容器
docker run --name mymongo -p 27017:27017 -d mongo --auth
# 4.进入容器配置用户名密码
mongo
use admin 选择admin库
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证
exit
# 5.将mongoDB中数据目录映射到宿主机中
docker run -d -p 27017:27017 -v /root/mongo/data:/data/db --name mymongo mongo

6、 安装ElasticSearch

  • 注意: 调高JVM线程数限制数量

0.拉取镜像运行elasticsearch

# 1.dockerhub 拉取镜像
docker pull elasticsearch:6.4.2
# 2.查看docker镜像
docker images
# 3.运行docker镜像
docker run -p 9200:9200 -p 9300:9300 elasticsearch:6.4.2
  • 启动出现如下错误

1. 预先配置

# 1.在centos虚拟机中,修改配置sysctl.conf
vim /etc/sysctl.conf
# 2.加入如下配置
vm.max_map_count=262144
# 3.启用配置
sysctl -p
注:这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

2.启动EleasticSearch容器

# 0.复制容器中data目录到宿主机中
docker cp 容器id:/usr/share/share/elasticsearch/data /root/es
# 1.运行ES容器 指定jvm内存大小并指定ik分词器位置
docker run -d --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms128m -Xmx128m" -v /root/es/plugins:/usr/share/elasticsearch/plugins -v /root/es/data:/usr/share/elasticsearch/data elasticsearch:6.4.2

3.安装IK分词器

# 1.下载对应版本的IK分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip
# 2.解压到plugins文件夹中
yum install -y unzip
unzip -d ik elasticsearch-analysis-ik-6.4.2.zip
# 3.添加自定义扩展词和停用词
cd plugins/elasticsearch/config
vim IKAnalyzer.cfg.xml
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopwords.dic</entry>
</properties>
# 4.在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效
vim ext_dict.dic 加入扩展词即可
# 5. 在ik分词器目录下config目录中创建ext_stopword.dic文件
vim ext_stopwords.dic 加入停用词即可
# 6.重启容器生效
docker restart 容器id
# 7.将此容器提交成为一个新的镜像
docker commit -a="xiaochen" -m="es with IKAnalyzer" 容器id xiaochen/elasticsearch:6.4.2

4. 安装Kibana

# 1.下载kibana镜像到本地
docker pull kibana:6.4.2
# 2.启动kibana容器
docker run -d --name kibana -e ELASTICSEARCH_URL=http://10.15.0.3:9200 -p 5601:5601 kibana:6.4.2

7.docker可视化工具

7.1 安装Portainer

官方安装说明: https://www.portainer.io/installation/
[root@ubuntu1804 ~]#docker pull portainer/portainer
# -d:后台启动,-p:映射端口,--name:容器名称,--restart=always:开机自启动,-v:挂在
[root@ubuntu1804 ~]#docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
20db26b67b791648c2ef6aee444a5226a9c897ebcf0160050e722dbf4a4906e3
[root@ubuntu1804 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20db26b67b79 portainer/portainer "/portainer" 5 seconds ago Up 4 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer

7.2 登录和使用Portainer

用浏览器访问: http://localhost:9000

7.3 忘记admin的密码,重置并查看密码

#查看容器
docker ps
#查看容器详情
docker inspect 容器id/名称
#复制图中目录地址
#执行如下命令:docker run --rm -v 挂在目录地址:/data portainer /helper-reset-password
docker run --rm -v /var/lib/docker/volumes/436d93252d9a382768eab7e9b7a29b8a10cbbf990257e37c9171eedc8df21c2e/_data:/data portainer/helper-reset-password
#然后重新启动portainer
docker start portainer
#再次访问登录

8.安装Traefik

官网地址:Traefik Labs: Say Goodbye to Connectivity Chaos

1、什么是Traefik

    Traefik 是一种开源 边缘路由器,它使您发布服务成为一种有趣而轻松的体验。它代表您的系统接收请求并找出哪些组件负责处理它们。
    Traefik 的与众不同之处在于,除了它的许多功能之外,它还可以自动为您的服务发现正确的配置。当 Traefik 检查您的基础架构时,奇迹就会发生,它会在其中找到相关信息并发现哪个服务服务于哪个请求。
    Traefik 原生兼容所有主要的集群技术,例如 Kubernetes、Docker、Docker Swarm、AWS、Mesos、Marathon,等等并且可以同时处理很多。(它甚至适用于在裸机上运行的遗留软件。)
     使用 Traefik,无需维护和同步单独的配置文件:一切都自动实时发生(无需重启,无连接中断)。使用 Traefik,您可以花时间为系统开发和部署新功能,而不是配置和维护其工作状态。

2、概念

Traefik 基于入口点、路由器、中间件和服务的概念。
主要功能包括动态配置、自动服务发现以及对多个后端和协议的支持。
  • EntryPoints:  是进入 Traefik 的网络入口点。 它们定义将接收数据包的端口,以及是否监听 TCP 或 UDP。
  • 路由器:  路由器负责将传入请求连接到可以处理它们的服务。
  • 中间件:  附加到路由器,中间件可以在发送到您的服务之前修改请求或响应。
  • 服务:  服务负责配置如何到达最终将处理传入请求的实际服务。
Traefik 是一个Edge Router,这意味着它是您平台的大门,它拦截并路由每个传入请求:它知道确定哪些服务处理哪些请求的所有逻辑和每条规则(基于pathhost头等)。

传统上边缘路由器(或反向代理)需要一个配置文件,其中包含到您的服务的每条可能路径,Traefik 从服务本身获取它们。
部署您的服务,您附加信息告诉 Traefik 服务可以处理的请求的特征。

这意味着当一个服务被部署时,Traefik 会立即检测到它并实时更新路由规则。同样,当一个服务从基础设施中移除时,对应的路由也会相应地被删除。
您不再需要创建和同步混杂着 IP 地址或其他规则的配置文件。

3、快速入门(使用docker-compose启动)

    3.1、阿里云
        
        3.1.1、首先需要有阿里云域名,然后就是需要有一台服务器哪个平台购买的无所谓,注意域名需要是备案过的。

        3.1.2、添加域名解析

        3.1.3、添加密钥和RAM角色

        
        添加密钥

        添加RAM角色,首先选择创建角色指定角色名称,然后分配权限, 通过关键字搜索授权策略AliyunACMFullAccess, 点击授权策略,将其添加到右侧选中的授权列表中,点击确定。

        3.1.4、创建 docker-compose.yml文件

touch docker-compose.yml

        3.1.5、创建本地网络

docker network create proxy

        3.1.6、编写traefik的docker-compose.yml

version: '3.8'
# 网络
networks:
  proxy:
    external: true
# 定义数据卷
volumes:
  acme:
services:
  # 服务名称
  traefik:
    # 镜像
    image: traefik:v2.5.4
        # 网络
    networks:
       - proxy
    # 端口
    ports:
        - "80:80"
        - "443:443"
        - "8080:8080"
    volumes:
        # 时区
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
        # 使Traefik 能够监听 Docker 事件
        - /var/run/docker.sock:/var/run/docker.sock
        # 生成持久化acme证书
        - acme:/etc/acme
    # 密钥位置
    env_file:
        - ./.alidns.env
    command:
        # 是否开启api的路由转发功能
        - --api.insecure=true
        # 底层代理的是什么
        - --providers.docker
        # 使用docker的那个网络
        - --providers.docker.network=proxy
        # 是否暴露docker
        - --providers.docker.exposedByDefault=false
      # web
        # web端口
        - --entryPoints.web.address=:80
        # 是否将http重定向
        - --entrypoints.web.http.redirections.entrypoint.permanent=true
        # 重定向的类别
        - --entrypoints.web.http.redirections.entrypoint.scheme=https
        # 重定向入口
        - --entrypoints.web.http.redirections.entrypoint.to=websecure
      # websecure
        # websecure端口
        - --entryPoints.websecure.address=:443
        # 是否自动申请证书
        - --entrypoints.websecure.http.tls=true
        # 证书申请厂商
        - --entrypoints.websecure.http.tls.certresolver=ali
        # 申请的主域名
        - --entrypoints.websecure.http.tls.domains[0].main=wuxinkeoo.top
        # 扫描该层级域名的所有域名
        - --entrypoints.websecure.http.tls.domains[0].sans=*.wuxinkeoo.top
      # Let's Encrypt
        # 申请厂商
        - --certificatesresolvers.ali.acme.dnschallenge.provider=alidns
        # 邮箱
        - --certificatesresolvers.ali.acme.email=wuxinke.oo@gmail.com
        # 申请证书存储位置
        - --certificatesresolvers.ali.acme.storage=/etc/acme/acme.json
    # 描述
    labels:
        是否交给traefik管理
        - "traefik.enable=true"
        # 路由入口
        - "traefik.http.routers.traefik.entrypoints=web, websecure"
        # 路由规则
        - "traefik.http.routers.traefik.rule=Host(`proxy.wuxinkeoo.top`)"
        # 路由端口
        - "traefik.http.services.traefik.loadbalancer.server.port=8080"

        3.1.7、创建.alidns.env文件,然后填写厂商密钥

touch .alidns.env
        

        3.1.8、将密钥和RAM角色信息编写到.alidns.env

ALICLOUD_ACCESS_KEY=LTAIxxxxxxxxxxxxxxxxxxx
ALICLOUD_SECRET_KEY=VMy3xxxxxxxxxxxxxxxxxxx
ALICLOUD_REGION_ID=root
  

        3.1.9、启动

docker-compose up -d
    

        3.1.10、访问

    3.2、腾讯云
    
        3.2.1、首先需要有腾讯云域名,然后就是需要有一台服务器哪个平台购买的无所谓,注意域名需要是备案过的。

        3.2.2、添加域名解析(腾讯不支持使用通配符*,所以只能具体表明)

        3.2.3、创建访问密钥(如果已经存在使用之前的就可以了)
    快速访问地址:登录 - 腾讯云
        3.2.4、创建docker-compose
touch docker-compose.yml
        3.2.5、创建网络
docker network create proxy
        3.2.6、创建.tencentcloud.env
touch .tencentcloud.env
        3.2.7、将密钥编写到.tencentcloud.env
TENCENTCLOUD_SECRET_ID=AKIxxxxxxxxxxxxxxxx
TENCENTCLOUD_SECRET_KEY=rSpxxxxxxxxxxxxxxx
        3.2.8、编写docker-compose.yml文件
version: '3.8' 
# 网络
networks: 
  proxy:
    external: true
# 定义数据卷
volumes: 
  acme:
services:
  # 服务名称
  traefik:
    # 镜像
    image: traefik:v2.5.4
        # 网络
    networks:
       - proxy
    # 端口
    ports:
        - "80:80"
        - "443:443"
        - "8080:8080"
    volumes:
        # 时区
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
        # 使Traefik 能够监听 Docker 事件
        - /var/run/docker.sock:/var/run/docker.sock
        # 生成持久化acme证书
        - acme:/etc/acme
    # 密钥位置
    env_file:
        - ./.tencentcloud.env
    command:
        # 是否开启api的路由转发功能
        - --api.insecure=true
        # 底层代理的是什么
        - --providers.docker
        # 使用docker的那个网络
        - --providers.docker.network=proxy
        # 是否暴露docker
        - --providers.docker.exposedByDefault=false
      # web
        # web端口
        - --entryPoints.web.address=:80
        # 是否将http重定向
        - --entrypoints.web.http.redirections.entrypoint.permanent=true
        # 重定向的类别
        - --entrypoints.web.http.redirections.entrypoint.scheme=https
        # 重定向入口
        - --entrypoints.web.http.redirections.entrypoint.to=websecure
      # websecure
        # websecure端口
        - --entryPoints.websecure.address=:443
        # 是否自动申请证书
        - --entrypoints.websecure.http.tls=true
        # 证书申请厂商
        - --entrypoints.websecure.http.tls.certresolver=tencent
        # 申请的主域名
        - --entrypoints.websecure.http.tls.domains[0].main=wuxinke.com
        # 扫描该层级域名的所有域名
        - --entrypoints.websecure.http.tls.domains[0].sans=*.wuxinke.com
      # Let's Encrypt
        # 申请厂商
        - --certificatesresolvers.ali.acme.dnschallenge.provider=tencentcloud
        # 邮箱
        - --certificatesresolvers.ali.acme.email=wuxinke.oo@gmail.com
        # 申请证书存储位置
        - --certificatesresolvers.ali.acme.storage=/etc/acme/acme.json
    # 描述
    labels:
        # 是否交给traefik管理
        - "traefik.enable=true"
        # 路由入口
        - "traefik.http.routers.traefik.entrypoints=web, websecure"
        # 路由规则
        - "traefik.http.routers.traefik.rule=Host(`proxy.wuxinke.com`)"
        # 路由端口
        - "traefik.http.services.traefik.loadbalancer.server.port=8080"
    
        注意:服务器记得开放8080端口
        3.2.9、启动
docker-compose up -d
        3.2.10、访问测试
    注意:访问时他会提示,HTTPS协议不安全,暂时还没得到解决。

 

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

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

相关文章

CSS判断手机暗黑模式

手机有个功能到了晚上会自动变成深色也就是暗黑模式.这种情况下网页会自动变颜色.如果想自由控制暗黑模式下的html样式的话,可以用如下方式: media (prefers-color-scheme: dark) {/*html, body {*//*filter: invert(1) hue-rotate(180deg);*//*}*/.maill{margin-left: 0;marg…

[HNCTF 2022] web 刷题记录

文章目录 [HNCTF 2022 Week1]easy_html[HNCTF 2022 Week1]easy_upload[HNCTF 2022 Week1]Interesting_http[HNCTF 2022 WEEK2]ez_SSTI[HNCTF 2022 WEEK2]ez_ssrf [HNCTF 2022 Week1]easy_html 打开题目提示cookie有线索 访问一下url 发现要求我们输入手机号&#xff0c;可是只…

使用 zipfile创建文件压缩工具

在本篇博客中&#xff0c;我们将使用 wxPython 模块创建一个简单的文件压缩工具。该工具具有图形用户界面&#xff08;GUI&#xff09;&#xff0c;可以选择源文件夹中的文件&#xff0c;将其压缩为 ZIP 文件&#xff0c;并将压缩文件保存到目标文件夹中。 C:\pythoncode\new\z…

[C/C++]天天酷跑超详细教程-中篇

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

探索UniApp分包

目录 什么是UniApp分包&#xff1f; UniApp分包的原理 优势 如何使用UniApp分包 1.manifest.json文件配置 2.静态图片资源分包注意事项 3.pages.json配置 结论 探索UniApp分包&#xff1a;优化移动应用性能与用户体验 在移动应用开发领域&#xff0c;性能和用户体验是至…

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用&#xff1a; Linux命令的帮助信息查看 --help command --help 说明&#xff1a; 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls&#xff0c;pwd&#xff0c…

多应用模式下,忽略项目的入口文件,重写Apache规则

多应用模式下&#xff0c;忽略项目的入口文件&#xff0c;重写Apache规则 首先&#xff0c;我的项目是具有两个应用&#xff0c;admin和index,同时给它们绑定了域名&#xff0c;但是每次访问时都需要加入项目的入口文件地址 index.php ,为了忽略这个入口文件&#xff0c;只能通…

leetcode236. 二叉树的最近公共祖先(java)

二叉树的最近公共祖先 题目描述递归法代码演示 上期经典 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q …

良品铺子聚焦高品质,打造零食王国

出品| 大力财经 文 | 魏力 8月29日&#xff0c;休闲食品企业良品铺子发布2023年半年报显示&#xff0c;实现营业收入39.87亿元&#xff0c;归母净利润1.89亿元。 值得注意的是&#xff0c;在全球经济增速不强的背景下&#xff0c;良品铺子上半年&#xff0c;新开店323家&#…

Ubuntu 18.04上无法播放MP4格式视频解决办法

ubuntu18.04系统无法播放MP4格式视频&#xff0c;提示如下图所示&#xff1a; 解决办法&#xff1a; 1、首先&#xff0c;确保ubuntu系统已完全更新。可使用以下命令更新软件包列表&#xff1a;sudo apt update&#xff0c;然后使用以下命令升级所有已安装的软件包&#xff1a…

【SQL应知应会】索引 • Oracle版:B-树索引;位图索引;函数索引;单列与复合索引;分区索引

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文免费学习&#xff0c;自发文起3天后&#xff0c;会收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle …

深入剖析 Golang 程序启动原理 - 从 ELF 入口点到GMP初始化到执行 main!

大家好&#xff0c;我是飞哥&#xff01; 在过去的开发工作中&#xff0c;大家都是通过创建进程或者线程来工作的。Linux进程是如何创建出来的&#xff1f; 、聊聊Linux中线程和进程的联系与区别&#xff01; 和你的新进程是如何被内核调度执行到的&#xff1f; 这几篇文章就是…

K 次取反后最大化的数组和【贪心算法】

1005 . K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可能…

打击儿童性虐待,遭多家机构反对,苹果宣布停止开发CSAM检测计划

据报道&#xff0c;苹果公司曾计划在其iCloud云服务中引入一项儿童性虐待资料&#xff08;CSAM&#xff09;检测计划&#xff0c;但由于反对声浪日益高涨&#xff0c;该计划最终宣布停止开发。CSAM检测计划的原本目的是为了帮助阻止儿童性虐待资料的传播&#xff0c;保护儿童的…

Go操作各大消息队列教程(RabbitMQ、Kafka)

Go操作各大消息队列教程 1 RabbitMQ 1.1 概念 ①基本名词 当前市面上mq的产品很多&#xff0c;比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。 Broker&#xff1a;表示消息队列服务实体Virtual Host&#x…

关于购买AirPods,现在是否为最佳时机?

我们不需要解释你为什么想要AirPods。苹果对真正的无线耳机的采用彻底改变了市场&#xff0c;并从那时起大量销售。你总是在记者、同事和名人的耳朵里看到它们——尤其是在我们这个远程工作和Zoom会议的时代。 真正的问题是&#xff0c;你应该现在就买一个&#xff0c;还是在几…

MySQL索引,事务和存储引擎

一、索引 1、索引的概念 ●索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;。 ●使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先…

博流RISC-V芯片Eclipse环境搭建

文章目录 1、下载 Eclipse2、导入 bouffalo_sdk3、编译4、烧录5、使用ninja编译 之前编译是通过 VSCode 编译&#xff0c;通过手工输入 make 命令编译&#xff0c;我们也可以通过 Eclipse 可视化 IDE 来编译、烧录。 1、下载 Eclipse 至 Eclipse 官网 https://www.eclipse.org…

IntelliJ IDEA 2023.2.1 Android开发变化

IntelliJ IDEA 2023.2.1之前的版本&#xff0c;Empty Activity是指Empty View Activity&#xff0c;而现在Empty Activity是指Empty Compose Activity&#xff0c;另外多了一个Empty View Activity的选项 这表明官方推荐使用Compose这种声明式的编程方式来描述UI&#xff0c;命…

springboot上线打包+vuecli2部署在linux服务器上(打包上线)

这里也是记录一下springboot的上线打包流程,我这里前端使用的是vuecli2 springboot的依赖是2.7.9的版本 前端是使用的vue2 打包前,你的linux上必须要先安装,tomcat\java\nginx springboot打包 springboot打包点击一下,等maven编译打包成功在target文件下找到,jar包, 然后,把j…