使用docker技术,快速在linux上搭建常用的中间件,mysql、activemq、redis 篇(上)。

一、前言

hello!大家好呀!今天是2020-08-06号,星期四,我是会打篮球会做饭的程序员,御前带糖侍卫。今天要和大家分享的是如何在linux快速搭建我们项目中用到的一些中间件。今天的文章会内容是:使用docker搭建项目中用到的中间件,mysql、activemq、redis、elk、consul、 nexus。废话不多说,我们一个一个开始吧。

二、干货都在这个部分

1. mysql ---->大大小小的项目都会用到我们的mysql关系型数据库啦

  1. 第一步:在linux系统上安装一个干净的docker
sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

systemctl restart docker
  1. 第二步:docker启动完毕后 ,搜索mysql的docker 镜像文件,并启动安装
  • 搜索mysql镜像
docker search  mysql

真实环境的截图

  • 拉取镜像,一般选择第一个,可以加上版本号,不加的话默认最新版本,latest
docker pull mysql
  • 查看镜像是否拉取成功
docker images

拉取镜像的结果

  • docker run 方式启动mysql
docker run -d -p 3307:3306 --name ALDmysql8 --restart always -v /home/fuhang/mysql8db/config/my.cnf:/etc/mysql/my.cnf -v /home/fuhang/mysql8db/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
命令命令的含义
-d后台运行
-p暴露的端口号,‘:’前面的是宿主机对外暴露的端口号,后面的组件的端口号
-vdocker容器里面挂在在宿主机的文件目录,‘:’前面是宿主机的文件目录,后面是组件在docker容器里面的文件目录
-eenvironment运行环境,设置mysql的密码
  • 配置文件 my.cnf
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv=
#/tmp/
# Disabling symbolic-links is recommended to prevent assorted security risks
tmpdir=/var/tmp
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/
max_connections=5000
default_authentication_plugin= mysql_native_password
innodb_numa_interleave=1
default-time_zone = '+8:00'
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/instance-1-slow.log
long_query_time = 2
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  • 为了方便,可以使用docker-compose方式
  • 创建一个mysql文件夹,文件目录结构
  • 编写 docker-compose.yml
    mysql文件目录
version: '3'
services:
  mysql_compose:
    image: mysql:8.0.16
    container_name: mysql_ALD
    restart: always
    ports:
      - 3307:3306
    volumes:
      - /home/fuhang/mysql8db/data:/var/lib/mysql
      - /home/fuhang/mysql8db/config/my.cnf:/etc/mysql/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    security_opt:
      - seccomp:unconfined
  • docker-compose的方式启动mysql
docker-compose up -d

2. redis ---->redis缓存也很常用

1、和 mysql搭建也是一样的就不赘述了,直接上代码吧

docker search redis

redis搜索结果

docker pull redis
docker run -p 6379:6379 --name fuhang_redis3 -v /root/redisconf/redis.conf:/etc/redis/redis.conf  -v /root/redis:/data -d redis redis-server --requirepass "mypassword" --appendonly yes
  • docker-compose 的方式运行 redis,直接上代码
  • 创建一个redis文件夹,里面有这些文件
    redis文件目录
  • 编写docker-compose.yml文件
version: '3'

services:
  redis:
    image: redis
    container_name: docker_redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - ./data:/data
      - ./redis.conf:/etc/redis/redis.conf
    command:
      redis-server --port 6379 --requirepass "mypassword" --appendonly yes
  • docker-compose up运行redis
docker-compose up -d
  • 查看redis是否运行成功
docker ps

镜像的运行情况

3. activemq ---->activemq也是很常用的消息队列

1、和 mysql、redis 搭建也是一样的就不赘述了,直接上代码吧

docker search activemq

activemq搜索结果

docker pull activemq
  • docker-run方式运行
docker run -d --name activemq-5.14 --restart=always -p 61617:61616 -p 8162:8161 -v /home/fuhang/activemq/activemq.xml:/opt/activemq/conf/activemq.xml  webcenter/activemq
  • docker-compose 的方式运行 activemq,直接上代码
  • 创建一个activemq文件夹,里面有这些文件
    activemq文件夹
  • activemq配置文件,配置了mysql持久化,和多种连接方式
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <!-- Allows us to use system properties as variables in this configuration file -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>file:${activemq.conf}/credentials.properties</value>
        </property>
    </bean>

   <!-- Allows accessing the server log -->
    <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
          lazy-init="false" scope="singleton"
          init-method="start" destroy-method="stop">
    </bean>
    
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">

        <destinationPolicy>
            <policyMap>
              <policyEntries>
                <policyEntry topic=">" >
                
                  <pendingMessageLimitStrategy>
                    <constantPendingMessageLimitStrategy limit="1000"/>
                  </pendingMessageLimitStrategy>
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>

        <managementContext>
            <managementContext createConnector="false"/>
        </managementContext>
        
        <persistenceAdapter>
		<!--<kahaDB directory="${activemq.data}/kahadb"/>-->
		<jdbcPersistenceAdapter directory="${activemq.data}/mysqldb" dataSource="#mysql-ds" createTablesOnStartup="true"/>	
        </persistenceAdapter>
        
          <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage percentOfJvmHeap="70" />
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="100 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="50 gb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

        <!-- 几种不同的连接方式 -->
        <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
	    <transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000&amp;
		    org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&amp;org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"/>
        </transportConnectors>

        <!-- destroy the spring context on shutdown to stop jetty -->
        <shutdownHooks>
            <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
        </shutdownHooks>
    </broker>
    
	<!-- 配置mysql数据源用来持久化 -->
    <bean id="mysql-ds" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
	    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	    <property name="url" value="jdbc:mysql://172.16.2.2:3307/db_activemq?useUnicode=true&amp;characterEncoding=UTF-8"/>
	    <property name="username" value="root"/>
	    <property name="password" value="123456"/>
    </bean>
    
    <import resource="jetty.xml"/>
</beans>
  • 上传配置mysql持久化 需要的数据源和连接池,这个可以下载到
    数据源 mysql
  • 编写docker-compose.yml文件
version: '3'
services:
    #activemq容器
  activemq:
    container_name: activemq_3
    #使用的镜像
    image: webcenter/activemq
    restart: always
    #容器的映射端口
    ports:
      - 61613:61613
      - 61617:61616
      - 8162:8161
      - 5672:5672
      - 1883:1883
      - 61614:61614
      - 61608:61608  
    #定义挂载点
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./log:/var/log/activemq
      - ./conf/activemq.xml:/opt/activemq/conf/activemq.xml:ro
      - ./lib/mysql-connector-java-5.1.47.jar:/opt/activemq/lib/mysql-connector-java-5.1.47.jar:ro
      - ./lib/druid-1.1.18.jar:/opt/activemq/lib/druid-1.1.18.jar:ro
    #环境变量
    environment:
      - ACTIVEMQ_ADMIN_LOGIN=admin
      - ACTIVEMQ_ADMIN_PASSWORD=admin
      - ACTIVEMQ_CONFIG_MINMEMORY=512
      - ACTIVEMQ_CONFIG_MAXMEMORY=2048
      - TZ=Asia/Shanghai
docker-compose up -d
  • 查看activemq是否运行成功
docker ps

组件运行列表

三、结束语

  1. 今天先到这里吧,文章太长大家也不爱看,本篇文章我们 就先只介绍安装mysql、activemq、redis,docker run 和docker-compose启动的方式。下篇文章我会介绍maven私服,nexus、elk、consul的docker run 和docker-compose的两种搭建方式。咱们下篇文再见吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值