使用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
相关推荐
岁月变迁呀1 小时前
Redis梳理
数据库·redis·缓存
鸠摩智首席音效师2 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器
Michaelwubo2 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
jingyu飞鸟2 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun2 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
White_Mountain3 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship3 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站3 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
老王笔记3 小时前
GTID下复制问题和解决
mysql
装不满的克莱因瓶3 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb