使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程

news2024/11/5 12:55:30

因为开发经常会用到一些组件,又不想在本地启动,所以买了个服务器,然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用docker-compose安装组件的教程以及一些需要注意的地方。

关于docker和docker-compose的安装在另一篇博客中有所讲解,不清楚的朋友可以先去看看,按照流程先装好docker程序。

https://blog.csdn.net/a_lllk/article/details/143382884

这里会每个容器生成一个单独的docker-compose.yml,如果需要同时安装多个容器的话。直接跳到最后的总结,复制整个yml然后再剔除自己不需要的。

1.redis

docker-compose安装redis比较简单,直接复制下面代码就可以搞定。

version: "3.3"
services:
  'redis':
    image: redis
    container_name: redis
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 6379:6379
    command: ["redis-server","/etc/redis/redis.conf"]
    volumes:
      - /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf 
      - /usr/local/docker/redis/data:/var/lib/redis/
      - /usr/local/docker/redis/logs:/logs
    restart: always 

用上面的文件生成的redis容器默认是没有密码的。如果redis需要设置密码或者其他的一些东西的话,这里就需要自定义一个配置文件。简易的配置文件内容如下,只需要将requirepass 后面的内容修改成自己的密码就可以了。

# Redis服务器配置 

# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1  
#bind 127.0.0.1  

# 服务器端口号  
port 6379

#配置密码,不要可以删掉
requirepass 123456

#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no

#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid  

#默认为no,redis持久化,可以改为yes
appendonly yes


#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300

#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000

# 按需求调整 Redis 线程数
tcp-backlog 511

2.rabbitmq

下面是rabbitmq的compose内容。

version: "3.1"
services:
  rabbitmq:
    image: rabbitmq
    container_name: "rabbitmq"
    restart: always
    volumes:
      - /usr/local/docker/rabbitmq/data/:/var/lib/rabbitmq/
      - /usr/local/docker/rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
    ports:
      - 5672:5672
      - 15672:15672
    environment:
          RABBITMQ_DEFAULT_USER: root
          RABBITMQ_DEFAULT_PASS: root

直接运行以上文件,就能生成rabbitmq容器。最下面两行"RABBITMQ_DEFAULT_USER"和

"RABBITMQ_DEFAULT_PASS"主要是用来登录管理页面的用户名和密码,可以按照自己的要求去修改。

现在新版本rabbitmq管理界面,默认是不会开启的。需要在容器中去执行启动管理页面的代码,才能够通过ip去访问管理页面。

输入下面代码进去容器内部

docker exec -it rabbitmq /bin/bash

执行以下代码开启管理页面

rabbitmq-plugins enable rabbitmq_management

输入代码后如果打印结果如下图所属,那么就表明管理界面已经开启了,可以通过

ip+:15672端口的形式去访问管理页面,输入上面定义的用户名和密码之后进入管理中心。

3.mysql

version: "3.3"
services:
  'mysql':
    image: mysql:8.0.27
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Asia/Shanghai
    command: 
      --default-authentication-plugin=mysql_native_password
      --collation-server=utf8mb4_general_ci
      --lower_case_table_names=1
    volumes:
      -  /usr/local/docker/mysql/data:/var/lib/mysql
      -  /usr/local/docker/mysql/logs:/var/log/mysql
      -  /usr/local/docker/mysql/init:/docker-entrypoint-initdb.d/
      -  /usr/local/docker/mysql/conf.d/:/etc/mysql/conf.d/
    ports:
      - 3306:3306
    restart: always
3.1 group by失效解决办法(1)

上面使用的是mysql8.0.27版本。mysql有个问题就是5.7以上的版本,禁用了“group by”方法。可以通过下面sql去查询。

select version(), @@sql_mode;

上面这个“sql_model”中存在“ONLY_FULL_GROUP_BY”,表示禁用了group_by。如果使用group_by会报以下错误。

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sys.sys_config.variable' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

上面这个错误有两个解决办法,第一个就是执行下面sql。

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这个方式确实可以解决这个问题。但是这种方法有一个问题,就是如果重启mysql,那么该设置就会失效,那么就引申出了下面第二种方式,修改mysql的配置文件,让该配置可以永久生效。

3.2 group by失效解决办法(2)

因为上面的docker-compose中挂载了mysql的配置文件目录,所以可以自定义一个配置文件。并放入mysql容器中。

我这里新建一个.cnf文件,命名为custom.cnf。

[mysqld]
# 设置客户端默认字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 设置是否区分大小写(初始化后此参数在这里也必须存在)
lower_case_table_names=1
# sql_mode模式,去除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

上面是文件内容,将配置文件上传到/usr/local/docker/mysql/conf.d/目录下。

注意:

这里上传了配置文件之后,如果直接去重启mysql,其实配置文件是不生效的。使用ls命令当前配置文件的权限为“-rw-rw-rw-”,也就是“666”,读写权限。这里配置文件拥有读写权限,mysql认为该配置文件是不安全的,所以在mysql中会被忽略。所以这里需要把配置文件的权限改为“644”,也就是“-rw-r-r-”权限,让配置文件只读就可以了。

chmod 644 custom.cnf

运行以上命令,配置文件的权限已经被改成了644,然后再重启mysql,发现配置文件已经生效,sql_model也已经被修改了。

可以再运行查询语句去验证

4.nacos

4.1简单安装

naocs的安装比较简单,运行下面文件生成nacos容器。

version: '3'
services:
  nacos:
    image: nacos/nacos-server
    container_name: nacos
    environment:
      - PREFER_HOST_MODE=hostname
      - MODE=standalone
    ports:
      - 8848:8848
      - 9848:9848
    volumes:
      - /usr/local/docer/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    restart: always

然后在浏览器中访问下面地址,进入nacos的管理页面。默认的用户名和密码都是nacos。

http://localhost:8848/nacos
4.2使用mysql作为数据源

因为我们上面已经安装了mysql,也可以使用它作为mysql的数据源。现在mysql中新建一个数据库,就将它命名为nacos。然后先运行下面的mysql文件,将表在数据库中建立。

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE users (
	username varchar(50) NOT NULL PRIMARY KEY,
	password varchar(500) NOT NULL,
	enabled boolean NOT NULL
);

CREATE TABLE roles (
	username varchar(50) NOT NULL,
	role varchar(50) NOT NULL,
	constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

sql文件会在mysql中生成以下表。

下面是使用msql作为数据源的文件内容。注意修改mysql相关的信息。

SPRING_DATASOURCE_PLATFORM使用的数据源平台
MYSQL_SERVICE_HOSTmysql的主机地址
MYSQL_SERVICE_DB_NAMEmysql中数据库名称
NACOS_AUTH_IDENTITY_KEY登录nacos管理页面的用户名
NACOS_AUTH_IDENTITY_VALUE登录nacos管理页面的密码
version: "3.3"
services:
  'nacos':
    image: nacos/nacos-server
    container_name: nacos
    environment:
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.0.1
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
      - NACOS_AUTH_IDENTITY_KEY=nacos
      - NACOS_AUTH_IDENTITY_VALUE=nacos
      - NACOS_AUTH_ENABLE=true
      - JVM_XMS=512m
      - JVM_XMX=512m
      - JVM_XMN=256m
    volumes:
      - /usr/local/docker/nacos/logs/:/home/nacos/logs
      - /usr/local/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - 8848:8848
      - 9848:9848
    restart: always

然后运行上面的compose文件,发现nacos没有启动成功,然后查看运行日志发现报了下面错误,点击错误引导的页面

the length of secret key must great than or equal 32 bytes; And the secret key  must be encoded by base64.Please see https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

大概意思就是需要加一个密匙,然后根据自己版本复制里面的版本。

使用下面命令查看nacos的详情。

docker inspect nacos

因为我在docker-compose中并没有指定nacos的版本,所以当前默认下载最新的2.4.3版本。然后回到报错的提示页面。复制这里的2.1.0版本后面的信息。

修改文件信息如下,加一行这个

     -NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
 

然后删除当前报错的容器和挂载的目录,重新运行compose文件

version: "3.3"
services:
  'nacos':
    image: nacos/nacos-server
    container_name: nacos
    environment:
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.1.246
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
      - NACOS_AUTH_IDENTITY_KEY=nacos
      - NACOS_AUTH_IDENTITY_VALUE=nacos
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
      - JVM_XMS=512m
      - JVM_XMX=512m
      - JVM_XMN=256m
    volumes:
      - /usr/local/docker/nacos/logs/:/home/nacos/logs
      - /usr/local/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - 8848:8848
      - 9848:9848
    restart: always

nacos运行成功,访问ip+8848/nacos,使用上面配置文件中的登录名和密码登录控制台。

这里可以尝试去权限控制-》用户列表中创建一个用户,然后去mysql数据库的users表中查看新增的用户是否存在,以便验证是否成功配置了mysql作为nacos的数据源。

5.nginx

docker创建nginx容器代码如下:

version: "3.3"
services:
  'nginx':
    image: nginx
    container_name: nginx
    environment:
      - TZ=Asia/Shanghai
    volumes:
      -  /usr/local/docker/nginx/html/:/usr/share/nginx/html/
      -  /usr/local/docker/nginx/logs:/var/log/nginx
    ports:
      - 80:80
      - 443:443
    restart: always

docker安装nginx这里有个小问题,就是nginx容器中的配置文件是没有办法挂载到宿主机目录中的,如果强行挂载会报以下错误:

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/etc/nginx/nginx.conf" to rootfs at "/etc/nginx/nginx.conf": mount /etc/nginx/nginx.conf:/etc/nginx/nginx.conf (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

大概意思就是容器中/etc/nginx/nginx.conf文件没有办法挂载,所以如果我们需要修改nginx的配置文件,就需要将配置文件从容器中复制一份出来到宿主机中,然后修改完后再复制进容器中。nginx容器中的配置文件路径存放在/etc/nginx/nginx.conf

首先在宿主机容器中创建一个目录

mkdir usr/local/docker/nginx/conf

然后复制容器中的配置文件到该目录

docker cp nginx:/etc/conf/nginx.conf /usr/local/docker/nginx/conf/nginx.conf

然后在宿主机中对nginx的配置文件根据需要进行修改,修改完后使用命令再将文件复制到容器中

docker cp /usr/local/docker/nginx/conf/nginx.conf nginx:/etc/conf/nginx.conf

最后再重启nginx容器,使配置文件生效

docker restart nginx

访问下面页面,因为是使用的80端口,所以可以不加

http://localhost

显示如下,因为目录下面没有空的页面。

这里在/usr/local/docker/nginx/html/ 目录下建了个index.html。内容如下:

<h1>Hello Nginx!</h1>

然后重启nginx显示效果如下:

6.tomcat

tomcat比较简单,直接运行下面代码即可。

version: "3.3"
services:
  'tomcat':
    image: tomcat:9.0.7
    container_name: tomcat
    ports:
      - "8080:8080"
    volumes:
      - /usr/local/docker/tomcat/webapps:/usr/local/tomcat/webapps
    restart: always

创建好tomcat容器后,直接访问以下地址,会显示404

http://localhost:8080

进入tomcat容器中:

docker exec -it tomcat /bin/bash

然后执行以下复制命令

mv webapps.dist/* webapps/

然后exit;退出容器,重启tomcat容器

docker restart tomcat

继续访问8080端口,发现已经正常显示主页。

7.Portainer

compose文件内容如下:

version: "3.3"
services:
  'portainer':
    image: portainer/portainer-ce:2.13.0
    container_name: portainer
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/local/docker/portainer/data:/data
    ports:
      - 8000:8000
      - 9443:9443
    restart: always

运行后生成容器,然后访问下面地址:

https://localhost:9443

如果页面没有新增用户页面的话,需要重启下portainer。

在上面页面新增用户,密码的规则是大于等于12位,需要有特殊字符,大小写,而且要有数字。

创建好用户后会自动登录。就可以在container一页去查看及操作当前服务上的所有容器了。

8总结

上面就是使用docker去安装一些常用组件的教程.

1.上面教程里基本上都是没有指定版本,默认使用的最新版本(如果需要安装指定版本。需要在image后面加上对应的版本)

2.安装完容器后别忘记去打开对应的端口,否则外界可能无法访问容器。如果觉得每次去加权限很麻烦的话,可以尝试关闭防火墙。但是这种操作比较危险,不建议去做。如果实意需要关闭防火墙的话,记得每个容器都设置一个比较复杂的密码来确保音私信。

最后贴一个所有容器混合的一个docker-compose文件,如果需要安装多个容器可以直接复制这个文件,再剔除自己不需要的。

version: "3.3"
services:
  'mysql':
    image: mysql:8.0.27
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Asia/Shanghai
    command: 
      --default-authentication-plugin=mysql_native_password
      --collation-server=utf8mb4_general_ci
      --lower_case_table_names=1
    volumes:
      -  /usr/local/docker/mysql/data:/var/lib/mysql
      -  /usr/local/docker/mysql/logs:/var/log/mysql
      -  /usr/local/docker/mysql/init:/docker-entrypoint-initdb.d/
      -  /usr/local/docker/mysql/conf.d/:/etc/mysql/conf.d/
    ports:
      - 3306:3306
    restart: always
  'nacos':
    image: nacos/nacos-server
    container_name: nacos
    environment:
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.1.246
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
      - NACOS_AUTH_IDENTITY_KEY=nacos
      - NACOS_AUTH_IDENTITY_VALUE=nacos
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
      - JVM_XMS=512m
      - JVM_XMX=512m
      - JVM_XMN=256m
    volumes:
      - /usr/local/docker/nacos/logs/:/home/nacos/logs
      - /usr/local/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - 8848:8848
      - 9848:9848
    restart: always
  'nginx':
    image: nginx
    container_name: nginx
    environment:
      - TZ=Asia/Shanghai
    volumes:
      -  /usr/local/docker/nginx/html/:/usr/share/nginx/html/
      -  /usr/local/docker/nginx/logs:/var/log/nginx
    ports:
      - 80:80
      - 443:443
    restart: always
  'portainer':
    image: portainer/portainer-ce:2.13.0
    container_name: portainer
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      -  /usr/local/docker/portainer/data:/data
    ports:
      - 8000:8000
      - 9443:9443
    restart: always
  'rabbitmq':
    image: rabbitmq
    container_name: "rabbitmq"
    restart: always
    volumes:
      - /usr/local/docker/rabbitmq/data/:/var/lib/rabbitmq/
      - /usr/local/docker/rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
    ports:
      - 5672:5672
      - 15672:15672
    environment:
          RABBITMQ_DEFAULT_USER: root
          RABBITMQ_DEFAULT_PASS: root
  'redis':
    image: redis
    container_name: redis
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 6379:6379
    command: ["redis-server","/etc/redis/redis.conf"]
    volumes:
      - /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf 
      - /usr/local/docker/redis/data:/var/lib/redis/
      - /usr/local/docker/redis/logs:/logs
    restart: always 
  'tomcat':
    image: tomcat
    container_name: tomcat
    ports:
      - "8080:8080"
    volumes:
      - /usr/local/docker/tomcat/webapps:/usr/local/tomcat/webapps
    restart: always

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2233577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)

文章目录 1、案例效果1、侧边栏分类2、CD类侧边弹窗实现1、样式代码实现2、功能代码实现3 运行效果4、源代码获取1、案例效果 1、侧边栏分类 A类 :左侧弹出侧边栏B类 :右侧弹出侧边栏C类 :顶部弹出侧边栏D类 :底部弹出侧边栏2、CD类侧边弹窗实现 1、样式代码实现 在原有的…

解决 “Error: listen EACCES: permission denied 0.0.0.0:80“ 错误

前言 在开发过程中&#xff0c;我们经常会遇到各种各样的错误。其中一个常见的错误是 Error: listen EACCES: permission denied 0.0.0.0:80。这个错误通常发生在尝试启动一个开发服务器时&#xff0c;服务器试图绑定到80端口&#xff0c;但由于权限不足而失败。本文将详细介绍…

国产之光-海豚调度器的入门知识篇

目录 概念和定义 核心特性 核心组件 工作流程 环境准备 系统软件方面 硬件方面 部署方式 单机模式 伪集群模式 集群模式 基本配置 工作流定义 调度管理 定时调度 手动调度 监控告警 任务类型扩展 资源管理 权限控制 概念和定义 Apache DolphinScheduler是一…

使用Netty实现一个简单的聊天服务器

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Netty &#x1f96d;本文内容&a…

新世联科技:NG2-A-7在DAC空气捕集提取CO2的应用

一、DAC空气捕集提取CO2的介绍 直接空气碳捕获&#xff08;Direct Air Capture&#xff0c;简称DAC&#xff09;是一种直接从大气中提取二氧化碳的技术。 二、DAC空气捕集提取CO2的前景 从大气中提取的这种二氧化碳可以作为循环经济的一部分以各种不同方式使用。未来&#xf…

ISUP协议视频平台EasyCVR视频融合平台接入各类摄像机的方法

安防视频监控ISUP协议视频平台EasyCVR兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 想要将摄像机顺利接入EasyCVR平台&#xff0c;实现视频监控的集中管理和分发&#x…

(五)Spark大数据开发实战:灵活运用PySpark常用DataFrame API

目录 一、PySpark 二、数据介绍 三、PySpark大数据开发实战 1、数据文件上传HDFS 2、导入模块及数据 3、数据统计与分析 ①、计算演员参演电影数 ②、依次罗列电影番位前十的演员 ③、按照番位计算演员参演电影数 ④、求每位演员所有参演电影中的最早、最晚上映时间及…

达梦数据库宕机问题分析及处理

官方宕机原因排查 官方故障诊断排除 相关概念 达梦数据库宕机往往会产生core文件&#xff0c;解读core文件是分析宕机原因的主要手段&#xff0c;类似oracle的diag.trc或system dump转储文件&#xff0c;记录数据库线程状态、sql语句等。 首选的排查方向可以从内存溢出、磁盘…

spring ai 入门 之 结构化输出 - 把大模型llm返回的内容转换成java bean

目录 ​编辑 将AI非结构化文本转换为特定格式数据的应用场景说明 Spring AI 介绍 &#xff1a;为Java开发者打造的AI应用开发框架 Qwen 介绍 &#xff1a; 一个国内领先的开源大模型 Spring AI Alibaba框架介绍 &#xff1a; 一个国内最好的spring ai实现 使用spring ai …

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景&#xff1a; 运行的是h5&#xff0c;模拟器是网易MuMu。 首先检查一下是否配置dab环境&#xff0c;adb version 配置一下hbuilderX的adb&#xff1a; 将命令输出的路径配置到hbuilderx里面去&#xff0c;然后重启下HbuilderX。 开始安装基座…一直安装不…

使用Docker Compose构建多容器应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Compose构建多容器应用 引言 Docker Compose 简介 安装 Docker Compose 创建基本配置 运行多容器应用 查看服务状态 …

react-router与react-router-dom的区别

写法上的区别&#xff1a; 写法1: import {Swtich, Route, Router, HashHistory, Link} from react-router-dom;写法2: import {Switch, Route, Router} from react-router; import {HashHistory, Link} from react-router-dom;react-router实现了路由的核心功能 react-router-…

Python 字符串类型中 ``split(“\n“)`` 与 ``splitlines()`` 方法的一些区别

最近在以 self.__print("#" * 20 "\n") 调用自己写的 __print 接口时发现打印的时候 "\n" 没有打出来&#xff0c;进而发现了 split("\n") 与 splitlines() 方法的一些区别。 一个是参数上&#xff0c;split 需要传递一个字符串作为…

Java Iterator 实现杨辉三角

一、问题描述 杨辉三角定义如下&#xff1a; 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 5 1 把每一行看做一个list&#xff0c;试写一个 Iterator&#xff0c;不断输出下一行的 list&#xf…

Spark 的介绍与搭建:从理论到实践

目录 一、分布式的思想 &#xff08;一&#xff09;存储 &#xff08;二&#xff09;计算 二、Spark 简介 &#xff08;一&#xff09;发展历程 &#xff08;二&#xff09;Spark 能做什么&#xff1f; &#xff08;三&#xff09;spark 的组成部分 &#xff08;四&…

Linux操作系统 ------(3.文本编译器Vim)

目录 1.前言 2.本章学习目标 3.vim的三种工作模式 3.1一般模式‌ 3.2编辑模式‌ 3.3命令行模式‌ 4.运行vim 5.vim 不同工作模式下的常见命令 6.一般模式下的功能键 6.1移动光标类 6.2删除、复制和粘贴类 6.3查找替换类 7.从一般模式进入编辑模式 8.命令行模式下的…

RocketMQ的消息类型

RocketMQ的消息类型 文章目录 RocketMQ的消息类型一、顺序消息二、广播消息应用场景&#xff1a;示例代码&#xff1a;实现思路&#xff1a;注意点&#xff1a; 三、延时消息应用场景&#xff1a;核心方法&#xff1a; 四、批量消息应用场景&#xff1a;示例代码&#xff1a;注…

Selective Generation for Language Models 语言模型的选择性生成

生成式语言模型&#xff08;Generative Language Models, GLMs&#xff09;在文本生成任务中取得了显著进展。然而&#xff0c;生成内容的“幻觉”现象&#xff0c;即生成内容与事实或真实语义不符的问题&#xff0c;仍是GLMs在实际应用中的一个重大挑战。为了解决这一问题&…

git clone,用https还是ssh

前言 在使用Git去克隆项目时&#xff0c;会遇到https和ssh等形式&#xff0c;这两种又有何种区别呢&#xff0c;本文将重点讨论在具体使用中的问题。 注:第一次使用Git 时&#xff0c;需要先设置全局用户名和邮箱&#xff0c;否则后续使用命令时会报错&#xff0c;也是提醒先添…

最新整理:Selenium自动化测试面试题

1.selenium中如何判断元素是否存在? find_elements查找到的元素个数为0&#xff0c;find_element报错意味着元素不存在 2.如何判断元素是否出现? 判断元素是否出现&#xff0c;存在两种情况&#xff0c;一种是该元素压根就没有&#xff0c;自然不会出现;另外一种是有这样的…