一、前言
hello!大家好呀!今天是2020-08-06号,星期四,我是会打篮球会做饭的程序员,御前带糖侍卫。今天要和大家分享的是如何在linux快速搭建我们项目中用到的一些中间件。今天的文章会内容是:使用docker搭建项目中用到的中间件,mysql、activemq、redis、elk、consul、 nexus。废话不多说,我们一个一个开始吧。
二、干货都在这个部分
1. mysql ---->大大小小的项目都会用到我们的mysql关系型数据库啦
- 第一步:在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
- 第二步: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 | 暴露的端口号,‘:’前面的是宿主机对外暴露的端口号,后面的组件的端口号 |
-v | docker容器里面挂在在宿主机的文件目录,‘:’前面是宿主机的文件目录,后面是组件在docker容器里面的文件目录 |
-e | environment运行环境,设置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
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
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文件夹,里面有这些文件
- 编写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
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配置文件,配置了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&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000&
org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&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&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<import resource="jetty.xml"/>
</beans>
- 上传配置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
三、结束语
- 今天先到这里吧,文章太长大家也不爱看,本篇文章我们 就先只介绍安装mysql、activemq、redis,docker run 和docker-compose启动的方式。下篇文章我会介绍maven私服,nexus、elk、consul的docker run 和docker-compose的两种搭建方式。咱们下篇文再见吧!