Use docker para instalar mysql, redis, kafka y otros servicios

prefacio

En términos generales, el papel de la ventana acoplable es el siguiente

Para la mayoría de las aplicaciones, los desarrolladores pueden crear imágenes a través de Docker Builder, cargar imágenes a través de Docker Push, los usuarios pueden descargar imágenes a través de Docker Pull y ejecutar aplicaciones con Docker Run.

Los usuarios ya no necesitan preocuparse por cómo construir el entorno, cómo instalar y cómo resolver conflictos de biblioteca en diferentes distribuciones y, por lo general, no necesitarán consumir más recursos de hardware y no reducirán significativamente el rendimiento. Es decir, la realización de la estandarización, contenedor

El artículo es relativamente largo, si quieres buscar la instalación docker de un servicio específico, haz buen uso del directorio de la izquierda

Si desea usarlo fácilmente, puede leer este artículo del respondedor:

https://blog.csdn.net/2301_76154806/article/details/128781197

Actualizando continuamente...

La pluma y la tinta no son fáciles, regala una rosa a alguien, deja una fragancia en tu mano

1. mysql

Determine qué versión de mysql instalar, los nombres de los controladores de la versión 5 y la versión 8 son diferentes

1.1 Instalación de configuración por defecto

1. Descargar espejo

docker pull mysql: número de versión

Número de versión: generalmente,
la versión 5.7 u 8.5 es relativamente simple de instalar y se puede acceder de forma remota sin manual

2. Cree un contenedor de aplicaciones docker run --name some-mysql -d -t -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql: número de versión

'my-secret-pw' es la contraseña del usuario raíz de mysql que configuró

1.2 Instalación de configuración personalizada

Si necesita configurar algunos parámetros operativos de mysql, puede consultar los siguientes dos métodos.

1. [Recomendado] Crear un contenedor de aplicaciones con parámetros de configuración

docker run --name some-mysql -d -t -p 3306:3306 -e nombre del parámetro 1 = valor del nombre del parámetro 1 -e nombre del parámetro 2 = valor del nombre del parámetro 2 mysql: número de versión --character-set-server =utf8mb4

Ejemplo: docker run --name some-secret-mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --default_storage_engine=InnoDB --lower_case_table_names=1 --max_allowed_packet=50M --character-set-server= utf8mb4 --sql_mode=ESTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Parámetros comunes - parámetros obligatorios 1. MYSQL_ROOT_PASSWORD=raíz

Establezca la contraseña de usuario root de mysql en root

Instalación de docker versión mysql8 ==========

docker pull mysql:8.0.18

docker run -di --name=mysql8 -p 3306:3306 -v /usr/local/tmp:/etc/mysql/tmp --privileged=true -e MYSQL_ROOT_PASSWORD=xxx mysql:8.0.18

docker exec -it mysql8 /bin/bash

mysql -uroot -pxxx

use mysql;

select host,user from user; 让root能远程连接,host修改为"%",如果是的就不用修改了

navicate for mysql 远程连接
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

修改密码为用不过期

    ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;

修改密码并指定加密规则为 mysql_native_password

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

刷新权限

    FLUSH PRIVILEGES;

这样就可以远程连接数据库了;

  • parámetros opcionales

  • MYSQL_DATABASE=mydb Después de crear el contenedor mysql, cree una nueva base de datos llamada mydb en mysql

  • MYSQL_USER=selton MYSQL_PASSWORD=seltonpassword Cree un usuario mysql llamado selton y establezca su contraseña como seltonpassword Este usuario tiene autoridad de administrador para todas las bases de datos creadas por el parámetro MYSQL_DATABASE

  • --character-set-server=utf8mb4 es equivalente a la configuración de algunos pares clave-valor en nuestro archivo de configuración cnf de mysql.Aquí hay que seleccionar character-set-server, que es el conjunto de caracteres predeterminado creado por mysql, como utf8mb4 Si usa navicat La herramienta de conexión crea la base de datos.Si no se selecciona el tipo de carácter de la base de datos, se usará el tipo de carácter utf8mb4 establecido anteriormente.

  • --sql_mode = strict_trans_tables, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_Engine_Substitution en la versión 5.7, hay una configuración de configuración solo con solo la columna de la columna de SELECT SELECT con el final de la columna de la columna de SELECT. de Groupby Dentro, de lo contrario fallará Esta condición es demasiado estricta y no se agrega en circunstancias normales, por lo que la configuración anterior debe agregarse en circunstancias normales.

  • Si desea ver los parámetros configurables completos, ejecute el siguiente comando, recuerde reemplazar la etiqueta con la versión de mysql que descargó

docker run -it --rm mysql:tag --verbose --help

2. Asigne el archivo de configuración local al contenedor de la aplicación

docker run --name some-mysql-p 3306:3306-v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

Cree un archivo de configuración de este tipo my.cnf en el host del contenedor (use este nombre) y luego reemplace /my/custom con la ruta absoluta de la carpeta donde se encuentra el archivo de configuración my.cnf en el host, para que el contenedor mysql Al crear, todas las configuraciones en my.cnf se usarán para crear mysql.De manera similar, estas configuraciones en my.cnf se pueden configurar usando el valor de -e parámetro 1 = parámetro 1

Adjunto : configuración común de mysql

port = 3306 #默认
pid-file =  /data/mysql/mysql.pid
basedir =  /usr/local/mysql/ #程序安装目录
symbolic-link = 0  #多客户访问同一数据库,该选项默认开启
tmpdir =  /usr/local/mysql/tmp/ #此目录被 MySQL用来保存临时文件
open_files_limit = 65535 #打开时,和max_connections对比,取大数
datadir = /var/lib/mysql  #数据库目录
log-error = /var/lib/mysql/error.log
slow_query_log=on   #开启慢查询日志相关
long_query_time=2   #默认10秒
slow_query_log_file = /var/log/mysql/slow_query.log  #慢查询日志路径
log-queries-not-using-indexes = 1   #记录没有使用索引的sql

socket=/var/lib/mysql/mysql.sock  #该条配置需在[client]段同时配置
default_storage_engine=InnoDB
innodb_file_per_table = on     #InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
innodb_buffer_pool_size=4G     #生产中要改,建议为操作系统内存的70%-80%,需重启服务生效
skip_name_resolve = on         #忽略主机名解析,提高访问速度(注意配置文件中使用主机名将不能解析)
lower_case_table_names = 1     #忽略表单大小写
character-set-server=utf8mb4   #设定默认字符为utf8mb4

Nota: si el volumen de datos se usa para asignar el archivo de datos, la mayor parte de la configuración de mysql, incluida la contraseña, sigue al archivo de datos y los comandos creados por Docker ya no funcionan.

2. gato

servidor de aplicaciones (java)

2.1 Instalación

1. Descargue la imagen docker pull tomcat: número de versión

Las versiones 7, 8 y 9 ahora se usan con más frecuencia

2. Crear un contenedor de aplicaciones

Si desea probarlo, ejecute el siguiente comando, visite ip: 8080, visitará la página de inicio de tomcat

docker run --name some-tomcat -p 8080:8080 -d -t tomcat:número de versión

Sin embargo, generalmente Tomcat se usa para publicar una aplicación web, por lo que si desea publicar una aplicación web, haga lo siguiente

Si obtiene una guerra, descomprímala en una carpeta, luego cambie el nombre de la carpeta a ROOT

docker run --name some-tomcat -p 8080:8080 -d -t -v /root/selton/mywebapp:/usr/local/tomcat/webapps tomcat:número de versión

/root/selton/mywebapp, esta carpeta contiene su carpeta ROOT

configuración personalizada

Si necesita modificar algunos archivos de configuración en el directorio conf de tomcat, debe copiar el tomcat original

3. gog

servidor privado git

Crea un nuevo archivo docker-compose.yml

contenido de entrada

versión: '2' servicios: Mysql: imagen: gogs/gogs:0.11.79 container_name: gogs puertos: - "9876:22" - "9092:3000"

Entonces docker-compose up -d comienza

Acceder a ip local: 8080

esta configuración

ports:
  - "8070:22"
  - "8080:3000"

Asigne los puertos 22 y 3000 en el contenedor a los puertos 8070 y 8080 de la máquina host respectivamente

Es decir, debemos asegurarnos de que la máquina host, es decir, la máquina local, no ocupe los puertos 8070 y 8080 de la máquina que genera docker-compose.yml

gogs está configurado en la página web; vale la pena aprender de él

Asignar el puerto 3000 al puerto 80 con docker es riesgoso Específicamente, al reiniciar, se informa un error y no se puede iniciar el permiso de enlace 80 denegado.

En este momento, el puerto en el archivo de configuración ini en realidad debería ser 3000, y luego Docker asigna la máquina host 80 a este 3000, pero el puerto interno no debería ser 80

ruta del archivo de configuración de la versión de gogs docker /data/gogs/conf/app.ini

https://github.com/gogs/gogs/issues/3503

interfaz de instalación

en primer lugar

configuración de la base de datos

ver directamente el nombre de la base de datos

Necesitamos tener una conexión de base de datos a la que se pueda acceder externamente, y hay una base de datos, solo use el nombre del ejemplo -> gogs, necesitamos crear una nueva base de datos llamada gogs en la conexión de la base de datos

如果您使用 MySQL,请使用 INNODB 引擎以及 utf8_general_ci 字符集

Necesita modificar la IP del host de la base de datos, 127.0.0.1 se cambia a la IP expuesta por la base de datos

Rellene la contraseña de usuario de la base de datos

El siguiente paso es aplicar la configuración básica

Modificar el nombre de dominio a la ip de la maquina donde acabamos de instalar gogs

A continuación, modifique la URL

Modifique el localhost de la url de la aplicación a la ip de la máquina donde está instalado gogs

Tenga en cuenta que si se usa la ventana acoplable aquí para la asignación de puertos, cambie 3000 al puerto asignado

La siguiente es la sección de configuración opcional

Configuración del servicio de correo independientemente

Haga clic en Servidor y otras configuraciones de servicio

Desmarque Habilitar servicio de código de verificación

Marque Prohibir a los usuarios el registro automático para iniciar las restricciones de acceso de inicio de sesión

Cancelar el registro automático de usuarios debe significar que necesitamos un superusuario, y el superusuario crea una cuenta y distribuye

Haga clic en la configuración de la cuenta de administrador

Ingrese la información básica, la dirección de correo electrónico se puede ingresar casualmente

Ya ha terminado, haga clic para instalar ahora

version: '2'
services:
  Mysql:
    image: mysql:5.6
    container_name: gogsMysql5.6
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - /root/gogs/mysqlConf:/etc/mysql/conf.d
      - /root/gogs/createSh:/docker-entrypoint-initdb.d
  Gogs:
    depends_on:
      - Mysql
    image: gogs/gogs:0.11.79
    container_name: gogs
    ports:
      - "8070:22"
      - "8080:3000"
    volumes:
      - /var/gogs:/data

4. existente

从日志 2019-12-09 10:25:49,214 JIRA-Bootstrap INFO [cajconfig.database.SystemDatabaseConfigurationLoader] Lectura de la configuración de la base de datos desde /var/jira/dbconfig.xml

可以看到jira启动会从这个配置中读取数据库配置

在宿主机中新建配置文件

<?xml version="1.0" encoding="UTF-8"?>
<jira-database-config>
<name>defaultDS</name>
<delegator-name>default</delegator-name>
<database-type>mysql</database-type>
<jdbc-datasource>
<url>jdbc:mysql://10.2.132.13:3306/jira?useUnicode=true&amp;characterEncoding=UTF8&amp;sessionVariables=storage_engine=InnoDB
</url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<username>root</username>
<password>root</password> 
<!--以下参数可以不用配置 -->
<pool-min-size>20</pool-min-size>
<pool-max-size>20</pool-max-size>
<pool-max-wait>30000</pool-max-wait>
<validation-query>select 1</validation-query>
<min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
<time-between-eviction-runs-millis>300000
</time-between-eviction-runs-millis>
<pool-max-idle>20</pool-max-idle>
<pool-remove-abandoned>true</pool-remove-abandoned>
<pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
<pool-test-while-idle>true</pool-test-while-idle>
<validation-query-timeout>3</validation-query-timeout>
</jdbc-datasource>
</jira-database-config>

修改相关数据库配置

docker run -p 10909:8080 --name some-jira -d -e TZ='Asia/Shanghai' -v /my/conf: haxqer/jira

5. clickhouse

clickhouse在dockerhub的官网

docker run -dit --name some-clickhouse -e CLICKHOUSE_DB=test1 -e CLICKHOUSE_USER=root -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=hexin -p 9000:9000 -p 8123:8123 clickhouse/clickhouse-server
用户名root,密码hexin,连接端口8123

6. redis

在Reids 4.x之后,Redis新增了模块功能特性,通过外部拓展,可以实现新的Redis命令,通过写c语言并编译出.so文件,可实现代码执行漏洞。

针对未授权或弱口令的Redis服务,攻击者通过构造特定请求,成功利用漏洞可在目标服务器上执行任意命令,风险极大。攻击者常常使用这个漏洞将用户的服务器变为"肉鸡","矿机"

修复的方式有很多种, 最有效的方式是redis仅在内网环境中使用,最简单的方式是redis连接的时候指定密码

下面是docker创建redis容器并指定密码

尽管现在已经有了6.x版本,但是它是redis有史以来最大的一个版本,所以即使它是稳定的,也要小心,在投入生产之前测试工作负载
docker pull redis
docker run --name some-redis -d -it -p 16379:6379 redis --requirepass "u}J#D=>MryWf" --appendonly yes

如果想要持久化redis中的数据,添加数据卷映射

docker run --name some-redis -d -it -v /your/host/want/store/redisdata/path:/data -p 16379:6379 redis --requirepass "u}J#D=>MryWf" --appendonly yes

7. zookeeper

docker pull zookeeper
docker network create app-bridge --driver bridge
docker run --name some-zookeeper --network app-bridge -e ALLOW_ANONYMOUS_LOGIN=yes -d -it -p 2181:2181 bitnami/zookeeper

8. kafka

注意: 此kafka的安装依赖与zookeeper的安装
#节点1 
docker run -d --name=kafka2 \
 -p 9092:9092 \
 --network app-bridge \
 -e ALLOW_PLAINTEXT_LISTENER=yes \
 -e KAFKA_CFG_ZOOKEEPER_CONNECT=81.70.199.213:2181 \
 -e KAFKA_BROKER_ID=2 \
 -e KAFKA_HEAP_OPTS="-Xmx180m -Xms180m" \
 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://81.70.199.213:9092 \
 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092  \
 bitnami/kafka

 # 节点2
 docker run -d --name=kafka3 \
 -p 9093:9092 \
 --network app-bridge \
 -e ALLOW_PLAINTEXT_LISTENER=yes \
 -e KAFKA_CFG_ZOOKEEPER_CONNECT=81.70.199.213:2181 \
 -e KAFKA_BROKER_ID=3 \
  -e KAFKA_HEAP_OPTS="-Xmx180m -Xms180m" \
 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://81.70.199.213:9093 \
 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092  \
 bitnami/kafka

ALLOW_PLAINTEXT_LISTENER=yes:允许使用PLAINTEXT侦听器

KAFKA_CFG_ZOOKEEPER_CONNECT:zookeeper集群地址,多节点,分割

KAFKA_BROKER_ID:节点id,用来指定 Kafka 集群中 broker 的唯一标识,默认值为 -1。如果没有设置,那么 Kafka会自动生成一个

KAFKA_ADVERTISED_LISTENERS:绑定公网 IP 供外部客户端使用

KAFKA_LISTENERS:绑定私网 IP 地址供 broker 间通信使用

9. dubbo-admin

docker run --name some-dubbo-admin -p 8080:8080 -d -it -e admin.registry.address=zookeeper://selton.cn:2181 -e admin.config-center=zookeeper://selton.cn:2181 -e admin.metadata-report.address=zookeeper://selton.cn:2181  apache/dubbo-admin 

10. sonar

docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube

注意: 保持服务器剩余内存足够,默认情况下,sonarqube大约占用1.5G内存

打开http://yourhost:900/,点击"Log in"

登录账号:admin 密码:admin

11. flink

docker-compose.yml

version: "2.2"
services:
  jobmanager:
    image: flink:latest
    ports:
      - "18001:8081"
    command: jobmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager

  taskmanager:
    image: flink:latest
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 1
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 8

12. postgres

docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres

13. fastDFS

docker pull delron/fastdfs
docker run -d --network=host --name some-tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

#注意: 需要暴露22122端口 23000 否则下面的创建会有问题 8888端口也需要暴露 将来通过这个端口访问图片
#selton.cn替换成你的公网host或者局域网host

docker run -d --network=host --name some-storage -e TRACKER_SERVER=selton.cn:22122 -v /var/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

14. solr

在宿主机中执行如下命令

mkdir solrdata

sudo chmod 777 solrdata

docker run --name mall-solr -d -p 8983:8983 -v "$PWD/solrdata:/var/solr" solr:8

// 参数详解

run 运行容器

-d 后台运行

-p 容器端口和宿机端口映射

– name 容器名称

创建一个名为mall_core的核心

docker exec -it mall-solr bin/solr create_core -c mall_core

这个命令是在宿主机上执行的, 会让宿主机向容器发送一条指令
bin/solr create_core -c mall_core
这个指令,是使用solr的脚本, 创建一个名称为mall_core的核心

出现 Created new core ‘' 即创建

docker exec --user=root -it mall-solr bash

cp /opt/solr-8.10.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.10.1.jar /opt/solr-8.10.1/server/solr-webapp/webapp/WEB-INF/lib

在宿主机的solrdata中

vi /data/mall_core/conf/managed-schema

<fieldType name="smartcn" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
        </analyzer>
        <analyzer type="query">
          <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
        </analyzer>
  </fieldType>

重启docker

Supongo que te gusta

Origin blog.csdn.net/2301_76154806/article/details/128781183
Recomendado
Clasificación