docker搭建练习

systemctl restart docker
docker start mysql-master mysql-slave
docker restart redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6
docker start zoo1 zoo2 zoo3 kafka1 kafka2 kafka3 

systemctl start docker
docker start eureka1 eureka2 eureka3 nexus2 
config-server1 config-server2
========================================================================
cd /etc/sysconfig/network-scripts
vi ifcfg-ens32
service network restart

docker
https://blog.csdn.net/m0_47010003/article/details/127775185
https://deepzz.com/post/docker-compose-file.html#toc_31

 telnet
yum -y install telnet-server.x86_64
yum -y install telnet.x86_64
yum -y install xinetd.x86_64
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd

======================================================================
root root1234
root root
nexus,mqtt
admin admin123
=====================================================================
docker
docker overlay2 diff和merge目录的conf要修改哪个   --->fiff 差分信息   ----->merge 运行信息
=====================================================================
https://blog.csdn.net/lc_2014c/article/details/125814169
https://blog.csdn.net/qq_41296669/article/details/124460465
3、docker搭建MySQL集群
3.1新建新的MySQL容器
#第一个
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/cnf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
#第二个
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/cnf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

3.2配置主机
进入/mydata/mysql-master/conf目录下新建my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启MySQL
docker restart mysql-master

进入mysql-master容器并登录
docker exec -it mysql-master /bin/bash
mysql -uroot -proot

master容器实例内创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;


3.3配置从机
进入/mydata/mysql-slave/conf目录下新建my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

=============================================================================

重启MySQL
docker restart mysql-slave

查看同步状态
show master status;

进入mysql-master容器并登录
docker exec -it mysql-master /bin/bash
mysql -uroot -proot

从容器配置主从复制
change master to master_host='192.168.172.30', master_user='slave', master_password='123456', master_port=3307, master_log_file='mysql-bin.000003', master_log_pos=306, master_connect_retry=30;

最后
#启动slave同步
START SLAVE;

///

show variables like 'log_%';

1、创建数据库
create database 数据库名

2、查看数据库
show databases;        查看所有的数据库
show create database 数据库名;        查看指定数据库

3、删除数据库
drop database 数据库名;

4、切换数据库
use 数据库名;

5、查看正在使用的数据库
select database();

6、按指定码表创建数据库
CREATE DATABASE 数据库名 CHARACTER SET UTF8;


1、创建表
create table 表名(
    字段名 类型(长度) 约束,
    字段名 类型(长度) 约束
);

2、创建一个和之前一样但名字不一样的表
create table 新表名 like 旧的表名;

3、查看表
show tables;     查看所有表

4、查看表结构
desc 表名;

5、删除表
drop table 表名;
drop table 表名 if exists;    判断是否存在,存在则删

6、修改表名
rename table 旧名 to 新名;

7、修改表的字符集
alter table 表名 character set 字符集;

8、向表中添加字段
alter table 表名 add 字段名 字段类型(长度);

9、修改表中字段的类型或长度
alter table 表名 modify 字段名 字段类型(长度);

10、修改字段名
alter table 表名 change 旧字段名 新字段名 类型(长度);

11、删除字段
alter table 表名 drop 字段名;

12、查询表详细结构
show create table 表名称;


1、写字段名的,插入全部数据
insert into 表名(字段1,字段2 ...) values(数据1,数据2 ...);
后面括号里的数据与第一个括号的字段顺序要一一对应

2、不写字段名的,插入全部数据(全列添加)
insert into 表名 values(数据1,数据2 ...)
括号内按创建表的列顺序添加数据

3、插入指定字段值
insert into 表名(字段名) values(数据); 

4、修改(不带条件)
update 表名 set 字段名 = 值;

5、修改(带条件)
update 表名 set 字段名 = 值 where 字段名 = 值;

6、删除数据
delete from 表名;        一个个删除表中所有数据,效率慢,一般不用
truncate 表名;         直接删除整个表,并且再创建一个新表

7、删除一行数据
delete from 表名 where 条件;

1、查询表中所有数据
select *from 表名;

2、查询表,只显示指定的字段
select 指定字段1,指定字段2,指定字段3... from 表名;

3、将所有的员工信息查询出来,并将列名改为中文显示
别名查询,使用关键子AS (不写AS也可)
SELECT 
    eid AS '编号',
    ename AS '姓名',
    sex AS '性别',
    salary AS '薪资',
    edate AS '入职日期',
    edpt AS '部门'
FROM emp;

4、查一共有几个部门(指定字段名)(去重查询)
select distinct 字段名 from 表名;

5、查询所有的员工的工资+1000进行显示
select ename,salsy+1000 from emp;

6、查询含有“八”的所有员工信息
SELECT *FROM emp WHERE ename LIKE "%八%";

7、查询“沙”开头的所有员工信息
SELECT *FROM emp WHERE ename LIKE "沙%";

8、查询第三个字为“马”的所有员工信息
SELECT *FROM emp WHERE ename LIKE "__马%";

9、查询没有部门的员工信息
SELECT *FROM emp WHERE edpt IS NULL;

10、查询有部门的员工信息
SELECT *FROM emp WHERE edpt IS NOT NULL;

11、查询名字为孙悟空的员工信息
SELECT *FROM emp WHERE ename = '孙悟空';

12、查询薪资大于500的员工信息
SELECT *FROM emp WHERE salary > 500;

13、查询薪资不是5000的员工信息
SELECT *FROM emp WHERE salary != 5000;
SELECT *FROM emp WHERE salary <> 5000;

14、查询工资在200到500之间的
SELECT *FROM emp WHERE salary>=200 AND salary <= 500;
SELECT *FROM emp WHERE salary BETWEEN 200 AND 500;

15、指定的参数 not
SELECT *FROM emp WHERE salary NOT IN(200,300);

16、去重查询的命令
select distinct 字段1,字段2,… from 表名;


17、limit关键字(分页查询)
方言mysql
格式:
select 字段 from 表名 limit offset,length
offset :从哪开始  默认是0
length :要查询的条数

如需查询3条数据,需写三条语句,一个语句分一页
分页查询,每次显示2条数据
起始索引= (当前页-1) * 每页的条数

https://blog.csdn.net/weixin_44000925/article/details/126530840
///

7.从服务器同步主服务器配置
master_host 主服务器地址
master_user 主服务器用户名
master_password 主服务器密码
master_log_file 主服务器配置文件
master_log_pos 主服务器读取配置文件的开始位置,也就是从第多少行开始读取。

change master to master_host='192.168.0.105',master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=120;

==============================================================================================================
redis
https://www.cnblogs.com/niceyoo/p/13011626.html
我们定义了192.168.172.* 网段
docker network create --subnet=192.168.172.30/16 net2
docker create --name redis-node1 -v  /mydata/redis-cluster/node1:/data -p 6381:6379 redis:latest --cluster-enabled yes  --cluster-config-file nodes-node-1.conf
docker create --name redis-node2 -v  /mydata/redis-cluster/node2:/data -p 6382:6379 redis:latest --cluster-enabled yes  --cluster-config-file nodes-node-2.conf
docker create --name redis-node3 -v  /mydata/redis-cluster/node3:/data -p 6383:6379 redis:latest --cluster-enabled yes  --cluster-config-file nodes-node-3.conf
docker create --name redis-node4 -v  /mydata/redis-cluster/node4:/data -p 6384:6379 redis:latest --cluster-enabled yes  --cluster-config-file nodes-node-4.conf
docker create --name redis-node5 -v  /mydata/redis-cluster/node5:/data -p 6385:6379 redis:latest --cluster-enabled yes  --cluster-config-file nodes-node-5.conf
docker create --name redis-node6 -v  /mydata/redis-cluster/node6:/data -p 6386:6379 redis:latest --cluster-enabled yes  --cluster-config-file nodes-node-6.conf

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6
执行「docker inspect redis-node1」得到 redis-node1 ip 信息为:172.17.0.4 
4 5 6 7 8 9

# 这里以进入 node1 为例
docker exec -it redis-node1 /bin/bash
# 接着执行组建集群命令(请根据自己的ip信息进行拼接)
redis-cli --cluster create 172.17.0.4:6379  172.17.0.5:6379  172.17.0.6:6379   172.17.0.7:6379   172.17.0.8:6379   172.17.0.9:6379  --cluster-replicas 0

验证: 
172.17.0.1 --> redis-cli -c --->set key value
172.17.0.2 --> redis-cli -c --->get key
  
//
存在的问题
按照如上的步骤,虽然集群搭建成功了,但其实还是有点问题的,
由于集群结点中的 ip地址 是docket内部分配的,如:172.17.0.2 等,如果使用 redis集群 的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。
一种解决方案是让Docker使用 host模式 的网络连接类型,Docker在使用host模式下创建的容器是没有自己独立的网络命名空间的,
是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了,
尽管这种方式有安全隐患,但目前来说还没找到其他可行性模式。
我们重新采用 host模式  https://www.cnblogs.com/niceyoo/p/14118146.html
跟之前创建命令不同,一是指定了 --net 网络类型为 host,二是这种情况下就不需要端口映射了,比如 -p 6379:6379,因为此时需要对外共享容器端口服务,所以只需要指定对外暴露的端口 -p 6379、-p 6380 等

docker create --name redis-node1 --net host -v /mydata/redis-cluster/node1:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6381
docker create --name redis-node2 --net host -v /mydata/redis-cluster/node2:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6382
docker create --name redis-node3 --net host -v /mydata/redis-cluster/node3:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6383
docker create --name redis-node4 --net host -v /mydata/redis-cluster/node4:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6384
docker create --name redis-node5 --net host -v /mydata/redis-cluster/node5:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6385
docker create --name redis-node6 --net host -v /mydata/redis-cluster/node6:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6386

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6

# 组建集群,10.211.55.4为当前物理机的ip地址
# 这里以进入 node1 为例
docker exec -it redis-node1 /bin/bash
redis-cli --cluster create 192.168.172.30:6381 192.168.172.30:6382 192.168.172.30:6383 192.168.172.30:6384 192.168.172.30:6385 192.168.172.30:6386 --cluster-replicas 1

创建成功后,通过 redis-cli 查看一下集群节点信息:
root@CentOS7:/data# redis-cli -c -p 6381 -h 192.168.172.30
127.0.0.1:6379> cluster nodes

--cluster-replicas 1,参数后面的数字表示的是主从比例,比如这里的 1 表示的是主从比例是 1:1,什么概念呢?
也就是 1 个主节点对应几个从节点,现有 6 个实例,所以主从分配就是 3 个 master 主节点,3 个 slave 从节点。
主节点最少3个,3个才能保证集群的健壮性。
如果 --cluster-replicas 2 呢?
那么主从比例就是 1:2,也就是 1 个主节点对于应 2 个从节点。
即:3(master) + 6(slave) = 9个 Redis 实例。


https://www.cnblogs.com/wy123/p/9929459.html
https://www.jianshu.com/p/f0e042b95249


=========================================================================================================
zk
https://www.haveyb.com/article/2700
https://www.yiibai.com/docker/network_create.html

https://www.jianshu.com/p/70b29b7c80ef
https://blog.csdn.net/qq_27229113/article/details/126015972
https://www.jb51.net/article/248361.htm

下边的步骤都是在1这个节点上进行的操作,除特殊说明外。
创建自定义的bridge,这一步必须的,否侧集群中通信只能通过ip比较麻烦,注册到同一个bridge容器间可以通过容器名进行通信
docker network create -d bridge my-net

docker network ls
查看docker网卡
docker network rm 网卡id
删除docker网卡
docker network inspect 网卡id
查看docker网卡的相关详细信息

-----------------------------------------------
创建docker-compose.yml
cd /data/docker-compose/zookeeper
vi docker-compose.yml
------------------------------------------------
version: '3.6'
services:
  zoo1:
    image: zookeeper
    restart: always
    hostname: zoo1
    container_name: zoo1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    volumes:
      - /data/docker-data/zookeeper/zoo1/data:/data
      - /data/docker-data/zookeeper/zoo1/datalog:/datalog

  zoo2:
    image: zookeeper
    restart: always
    hostname: zoo2
    container_name: zoo2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    volumes:
      - /data/docker-data/zookeeper/zoo2/data:/data
      - /data/docker-data/zookeeper/zoo2/datalog:/datalog

  zoo3:
    image: zookeeper
    restart: always
    hostname: zoo3
    container_name: zoo3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    volumes:
      - /data/docker-data/zookeeper/zoo3/data:/data
      - /data/docker-data/zookeeper/zoo3/datalog:/datalog

----------------------------------------------------
docker-compose up -d
docker exec -it zoo1 bash
zkServer.sh status


==================================================================================
kafka

docker pull wurstmeister/kafka
docker tag docker.io/wurstmeister/kafka kafka
docker rmi docker.io/wurstmeister/kafka

docker pull sheepkiller/kafka-manager
docker tag docker.io/sheepkiller/kafka-manager kafka-manager
docker rmi docker.io/sheepkiller/kafka-manager

docker network create --driver bridge zk
 
----------------------------------------------------------------
创建docker-compose.yml
version: '3'
 
services:
  kafka1:
    image: kafka
    restart: always
    container_name: kafka1
    hostname: kafka1
    expose:
      - 9991
      - 9091 
    ports:
      - 9091:9091
      - 9991:9991      
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: INSIDE://:50093,OUTSIDE://:9091
      KAFKA_ADVERTISED_HOST_NAME: kafka1
      KAFKA_ADVERTISED_PORT: 9091
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:50093,OUTSIDE://192.168.172.30:9091
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2182,zoo3:2183
      ALLOW_PLAINTEXT_LISTENER : yes
      JMX_PORT: 9991 #开放JMX监控端口,来监测集群数据
      JVM_XMS: "256M"
      JVM_XMX: "512M"
    volumes:
      - /mydata/kafka/kafka1/docker.sock:/var/run/docker.sock
      - /mydata/kafka/kafka1/data:/kafka
    networks:
      - zk
 
  kafka2:
    image: kafka
    restart: always
    container_name: kafka2
    hostname: kafka2
    expose:
      - 9992 
      - 9092             
    ports:
      - 9092:9092
      - 9992:9992
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_LISTENERS: INSIDE://:50092,OUTSIDE://:9092
      KAFKA_ADVERTISED_HOST_NAME: kafka2
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:50092,OUTSIDE://192.168.172.30:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2182,zoo3:2183
      ALLOW_PLAINTEXT_LISTENER : yes
      JMX_PORT: 9992 #开放JMX监控端口,来监测集群数据
      JVM_XMS: "256M"
      JVM_XMX: "512M"
    volumes:
      - /mydata/kafka/kafka2/docker.sock:/var/run/docker.sock
      - /mydata/kafka/kafka2/data:/kafka
    networks:
      - zk
 
  kafka3:
    image: kafka
    restart: always
    container_name: kafka3
    hostname: kafka3
    expose:
      - 9993
      - 9093           
    ports:
      - 9093:9093
      - 9993:9993          
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_LISTENERS: INSIDE://:50093,OUTSIDE://:9093
      KAFKA_ADVERTISED_HOST_NAME: kafka2
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:50093,OUTSIDE://192.168.172.30:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
      ALLOW_PLAINTEXT_LISTENER : yes
      JMX_PORT: 9993 #开放JMX监控端口,来监测集群数据
      JVM_XMS: "256M"
      JVM_XMX: "512M"
    volumes:
      - /mydata/kafka/kafka3/docker.sock:/var/run/docker.sock
      - /mydata/kafka/kafka3/data:/kafka
    networks:
      - zk 
 
  kafka-manager:
    image: kafka-manager
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    ports:
      - 9010:9000
    networks:
      - zk
    environment:
      ZK_HOSTS: zoo1:2181,zoo2:2182,zoo3:2183
      KAFKA_BROKERS: kafka1:9091,kafka2:9092,kafka3:9093
      APPLICATION_SECRET: letmein
      KM_ARGS: -Djava.net.preferIPv4Stack=true
      
      
networks:
  zk:
    driver: bridge
    external: true
    


-------------------------------------------------------------------
将所有kafka和zookeeper加入一个网络
docker network connect zookeeper_kafka_net zoo1
docker network connect zookeeper_kafka_net zoo2
docker network connect zookeeper_kafka_net zoo3
docker network connect zookeeper_kafka_net kafka1
docker network connect zookeeper_kafka_net kafka2
docker network connect zookeeper_kafka_net kafka3
docker network connect zookeeper_kafka_net kafka-manager

之所以这样指定网络而不是在编排文件中指定网络为一个网络段的原因是因为考虑到后面可能kafka和zookeeper分布在6台机器上,到时使用docker swarm构建docker 集群,网络处理就很方便,不用修改编排文件


报错:https://www.cnblogs.com/gexiaoshan/p/9875456.html
==========================================================================================================================
erueka
https://blog.csdn.net/zhang_adrian/article/details/100577384
https://blog.csdn.net/weixin_43872111/article/details/118426384
=================================================

# eureka服务端的实例名称
spring:
  application:
    name: eureka
eureka:
  instance:
    prefer-ip-address: false
  client:
    #表示是否将自己注册到Eureka Server
    register-with-eureka: true
    #表示是否从Eureka Server获取注册的服务信息
    # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: true
    service-url:
      defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/,http://eureka3:8763/eureka/
  server:
    # 设置eureka是否启动自我保护   true指开启eureka的自我保护   false指关闭eureka的自我保护
    # 如果关闭eureka的自我保护,则不可用的服务会被及时剔除掉
    enable-self-preservation: false
    # eureka的阈值(默认值)是0.85(当注册在eureka中的正常服务占比低于85%时会开启eureka的自我保护)
    # 也就是说Eureka Server在运行期间会去统计心跳失败比例   在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期
    renewal-percent-threshold: 0.85
    # 剔除服务的时间间隔毫秒数(单位:毫秒)  扫描失效服务的时间间隔(默认是60*1000 即60秒)
    eviction-interval-timer-in-ms: 1000
    # 是否从readonly(只读缓存)中读取实例(默认是true)
    use-read-only-response-cache: false
    # 设置 readwrite 和 readonly 两级缓存的同步时间间隔
    response-cache-update-interval-ms: 1000


---
spring:
  profiles: 8762
server:
  port: 8762
eureka:
  instance:
    hostname: eureka1
---
spring:
  profiles: 8761
server:
  port: 8761
eureka:
  instance:
    hostname: eureka2
---
spring:
  profiles: 8763
server:
  port: 8763
eureka:
  instance:
    hostname: eureka3

===============================================

version: '2'
services:
  eureka1:
    image: eureka
    container_name: eureka1
    hostname: eureka1
    networks:
      - eureka-net
    ports:
      - 8761:8761
    environment:
      - spring.profiles.active=8761

  eureka2:
    image: eureka
    container_name: eureka2
    hostname: eureka2
    networks:
      - eureka-net
    ports:
      - 8762:8762
    environment:
      - spring.profiles.active=8762

  eureka3:
    image: eureka
    container_name: eureka3
    hostname: eureka3
    networks:
      - eureka-net
    ports:
      - 8763:8763
    environment:
      - spring.profiles.active=8763
networks:
  eureka-net:
    driver: bridge
=================================================

nexus2
https://www.cnblogs.com/rexfang/p/7625696.html
docker search nexus
docker pull sonatype/nexus3
mkdir -p /mydata/nexus/
chmod 755 /mydata/nexus/

docker run -d --restart always  -m 256M --memory-reservation 200M --name nexus3 -p 8081:8081 -v /mydata/nexus:/var/nexus-data nexus2

docker run -d --restart=always --name=nexus2 -p8081:8081 --privileged=true -e INSTALL4J_ADD_VM_PARAMS="-Xms512M -Xmx512M -XX:MaxDirectMemorySize=512M" -v /mydata/nexus:/var/nexus-data nexus2


=====================================================
mqtt
镜像名emqx/emqx

version: '3'
services:
  emqx1:
    image: emqx
    restart: always
    hostname: emqx
    container_name: emqx1
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=nodeA.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "[email protected],[email protected]"
    - "EMQX_DASHBOARD_DEFAULT_USER_LOGIN=root"
    - "EMQX_DASHBOARD_DEFAULT_USER_PASSWORD=root"  
    ports:
      - 1883:1883
      - 8083:8083
      - 8084:8084
      - 8883:8883
      - 18083:18083
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 1G
    networks:
      emqx:
        aliases:
        - nodeA.emqx.io

  emqx2:
    image: emqx
    restart: always
    hostname: emqx
    container_name: emqx2
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=nodeB.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "[email protected],[email protected]"
    - "EMQX_DASHBOARD_DEFAULT_USER_LOGIN=root"
    - "EMQX_DASHBOARD_DEFAULT_USER_PASSWORD=root"
    ports:
      - 21883:1883
      - 28083:8083
      - 28084:8084
      - 28883:8883
      - 38083:18083
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 1G
    networks:
      emqx:
        aliases:
        - nodeB.emqx.io
        
networks:
  emqx:
    driver: bridge
    external: true  

你可能感兴趣的:(docker)