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

因为开发经常会用到一些组件,又不想在本地启动,所以买了个服务器,然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用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_HOST | mysql的主机地址 |
| MYSQL_SERVICE_DB_NAME | mysql中数据库名称 |
| 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
相关推荐
翰林小院2 小时前
【RabbitMQ】 RabbitMQ Overview
分布式·rabbitmq
xujiangyan_2 小时前
Redis详解
数据库·redis·缓存
闲人编程7 小时前
从多个数据源(CSV, Excel, SQL)自动整合数据
python·mysql·数据分析·csv·存储·数据源·codecapsule
yannan201903137 小时前
Docker容器
运维·docker·容器
泽02028 小时前
Linux之环境变量
java·linux·redis
disanleya8 小时前
MySQL默认密码不安全?如何首次登录并强化?
数据库·mysql·安全
花开富贵贼富贵8 小时前
MySQL 核心高级特性
运维·数据库·mysql
济南java开发,求内推8 小时前
Redis一个服务器部署多个节点
服务器·数据库·redis
小宁爱Python8 小时前
Windows Docker Desktop占用C盘空间过大解决办法集合
运维·docker·容器
Full Stack Developme8 小时前
Python Redis 教程
开发语言·redis·python