首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【架构师(第四十九篇)】 服务端开发之认识 Docker-compose

【架构师(第四十九篇)】 服务端开发之认识 Docker-compose

作者头像
一尾流莺
发布于 2022-12-10 05:55:25
发布于 2022-12-10 05:55:25
64300
代码可运行
举报
运行总次数:0
代码可运行

本文正在参加「金石计划 . 瓜分6万现金大奖」

Docker-compose

介绍

通过一个配置文件,可以让系统一键启动所有的运行环境,nodejsmysqlredismongodb 等。

如果开发环境需要多个服务,就需要启动多个 Docker 容器

要连通多个 Docker 容器,就需要 Docker-compose

安装

Docker Desktop for Windows 自带 docker-compose

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看 docker-compose 版本
docker-compose --version

配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 统一的版本号
version: '3'
# 服务
services:
    # service name, 自定义, 不能重复
    editor-server:
        build:
            # 当前目录
            context: .
            # 基于 Dockerfile 构建
            dockerfile: Dockerfile
        # 依赖于当前 Dockerfile 创建出来的镜像名称
        image: editor-server
        # 容器名称
        container_name: editor-server
        # 端口映射 宿主机通过 8081 访问
        ports:
            - 8081:3000
    # service name
    editor-redis:
        # 引用官方 redis 镜像
        image: redis
        # 容器名称
        container_name: editor-redis
        # 端口映射
        ports:
            # 宿主机,可以用 127.0.0.1:6378 即可连接容器中的数据库  'redis-cli -h 127.0.0.1 -p 6378'
            # 6379 可能被宿主机的 redis 所占用, 防止冲突使用 6378
            # 但是, 其它 docker 容器不能, 因为此时 127.0.0.1 是 docker 容器本身, 而不是宿主机
            - 6378:6379
            # 环境变量
        environment:
            # 设置时区
            - TZ=Asia/Shanghai
    # service name
    editor-mysql:
        # 引用官网 mysql 镜像
        image: mysql
        container_name: editor-mysql
        # 出错重启
        restart: always
        # 高权限,执行下面的 mysql/init
        privileged: true
        # 解决无法远程访问的问题
        command: --default-authentication-plugin=mysql_native_password
        ports:
            # 宿主机可以用 127.0.0.1:3305 即可连接容器中的数据库
            - 3305:3306
        volumes:
            # 记录日志
            - .docker-volumes/mysql/log:/var/log/mysql
            # 数据持久化
            - .docker-volumes/mysql/data:/var/lib/mysql
            # 初始化 sql
            - ./mysql/init:/docker-entrypoint-initdb.d/
        environment:
            # 初始化容器时创建数据库
            # - MYSQL_USER=shuangyue #创建 test 用户
            # - MYSQL_PASSWORD=shuangyue #设置 test 用户的密码
            - MYSQL_DATABASE=imooc_lego_course
            - MYSQL_ROOT_PASSWORD=xiaowei123
            # 设置时区
            - TZ=Asia/Shanghai
    # service name
    editor-mongo:
        # 引用官网 mongo 镜像
        image: mongo
        # 容器名称
        container_name: editor-mongo
        # 出错重启
        restart: always
        # 文件映射
        volumes:
            # 数据持久化
            - '.docker-volumes/mongo/data:/data/db'
        environment:
            # - MONGO_INITDB_ROOT_USERNAME=root
            # - MONGO_INITDB_ROOT_PASSWORD=123456
            - MONGO_INITDB_DATABASE=imooc_lego_course
            # 设置时区
            - TZ=Asia/Shanghai
        ports:
            # 宿主机可以用 127.0.0.1:27016 即可连接容器中的数据库
            - '27016:27017'

命令

  • 构建容器 :docker-compose build
  • 启动所有服务器docker-compose up -d, 后台启动
  • 停止所有服务:docker-compose down
  • 查看服务:docker-compose ps

docker-compose psdocker ps 的区别是:docker 显示所有的服务,docker-compose 只显示docker-compose.yml 文件中声明过的服务。

连接 Redis

端口还是 6379host 要和 docker-compose.yml 中的服务名称对应

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  redisConf: {
    port: "6379",
    host: 'editor-redis'
  },    

mysql, mongodb 和 redis 的区别

  • redis数据库 , 而 mysqlmongodb 需要创建数据库
  • redis 是缓存,无需数据持久化,而 mysqlmongodb 需要

连接 mysql

根目录下新建 mysql\init.sql 文件,可以做一些初始化的事情,比如解除安全模式,供外网访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- mysql\init.sql
-- docker-compose 启动 mysql 时的初始化代码

select "init start...";

-- 设置 root 用户可外网访问
use mysql;
SET SQL_SAFE_UPDATES=0; -- 解除安全模式,测试环境,没关系
update user set host='%' where user='root';
flush privileges;
-- 密码参考 docker-compose.yml
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xiaowei123'; 
flush privileges;

select "init end...";   

host 要和 docker-compose.yml 中的服务名称对应

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  mysqlConfig: {
    host: 'editor-mysql'
    user: "root",
    password: "xiaowei123",
    port: "3306",
    database: "imooc_lego_course",
  },

连接 mongodb

host 要和 docker-compose.yml 中的服务名称对应

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  mongodbConf: {
    host: 'editor-mongo'
    port: "27017",
    dbName: "imooc_lego_course",
  },    

操作

构建镜像

启动容器

查看服务日志

没有报错,说明我们的几个容器都正常启动,并且可以互相关联了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Android平台RTSP|RTMP播放器技术实践:基于大牛直播SDK的深度探索
在移动直播、视频监控等场景中,RTSP(Real Time Streaming Protocol)和 RTMP(Real Time Messaging Protocol)是两种常见的流媒体传输协议。它们能够提供实时、低延迟的音视频传输,但实现高效的播放功能具有一定技术门槛。大牛直播SDK作为行业内备受认可的解决方案,提供了功能强大、性能卓越的 RTSP/RTMP 播放模块。本文将基于大牛直播 SDK,详细讲解如何在 Android 平台开发一个高效的 RTSP|RTMP 播放器。
音视频牛哥
2025/04/25
3010
Android平台RTSP|RTMP播放器技术实践:基于大牛直播SDK的深度探索
Android平台RTSP|RTMP直播播放器技术接入说明
大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台为例,介绍下如何集成RTSP、RTMP播放模块。
音视频牛哥
2024/07/24
5130
Android平台RTSP|RTMP直播播放器技术接入说明
Android平台如何实现多路低延迟RTSP|RTMP播放?
实际上,我们在2015年做Android平台RTSP、RTMP播放模块的时候,第一版就支持了多实例播放,因为SDK设计比较灵活,做个简单的player实例封装即可实现多实例播放(Android Unity的就有多路demo),所以官方一直没有正式demo,本次也是有个开发者提到,希望测试下我们多路播放的效果,自己又不想做封装,索性给做个版本。
音视频牛哥
2024/06/17
1910
Android平台如何实现多路低延迟RTSP|RTMP播放?
Android平台RTSP|RTMP直播播放器技术接入说明
本文详细介绍了在 Android 平台上集成 RTSP 和 RTMP 直播播放模块的技术背景、系统要求、准备工作、接口设计、功能支持以及接口调用流程。通过合理的架构设计和优化,开发者可以高效地实现直播播放功能,满足不同场景下的应用需求。
音视频牛哥
2025/03/02
3221
Android平台RTSP|RTMP直播播放器技术接入说明
如何设计开发RTSP直播播放器?
我们在对接RTSP直播播放器相关技术诉求的时候,好多开发者,除了选用成熟的RTSP播放器外,还想知其然知其所以然,对RTSP播放器的整体开发有个基础的了解,方便方案之作和技术延伸。本文抛砖引玉,做个大概的介绍。
音视频牛哥
2024/10/12
4870
庖丁解牛之-Android平台RTSP|RTMP播放器设计
我们在做Android平台RTSP或者RTMP播放器开发的时候,需要注意的点非常多,以下,以大牛直播SDK(官方)的接口为例,大概介绍下相关接口设计:
音视频牛哥
2021/11/18
5480
Flutter下实现低延迟的跨平台RTSP/RTMP播放
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
音视频牛哥
2019/09/17
5K0
Flutter下实现低延迟的跨平台RTSP/RTMP播放
Android端如何实现拉取RTSP/RTMP流并回调YUV/RGB数据然后注入轻量级RTSP服务?
我们在对接开发Android平台音视频模块的时候,遇到过这样的问题,厂商希望拉取到海康、大华等摄像机的RTSP流,然后解码后的YUV或RGB数据回给他们,他们做视频分析或处理后,再投递给轻量级RTSP服务模块或RTMP推送模块,实现处理后的数据,二次转发,本文以拉取RTSP流,解析后再注入轻量级RTSP服务为例,介绍下大概的技术实现。
音视频牛哥
2023/09/21
1.4K0
Android端如何实现拉取RTSP/RTMP流并回调YUV/RGB数据然后注入轻量级RTSP服务?
Android平台实现无纸化同屏并推送RTMP或轻量级RTSP服务(毫秒级延迟)
在写这篇文章之前,实际上几年之前,我们就有非常稳定的无纸化同屏的模块,本文借demo更新,算是做个新的总结,废话不多说,先看图,本文以Android平台屏幕实时采集推送,Windows播放为例,和大家做个技术分享。
音视频牛哥
2024/03/10
4720
Android平台实现无纸化同屏并推送RTMP或轻量级RTSP服务(毫秒级延迟)
GB28181设备接入侧录像查询和录像下载技术探究之实时录像
我们在对接GB28181设备接入侧的时候,除了常规实时音视频按需上传外,还有个重要的功能,就是本地实时录像,录像后的数据,在执法记录仪等前端设备留底,然后,到工作站拷贝到专门的平台。
音视频牛哥
2023/07/16
7200
GB28181设备接入侧录像查询和录像下载技术探究之实时录像
Windows平台RTSP|RTMP播放器如何实现细粒度录像控制
好多开发者在跟我做技术交流的时候,说用大牛直播SDK模块的特点是,想到什么功能,找找头文件和demo几乎都有对应的实现,你们是何收集到这么多技术需求的?
音视频牛哥
2024/04/17
7200
Windows平台RTSP|RTMP播放器如何实现细粒度录像控制
如何在Android中实现低延迟的多实例RTSP|RTMP播放器
​在视频播放应用的开发中,如何有效地管理多个 RTSP|RTMP流实例是一个挑战。尤其是在 Android 上开发高性能、低延迟的多实例 RTSP|RTMP 播放器时,涉及到资源管理、线程同步和回调事件处理等多个层面的考虑。在本文中,我将展示如何使用大牛直播SDK,创建一个可支持多个实例的 RTSP 播放器,并分析如何在实际应用中进行优化。
音视频牛哥
2025/04/24
2280
如何在Android中实现低延迟的多实例RTSP|RTMP播放器
iOS平台如何实现毫秒级延迟的RTMP|RTSP播放器
在我的blog里面,最近很少有提到iOS平台RTMP推送|轻量级RTSP服务和RTMP|RTSP直播播放模块,实际上,我们在2016年就发布了iOS平台直播推拉流、转发模块,只是因为传统行业,对iOS的需求比较少,所以一直没单独说明,本文主要介绍下,如何在iOS平台播放RTMP或RTSP流。
音视频牛哥
2024/02/06
4020
iOS平台RTSP|RTMP直播播放器技术接入说明
大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以iOS平台为例,介绍下如何集成RTSP、RTMP播放模块。
音视频牛哥
2024/09/19
3290
iOS平台RTSP|RTMP直播播放器技术接入说明
Android平台不需要单独部署流媒体服务如何实现内网环境下一对一音视频互动
我们在做内网环境的一对一音视频互动的时候,遇到这样的技术诉求:如智能硬件场景下(比如操控智能硬件),纯内网环境,如何不要单独部署RTMP或类似流媒体服务,实现一对一音视频互动。
音视频牛哥
2023/05/17
3070
Android平台RTMP直播推送模块技术接入说明
大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行业的使用场景。
音视频牛哥
2024/08/07
3750
Android平台RTMP直播推送模块技术接入说明
Unity3D下如何实现跨平台(Windows/Linux/Android/iOS)低延迟的RTMP、RTSP播放
好多开发者,希望我们能探讨下Unity平台RTMP或RTSP直播流数据播放和录制相关的模块,实际上,这块流程我们已经聊过多次,无非就是通过原生的RTMP或者RTSP模块,先从协议层拉取到数据,并解包解码,回调YUV或RGB数据,然后,在Unity创建响应的shader,获取图像数据填充纹理即可,说起来流程很简单,但是每个环节,如果做到极致体验,都非常难。简单来说,多一次拷贝,都会增大性能瓶颈或延迟。
音视频牛哥
2023/05/24
9790
Unity3D下如何实现跨平台(Windows/Linux/Android/iOS)低延迟的RTMP、RTSP播放
Unity下如何实现RTMP或RTSP流播放和录制
在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程:
音视频牛哥
2022/12/24
2.3K0
Unity下如何实现RTMP或RTSP流播放和录制
如何在Unity3d平台下低延迟播放RTMP或RTSP流
随着VR类、游戏类场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放,好多公司用起来体验都非常好,以下介绍大概实现流程。
音视频牛哥
2020/03/02
3.7K0
RTSP播放器或RTMP播放器常用Event事件回调设计
很多开发者在开发RTSP或RTMP播放器的时候,不晓得哪些event回调事件是有意义的,针对此,我们以大牛直播SDK(github)的Android平台RTSP/RTMP直播播放端为例,简单介绍下常用的event id,总的来说,有以下几个部分组成:
音视频牛哥
2020/10/15
1.1K0
推荐阅读
相关推荐
Android平台RTSP|RTMP播放器技术实践:基于大牛直播SDK的深度探索
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档