[Docker]使用Docker部署常见的中间件

2023-11-17


theme: healer-readable

highlight: xcode

image.png

本篇文章给大家介绍如何使用 Docker 部署在企业工作中常用的中间件服务。

Nginx

shell docker run -d \ -p 80:80 --name nginx-server-conf \ -v /opt/nginx-server-conf:/usr/share/nginx/html:ro \ -v /opt/nginxcon/nginx.conf:/etc/nginx/nginx.conf:ro \ nginx

设置宿主机 80 端口和容器的 80 端口映射,以及数据卷目录挂载与容器的配置文件所在目录映射。一个是 Nginx 的主页还有一个是服务器配置文件。

Tomat

shell docker run -d -p 8080:8080 \ -v /opt/tomcat-server:/usr/local/tomcat/webapps/ROOT \ tomcat:9.0

设置宿主机端口 8080 端口和容器 8080 端口映射,访问宿主机 IP 地址加上 8080 端口就可以查看 Tomcat 主页。

-v 参数设置的是 Tomcat 容器的 webapps 和宿主机的目录映射关系,在宿主机的目录下添加 war 包就可以正常访问你开发的 web app 了。

MySQL

单机部署

MySQL 长期支持版本有 5.7 和 8.0,这里演示的是 5.7。

shell docker run -d -p 3306:3306 \ --name mysql \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ mysql:5.7

若要使用 MySQL 内置的客户端访问,输入以下命令:

```shell docker exec -it mysql mysql -uroot -proot mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.37 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ```

还可以通过在 docker host 上访问:

```shell

yum -y install mariadb

mysql -h 192.168.255.157 -uroot -proot -P 3306

Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.7.37 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | informationschema | | mysql | | performanceschema | | sys | +--------------------+ 4 rows in set (0.00 sec) ```

主从复制集群部署

部署主节点

shell docker run -d -p 3306:3306 \ --name mysql-master \ -v /opt/mysql-master/log:/var/log/mysql \ -v /opt/mysql-master/data:/var/lib/mysql \ -v /opt/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ mysql:5.7

配置主节点

```shell

vim /opt/mysql-master/conf/my.cnf

cat /opt/mysql-master/conf/my.cnf

[client] default-character-set=utf8

[mysql] default-character-set=utf8

[mysqld] initconnect='SET collationconnection = utf8unicodeci' initconnect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8unicode_ci skip-character-set-client-handshake skip-name-resolve

serverid=1 log-bin=mysql-bin read-only=0 binlog-do-db=kubemsbtest

replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=informationschema replicate-ignore-db=performanceschema ```

部署从节点

shell docker run -d -p 3307:3306 \ --name mysql-slave \ -v /opt/mysql-slave/log:/var/log/mysql \ -v /opt/mysql-slave/data:/var/lib/mysql \ -v /opt/mysql-slave/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ --link mysql-master:mysql-master \ mysql:5.7

配置从节点

```shell

vim /opt/mysql-slave/conf/my.cnf

cat /opt/mysql-slave/conf/my.cnf

[client] default-character-set=utf8

[mysql] default-character-set=utf8

[mysqld] initconnect='SET collationconnection = utf8unicodeci' initconnect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8unicode_ci skip-character-set-client-handshake skip-name-resolve

serverid=2 log-bin=mysql-bin read-only=1 binlog-do-db=kubemsbtest

replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=informationschema replicate-ignore-db=performanceschema ```

集群配置

配置主节点

```shell

mysql -h 192.168.255.157 -uroot -proot -P 3306

Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.37 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> ```

```shell

授权

MySQL [(none)]> grant replication slave on . to 'backup'@'%' identified by '123456'; ```

```shell

重启容器,使用配置生效

docker restart mysql-master

查看状态

MySQL [(none)]> show master status\G ******** 1. row ******** File: mysql-bin.000001 Position: 154 BinlogDoDB: kubemsbtest BinlogIgnoreDB: ExecutedGtid_Set: 1 row in set (0.00 sec) ```

配置从节点

```shell

docker restart mysql-slave

mysql -h 192.168.255.157 -uroot -proot -P 3307

Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.37 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> ```

```shell MySQL [(none)]> change master to masterhost='mysql-master', masteruser='backup', masterpassword='123456', masterlogfile='mysql-bin.000001', masterlogpos=154, masterport=3306;

MySQL [(none)]> start slave;

查看从节点状态

MySQL [(none)]> show slave status\G ```

Oracle

```shell

oracle数据库连接信息

port:49161

sid:xe

username:system

password:oracle

49160 为ssh端口

49161 为sqlplus端口

49162 为oem端口

docker run -h oracle --name oracle -d -p 49160:22 \ -p 49161:1521 \ -p 49162:8080 \ oracleinanutshell/oracle-xe-11g ```

PostgreSQL

shell docker run -d \ --name postgres \ -e POSTGRES_PASSWORD=mysecretpassword \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v /custom/mount:/var/lib/postgresql/data \ postgres:11.20-bullseye

ElasticSearch

单个部署

部署 ElasticSearch

```shell docker pull elasticsearch:7.17.0

创建数据卷挂载目录

mkdir -p /opt/es/config mkdir -p /opt/es/data

编写配置文件,使得可以远程访问

echo "http.host: 0.0.0.0" >> /opt/es/config/elasticsearch.yml

docker run -d --name elasticsearch \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e ESJAVAOPTS="-Xms64m -Xmx512m" \ -v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /opt/es/data:/usr/share/elasticsearch/data \ -v /opt/es/plugins:/usr/share/elasticsearch/plugins \ elasticsearch:7.17.0 ```

部署 Kibana

shell docker run -d --name kibana \ -e ELASTICSEARCH_HOSTS=http://192.168.255.157:9200 \ -p 5601:5601 \ kibana:7.17.0

使用docker-compose部署

```yml version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 containername: elasticsearch environment: - discovery.type=single-node ports: - "9200:9200" - "9300:9300" networks: - elknetwork kibana: image: docker.elastic.co/kibana/kibana:7.17.0 containername: kibana environment: ELASTICSEARCHHOSTS: "http://elasticsearch:9200" ports: - "5601:5601" networks: - elk_network

networks: elk_network: ```

```shell

启动容器

docker-compose up -d ```

Redis

单机部署

```shell

创建挂载的目录

mkdir -p /opt/redis/conf

创建配置文件

touch /opt/redis/conf/redis.conf

docker run -d -p 6379:6379 --name redis -v /opt/redis/data:/data -v /opt/redis/conf:/etc/redis redis redis-server /etc/redis/redis.conf shell

使用redis-cli连接redis服务

some-redis指的是容器名称

docker run -it --network some-network --rm redis redis-cli -h some-redis ```

集群部署

安装 redis-cluster:3 主 3 从方式,从为了同步备份,主进行 slot 数据分片。

redis-cluster.sh

```shell

编辑运行多个redis容器脚本文件

vim redis-cluster.sh

cat redis-cluster.sh

for port in $(seq 8001 8006); do mkdir -p /mydata/redis/node-${port}/conf touch /mydata/redis/node-${port}/conf/redis.conf cat << EOF >/mydata/redis/node-${port}/conf/redis.conf port ${port} cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 192.168.255.157 cluster-announce-port ${port} cluster-announce-bus-port 1${port} appendonly yes EOF

docker run -p ${port}:${port} -p 1${port}:1${port} --name redis-${port} \
    -v /mydata/redis/node-${port}/data:/data \
    -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
    -d redis:5.0.7 redis-server /etc/redis/redis.conf; \

done ```

执行脚本:

shell sh redis-cluster.sh

登录 Redis 容器:

shell docker exec -it redis-8001 bash

创建 redis-cluster:

shell redis-cli --cluster create \ 192.168.255.157:8001 \ 192.168.255.157:8002 \ 192.168.255.157:8003 \ 192.168.255.157:8004 \ 192.168.255.157:8005 \ 192.168.255.157:8006 \ --cluster-replicas 1

RabbitMQ

```shell

端口说明:

4369, 25672 (Erlang发现&集群端口)

5672, 5671 (AMQP端口)

15672 (web管理后台端口)

61613, 61614 (STOMP协议端口)

1883, 8883 (MQTT协议端口)

部署带有管理控制台的RabbitMQ

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 -v /opt/rabbitmq:/var/lib/rabbitmq rabbitmq:management ```

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Docker]使用Docker部署常见的中间件 的相关文章

随机推荐

  • java 支付宝红包接入

    1 将公钥验证升级为证书验证 会得到如下三个证书 2 配置文件相关 支付宝支付相关配置 alipayconfig appid pid app private key charset utf 8 alipay public key call
  • Ubuntu 提示 Could not get lock /var/lib/dpkg/lock-frontend.解决方法

    今天在Ubuntu上安装的达梦数据库出现了一点操作错误 进行删除后还原快照就出现了这个问题 当我进行 apt 源安装还有更新时就一直显示 Waiting for cache lock Could not get lock var lib d
  • 解决VScode代码注释异常高亮

    问题描述 VScode出现代码注释后仍然高亮的问题 或者定义的函数名或者关键词没有高亮 如下所示 正常情况 异常情况 原因分析 同时装了python的扩展和vscode for python的扩展导致 两个扩展的主题配色冲突 解决方案 卸载
  • unity之InputField的文本监听

    1 创建InputField creat gt UI gt InputField 2 基本属性界面 可以再content type属性下设置InputField的文本类型 图片中无显示 3 文本监听 创建脚本 代码如下 using Syst
  • 计算机视觉————目标检测,多尺度问题理解以及FCN(全卷积神经网络)存在的弊端,问题。

    在阅读文献中 通常会遇到一个名词 XX用来解决多尺度问题 多尺度问题是什么意思 目标检测中 我们希望对于输入图片 不管图片中某个目标或大或小 我们都需要将其识别 对于小物体 我们可以将其理解为两种方式 一种是绝对小物体 即它本身占的像素就比
  • Android.bp 语法浅析-Android10.0编译系统(八)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • mysql怎么创建出生日期表_MySQL表的创建

    第1步 设计 首先要设计一张用于我想要用途的表 例如如下用于描述个人的信息类型 姓名 性别 出生日期 地址 最喜爱的食物 下面为他来指定列和数据类型 列 类型 允许值 name varchar 40 gender char 1 M F bi
  • MyBatis之枚举类型

    枚举可以让代码变得更为优雅 B格更高 当然MyBatis也是支持枚举类型的啦 首先 MyBatis内置了Enum的TypeHandler TypeHandler Java类型 JDBC类型 EnumTypeHandler Enum VARC
  • 华为机试练习(二)二叉树遍历

    题目描述 给定一棵二叉树的前序遍历和中序遍历 求其后序遍历 输入 两个字符串 其长度n均小于等于26 第一行为前序遍历 第二行为中序遍历 二叉树中的结点名称以大写字母表示 A B C 最多26个结点 输出 输入样例可能有多组 对于每组测试样
  • NodeJs模块化

    目录 一 导入模块 二 模块暴露数据 三 注意事项 一 导入模块 在模块中使用 require 传入文件路径即可引入文件 const test require me js 案例 在func js中定义一个函数 在index js使用该函数
  • kube-flannel.yml

    flannel作为k8s的集群中常用的网络组件 其yml文件的获取 建议去github中获取 具体的获取方式如下 apiVersion policy v1beta1 kind PodSecurityPolicy metadata name
  • C#实现组合优化问题算法-背包问题(附源码)

    C 实现组合优化问题算法 背包问题 附源码 背包问题是一类经典的组合优化问题 也是NP完全问题中的一种 其基本思想是 有一个容量为V的背包和n个物品 每个物品有自己的体积和价值 在保证不超过背包容量的前提下 选择某些物品装入背包 使得背包中
  • 依赖项注入

    ASP NET Core 通过依赖关系注入 DI 生成 服务 如数据库上下文 在 Program cs 中向 DI 注册 这些服务通过构造函数参数提供给需要它们的组件 在 Controllers MoviesController cs 文件
  • rsyslogd、syslog远程传输、日志存储、转存

    一 产生本地日志 1 etc resolv conf 配置文件 local0 local7是用户自定义的日志 这里我们使用local1 添加以下 local1 www admin admin log web log 配置完需要重启 rsys
  • DNS 解析一个地址的时候会返回多个 IP 吗?

    这是一个或许对你有用的社群 一对一交流 面试小册 简历优化 求职解惑 欢迎加入 芋道快速开发平台 知识星球 下面是星球提供的部分资料 项目实战 视频 从书中学 往事上 练 互联网高频面试题 面朝简历学习 春暖花开 架构 x 系统设计 摧枯拉
  • nginx php-fpm 分别安装在不同的机器(理解nginx和php-fpm)

    先起一个ubuntu的docker docker run ti name test1 ubunt 然后安装php5 fpm apt get install php5 fpm 配置fpm 允许从其他机器访问 listen 9000 默认是12
  • 树实现客户端红点系统

    树实现客户端红点系统 红点系统总览 demo 设计 代码设 引用 https zhuanlan zhihu com p 85978429 红点系统总览 如上图所示 规划红点系统的时候 我们将整个系统分为独立的三个部分 结构层 驱动层和表现层
  • C++ 循环练习第2题:输出一个整数序列中与指定数字相同的数的个数。输入包含2行:第1行为n和m,表示整数序列的长度n<=100和指定的数字;第2行为n个整数,整数之间以一个空格分开。输出为n个数中与

    C 循环练习第2题 输出一个整数序列中与指定数字相同的数的个数 输入包含2行 第1行为n和m 表示整数序列的长度n lt 100和指定的数字 第2行为n个整数 整数之间以一个空格分开 输出为n个数中与m相同的数的个数 1 题目 2 循环解决
  • 计算机网络——第4章网络层(上)

    目录 第 4 章 网络层 上 基本概念 IP地址 基本概念 IP地址结构 ABC三类IP地址 A类 B类 C类 子网地址的结构 子网掩码 无类域间路由技术CIDR CIDR地址块 CIDR地址规划方法 最长前缀匹配 IP地址相关的解题步骤
  • [Docker]使用Docker部署常见的中间件

    theme healer readable highlight xcode 本篇文章给大家介绍如何使用 Docker 部署在企业工作中常用的中间件服务 Nginx shell docker run d p 80 80 name nginx