【docker-compose】安装及配置
目录
- 安装
- 在线安装
- 离线安装
- 配置
- mysql5.7
- bitnami/mysql8.3
- redis
- web前后台分离部署
- 前端https(SSL)配置
- nginx动态传参
- 资源限制:内存、cpu
- nacos+sentinel+gateway
- 问题汇总
- iptables No chain/target/match by that name
- docker-compose.yml修改mysql密码,重启后不生效
安装
前提:!注意先安装docker
在线安装
# 下载某版本docker-compose文件并改名docker-compose移动至/usr/local/bin
curl -L "https://github.com/docker/compose/releases/download/1.28.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 授权docker-compose可执行
chmod +x /usr/local/bin/docker-compose
# 查看是否安装成功
docker-compose -v
离线安装
需要先下载好docker-compose文件
# 授执行权限
chmod +x docker-compose
# 移动至/usr/bin
cp docker-compose /usr/bin
# 查看是否安装成功
docker-compose -V
配置
mysql5.7
- !!!注意需要给/docker_mysql/data目录授读写权限, 例如
chmod 777 data version为2和3时都可以
version: '3'
services:mysql57:image: mysql:5.7container_name: mysql5.7restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: "123456"TZ: Asia/ShanghaiMYSQL_USER: testMYSQL_PASSWORD: Test@123456# 指定启动命令和配置参数# command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"ports:- 3307:3306volumes:- ./docker_mysql/log:/var/log/mysql- ./docker_mysql/data:/var/lib/mysql- ./docker_mysql/conf:/etc/mysql/conf.d
bitnami/mysql8.3
有一次离线部署,docker官方mysql镜像
docker load无法成功,改为bitnami版才成功
- !!!注意需要给/docker_mysql/data目录授读写权限, 例如
chmod 777 data - bitnami版配置
version必须为2时以下配置才会生效 version为3时容器虽然运行成功,但密码等配置都无法生效- 官网文档
version: '2'
services:mysql:image: bitnami/mysql:8.3container_name: mysql8restart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_USER=prism- MYSQL_PASSWORD=123456- MYSQL_DATABASE=mydatabaseports:- 3307:3306volumes:- ./docker_mysql/data:/bitnami/mysql/data
redis
- /docker_redis目录下放入配置文件
redis.conf#开启远程可连接 #bind 127.0.0.1 #自定义密码 requirepass 123456 #指定 Redis 监听端口(默认:6379) port 6379 #客户端闲置指定时长后关闭连接(单位:秒。0:关闭该功能) timeout 0 #是否压缩数据存储(默认:yes。Redis采用LZ 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大) rdbcompression yes #指定本地数据文件名(默认:dump.rdb) dbfilename dump.rdb #指定本地数据文件存放目录 dir /data #指定日志文件位置(如果是相对路径,redis会将日志存放到指定的dir目录下) logfile "redis.log" - 启动后,可进入容器通过
redis-cli测试,例如auth 密码测试自定义密码是否生效 - !!!注意,如果是先启动的话会自动生成映射目录,其中redis.conf文件会被映射成为目录而不是文件,需要修改后重启
redis:image: redis:6.2.6container_name: redisrestart: alwaysvolumes:- ./docker_redis/redis.conf:/etc/redis/redis.conf- ./docker_redis/data:/data- ./docker_redis/logs:/logscommand: redis-server /etc/redis/redis.confports:- "6380:6379"
web前后台分离部署
后端镜像
web-server基于openjdk:8-alpine镜像制成,前端镜像web-front基于nginx镜像制成
version为2时需要增加links配置才能将后端服务web-server传入前端服务web-front内部的nginx配置用于反向代理,为3时不需要links配置即可实现- 若后端程序连接的
mysql也是通过该docker-compose部署的,则可在配置里不使用ip端口而是直接使用服务名 - 也可以不在同一个docker-compose.yml配置,但要确保在同一网络,例如yml文件放在同一个目录下
version: '3'
services:web-server:image: 127.0.0.1:5000/web-servercontainer_name: web-serverrestart: alwaysenvironment:- spring.datasource.url=jdbc:mysql://【mysql服务名】/api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT# - spring.datasource.url=jdbc:mysql://【ip】:【port】/api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT- JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=trueweb-front:image: 127.0.0.1:5000/web-frontcontainer_name: web-frontrestart: always# links:# - web-serverdepends_on:- web-serverports:- "8080:80"
前端https(SSL)配置
主要涉及签名证书通过volumes映射,具体配置可见【docker-compose】【nginx】内网环境https配置
nginx动态传参
主要借助docker-compose的environment、Dockerfile的envsubst以及nginx配置文件模版实现,【docker-compose】【nginx】动态配置
资源限制:内存、cpu
- 使用
deploy进行资源限制时version必须为3 cpus配置必须使用引号‘’- 需通过
docker-compose --compatibility up -d启动才能生效 - 可通过
docker stats --no-stream查看内存及cpu使用情况
version: '3'
services:web-server:image: 127.0.0.1:5000/web-servercontainer_name: web-serverrestart: alwaysdeploy:resources:limits:memory: 256Mcpus: '1'web-front:image: 127.0.0.1:5000/web-frontcontainer_name: web-frontrestart: alwaysdepends_on:- web-serverports:- "8080:80"deploy:resources:limits:memory: 64Mcpus: '0.5'
nacos+sentinel+gateway
- docker-compose可以通过服务名访问服务,避免了每次修改ip和端口,便于移植
version: '3'
networks: #自定义网络myapp,为了只有这些服务可以在该网络内相互访问myapp:driver: bridge
services: #将容器抽象成服务nacos: #注册中心(官方镜像)image: nacos/nacos-server:latestcontainer_name: nacosrestart: alwaysenvironment:MODE: standalonePREFER_HOST_MODE: ipSPRING_DATASOURCE_PLATFORM: mysqlMYSQL_SERVICE_HOST: 【ip地址】#数据库在外部MYSQL_SERVICE_PORT: 3306MYSQL_SERVICE_DB_NAME: nacos_configMYSQL_SERVICE_USER: nacosMYSQL_SERVICE_PASSWORD: Nacos@123456# MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8volumes:- ./docker_nacos/standalone-logs/:/home/nacos/logsports:- "8848:8848"networks:- myappsentinel: #熔断限流(官方镜像)image: bladex/sentinel-dashboardcontainer_name: sentinel-nacosrestart: alwaysdepends_on:- nacosenvironment:NACOS_SERVER_ADDR: nacos:8848NACOS_USERNAME: nacosNACOS_PASSWORD: nacosNACOS_NAMESPACE: publicNACOS_GROUP_ID: SENTINEL_GROUPports:- "8858:8858"networks:- myappgateway: #网关(自制镜像)image: nacos-gatewaycontainer_name: nacos-gatewayrestart: alwaysdepends_on:- nacosports:- "18890:18890"environment:- spring.cloud.nacos.discovery.server-addr=nacos:8848- spring.cloud.sentinel.transport.dashboard=sentinel:8858networks:- myappauthserver: #认证中心(自制镜像)image: nacos-authservercontainer_name: nacos-authserverrestart: alwaysdepends_on:- nacosenvironment:- spring.datasource.url=jdbc:mysql://【mysql服务名】/oauth?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT- spring.cloud.nacos.discovery.server-addr=nacos:8848- spring.cloud.sentinel.transport.dashboard=sentinel:8858- JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=truenetworks:- myapp
问题汇总
iptables No chain/target/match by that name
原因:centos7默认防火墙为firewalld,而不是iptables,而docker使用iptables来做端口映射,所以一旦将firewalld关闭,则会报错
解决:启动防火墙,并一定注意开放平台访问的端口
systemctl start firewalld.service
firewall-cmd --zone=public --add-port=[port]/tcp --permanent
firewall-cmd --reload
docker-compose.yml修改mysql密码,重启后不生效
描述:修改后的密码无法连接mysql,但旧密码依然可以
问题:因为带有旧有登录信息的卷依然在
解决:docker volume ls 找到旧卷,docker volume rm删除旧卷
注意:!!!千万不要移除mysql容器重启,虽然密码生效了,但是删库,所有数据都没了
相关文章:
【docker-compose】安装及配置
目录 安装在线安装离线安装 配置mysql5.7bitnami/mysql8.3redisweb前后台分离部署前端https(SSL)配置nginx动态传参资源限制:内存、cpunacossentinelgateway 问题汇总iptables No chain/target/match by that namedocker-compose.yml修改mysql密码,重启后…...
【第十五届】蓝桥杯省赛C++b组
今年的蓝桥杯省赛已经结束了,与以往不同,今年又回到了8道题,而22,23年出现了10道题 大家觉得难度怎么样,欢迎进来讨论,博主今年没参加哈,大家聊聊,我听听大家的意见和看法哈 试题A:…...
thinkphp6 Driver [Think] not supported.
问题的原因:使用view这个类但相应的库未安装(新版仅内置了PHP原生模板引擎) 官方解释:视图功能由\think\View类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎&#x…...
爱自然生命力专项基金:“爱·启航”残障家庭教育援助项目帮扶上万残障家庭
为进一步积极践行社会责任,助力公益慈善事业,2017年2月爱自然生命力体系与中国下一代教育基金会开展相关合作,共同启动了中国下一代教育基金会爱自然生命力专项基金,并启动了基金第一个项目“爱启航残障家庭教育援助项目”&#x…...
【ubuntu】如何追加path
【背景】 在ubuntu上整备一个项目环境时需要追加Path。 【方法】 先复制下需要加的Path,比如我的是:/home/sheep431/.local/bin 加path命令 nano ~/.bashrc在nano界面输入如下命令 export PATH"/home/sheep431/.local/bin:$PATH"【检验】…...
用html写一个有趣的鬼魂动画
<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>一个有趣的鬼魂动画</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.m…...
【C++软件调试技术】C++软件开发维护过程中典型调试问题的解答与总结
目录 1、引发C软件异常的常见原因有哪些? 2、排查C软件异常的常用方法有哪些? 3、为什么要熟悉常见的异常内存地址? 4、调试时遇到调用IsBadReadPtr或者IsBadWritePtr引发的异常,该如何处理? 5、如何排查GDI对象泄…...
Pygame经典游戏:贪吃蛇
------------★Pygame系列教程★------------ Pygame经典游戏:贪吃蛇 Pygame教程01:初识pygame游戏模块 Pygame教程02:图片的加载缩放旋转显示操作 Pygame教程03:文本显示字体加载transform方法 Pygame教程04:dra…...
推荐一个免费使用Claude 3, GPT4和Gemini 1.5 Pro的网站
在探索人工智能的广阔天地时,我偶然间发现了You AI这一平台,它不仅更新了大量的模型,还慷慨地提供了免费的使用机会。兴奋之余,我迅速开始尝试这些新功能,并决定将我的体验分享给大家。以下是我试用的流程: 打开网站:点击左下角的Sign in蓝色框 https://you.comhttps://…...
An Investigation of Geographic Mapping Techniques for Internet Hosts(2001年)第二部分
下载地址:An investigation of geographic mapping techniques for internet hosts | Proceedings of the 2001 conference on Applications, technologies, architectures, and protocols for computer communications 被引次数:766 Padmanabhan V N, Subramanian L. An i…...
解锁生成式 AI 的力量:a16z 提供的 16 个企业指南
企业构建和采购生成式AI方面的16项改变 生成式 AI 领域趋势洞察:企业构建和采购生成式 AI 的方式正在发生重大转变,具体表现在:* 专注于可信度和安全性:75% 的企业将信任和安全性视为关键因素。* 优先考虑可扩展性和灵活性&#x…...
Kylin使用心得
Kylin是一个开源的分布式分析引擎,基于Apache Hadoop构建,专为处理大规模数据集而设计。以下是一些使用Kylin的心得体会: 快速查询 Kylin的OLAP引擎能够对大规模数据集进行高效的多维分析查询。通过预计算和存储多维度的聚合数据࿰…...
CentOS7使用Docker搭建Joplin Server并实现多端同步与公网使用本地笔记
文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具,拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能,…...
C语言100道练习题打卡(1)
1 有1,2,3,4四个数字,能组成多少个互不相同且不重复的三位数,都是多少 #include<stdio.h> //有1,2,3,4四个数字,能组成多少个互不相同且不重复的三位数ÿ…...
5G-A有何能耐?5G-A三载波聚合技术介绍
2024年被称作5G-A元年。5G-A作为5G下一阶段的演进技术,到底有何能耐呢? 三载波聚合(3CC)被认为是首个大规模商用的5G-A技术,将带来手机网速的大幅提升。 █ 什么是3CC 3CC,全称叫3 Component Carriers…...
理解Go语言中上下文
开发人员有时会误解context.Context类型,尽管它是Go语言的关键概念之一,也是Go中并发代码的基础之一。接下来让我们看看这个概念,并确保我们理解为什么乃如何有效地使用它。 根据官方文档: 上下文(context)携带最后期限、取消信号和其他跨API边界的值。 下面让我们来看下这…...
[MySQL]数据库原理8——喵喵期末不挂科
希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...
【算法基础】插入排序与二分查找、升级二分查找
文章目录 1. 插入排序1.1 插入排序的思想1.2 插入排序的实现 2. 普通二分查找2.1 普通二分查找的思想2.2 普通二分查找的实现 3. 升级二分查找3.1 升级二分查找思想3.2 升级二分查找实现 1. 插入排序 1.1 插入排序的思想 插入排序很类似于已有一副有序的扑克牌,不断…...
在Vue3中如何使用H.265视频流媒体播放器EasyPlayer.js?
H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8&#…...
基于51单片机的PM2.5监测系统设计—环境监测仪
基于51单片机的PM2.5监测系统 (仿真+程序+原理图+PCB+设计报告) 功能介绍 具体功能: 1.PM2.5传感器模块检测信息给单片机处理; 2.LCD1602实时显示PM2.5浓度和PM2.5报警阈值&#x…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
