因为开发经常会用到一些组件,又不想在本地启动,所以买了个服务器,然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用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