[Docker] Use Docker to deploy common middleware


theme: healer-readable

highlight: xcode

image.png

This article introduces how to use Docker to deploy middleware services commonly used in enterprise work.

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

Set the mapping between the host port 80 and the container's port 80, as well as the mapping between the data volume directory mounting and the directory where the container's configuration file is located. One is the Nginx homepage and the other is the server configuration file.

Tomato

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

Set the host port 8080 port and container port 8080 mapping, access the host IP address plus port 8080 to view the Tomcat home page.

-vThe parameter setting is the directory mapping relationship between the webapps of the Tomcat container and the host. Add the war package in the host directory to access the web app you developed normally.

MySQL

Stand-alone deployment

MySQL long-term support versions include 5.7 and 8.0, and the one demonstrated here is 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

To use MySQL's built-in client access, enter the following command:

```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 ```

Guess you like

Origin blog.csdn.net/weixin_45254062/article/details/131957709