重启策略

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

1、部署Nginx

  1. # 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
  2. docker run --name nginx-app \
  3. -v /app/nginx/html:/usr/share/nginx/html:ro \
  4. -v /app/nginx/conf:/etc/nginx
  5. -d nginx

2、 部署MySQL

  1. # 5.7版本
  2. docker run -p 3306:3306 --name mysql57-app \
  3. -v /app/mysql/log:/var/log/mysql \
  4. -v /app/mysql/data:/var/lib/mysql \
  5. -v /app/mysql/conf:/etc/mysql/conf.d \
  6. -e MYSQL_ROOT_PASSWORD=123456 \
  7. -d mysql:5.7
  8. #8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传,
  9. 或者chmod -R 777 /app/mysql/data
  10. # --privileged 特权容器,容器内使用真正的root用户
  11. docker run -p 3306:3306 --name mysql8-app \
  12. -v /app/mysql/conf:/etc/mysql/conf.d \
  13. -v /app/mysql/log:/var/log/mysql \
  14. -v /app/mysql/data:/var/lib/mysql \
  15. -e MYSQL_ROOT_PASSWORD=123456 \
  16. --privileged \
  17. -d mysql

3、部署Redis

  1. # 提前准备好redis.conf文件,创建好相应的文件夹。如:
  2. port 6379
  3. appendonly yes
  4. #更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
  5. docker run -p 6379:6379 --name redis \
  6. -v /app/redis/redis.conf:/etc/redis/redis.conf \
  7. -v /app/redis/data:/data \
  8. -d redis:6.2.1-alpine3.13 \
  9. redis-server /etc/redis/redis.conf --appendonly yes

4、部署ElasticSearch

  1. #准备文件和文件夹,并chmod -R 777 xxx
  2. #配置文件内容,参照
  3. https://www.elastic.co/guide/en/elasticsearch/reference/7.5/node.name.html 搜索相
  4. 关配置
  5. # 考虑为什么挂载使用esconfig ...
  6. docker run --name=elasticsearch -p 9200:9200 -p 9300:9300 \
  7. -e "discovery.type=single-node" \
  8. -e ES_JAVA_OPTS="-Xms300m -Xmx300m" \
  9. -v /app/es/data:/usr/share/elasticsearch/data \
  10. -v /app/es/plugins:/usr/shrae/elasticsearch/plugins \
  11. -v esconfig:/usr/share/elasticsearch/config \
  12. -d elasticsearch:7.12.0

5、 部署Tomcat

  1. # 考虑,如果我们每次 -v 都是指定磁盘路径,是不是很麻烦?
  2. docker run --name tomcat-app -p 8080:8080 \
  3. -v tomcatconf:/usr/local/tomcat/conf \
  4. -v tomcatwebapp:/usr/local/tomcat/webapps \
  5. -d tomcat:jdk8-openjdk-slim-buster

6、使用docker部署nacos并使用mysql数据库

官网上推荐使用mysql5.6+, 最新版本的已经是 8.0+, 使用最新版本的会有问题, 这里使用 mysql:5.7.29

1、下载mysql镜像

  1. docker pull mysql:5.7.29

2、运行mysql容器

  1. docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.29

3、配置数据库

  1. 创建一个数据库 名为 nacos_config
  2. 初始化数据库, 执行sql的GitHub地址:nacos-db.sql
    ○ github地址慢的可以使用下面的:
    1. /*
    2. * Copyright 1999-2018 Alibaba Group Holding Ltd.
    3. *
    4. * Licensed under the Apache License, Version 2.0 (the "License");
    5. * you may not use this file except in compliance with the License.
    6. * You may obtain a copy of the License at
    7. *
    8. * http://www.apache.org/licenses/LICENSE-2.0
    9. *
    10. * Unless required by applicable law or agreed to in writing, software
    11. * distributed under the License is distributed on an "AS IS" BASIS,
    12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13. * See the License for the specific language governing permissions and
    14. * limitations under the License.
    15. */
    16. /******************************************/
    17. /* 数据库全名 = nacos_config */
    18. /* 表名称 = config_info */
    19. /******************************************/
    20. CREATE TABLE `config_info` (
    21. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    22. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    23. `group_id` varchar(255) DEFAULT NULL,
    24. `content` longtext NOT NULL COMMENT 'content',
    25. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
    26. `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
    27. `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
    28. `src_user` text COMMENT 'source user',
    29. `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
    30. `app_name` varchar(128) DEFAULT NULL,
    31. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    32. `c_desc` varchar(256) DEFAULT NULL,
    33. `c_use` varchar(64) DEFAULT NULL,
    34. `effect` varchar(64) DEFAULT NULL,
    35. `type` varchar(64) DEFAULT NULL,
    36. `c_schema` text,
    37. PRIMARY KEY (`id`),
    38. UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    39. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
    40. /******************************************/
    41. /* 数据库全名 = nacos_config */
    42. /* 表名称 = config_info_aggr */
    43. /******************************************/
    44. CREATE TABLE `config_info_aggr` (
    45. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    46. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    47. `group_id` varchar(255) NOT NULL COMMENT 'group_id',
    48. `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
    49. `content` longtext NOT NULL COMMENT '内容',
    50. `gmt_modified` datetime NOT NULL COMMENT '修改时间',
    51. `app_name` varchar(128) DEFAULT NULL,
    52. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    53. PRIMARY KEY (`id`),
    54. UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
    55. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
    56. /******************************************/
    57. /* 数据库全名 = nacos_config */
    58. /* 表名称 = config_info_beta */
    59. /******************************************/
    60. CREATE TABLE `config_info_beta` (
    61. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    62. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    63. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
    64. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
    65. `content` longtext NOT NULL COMMENT 'content',
    66. `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
    67. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
    68. `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
    69. `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
    70. `src_user` text COMMENT 'source user',
    71. `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
    72. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    73. PRIMARY KEY (`id`),
    74. UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    75. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
    76. /******************************************/
    77. /* 数据库全名 = nacos_config */
    78. /* 表名称 = config_info_tag */
    79. /******************************************/
    80. CREATE TABLE `config_info_tag` (
    81. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    82. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    83. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
    84. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
    85. `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
    86. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
    87. `content` longtext NOT NULL COMMENT 'content',
    88. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
    89. `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
    90. `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
    91. `src_user` text COMMENT 'source user',
    92. `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
    93. PRIMARY KEY (`id`),
    94. UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
    95. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
    96. /******************************************/
    97. /* 数据库全名 = nacos_config */
    98. /* 表名称 = config_tags_relation */
    99. /******************************************/
    100. CREATE TABLE `config_tags_relation` (
    101. `id` bigint(20) NOT NULL COMMENT 'id',
    102. `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
    103. `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
    104. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    105. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
    106. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
    107. `nid` bigint(20) NOT NULL AUTO_INCREMENT,
    108. PRIMARY KEY (`nid`),
    109. UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
    110. KEY `idx_tenant_id` (`tenant_id`)
    111. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
    112. /******************************************/
    113. /* 数据库全名 = nacos_config */
    114. /* 表名称 = group_capacity */
    115. /******************************************/
    116. CREATE TABLE `group_capacity` (
    117. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    118. `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
    119. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
    120. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
    121. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
    122. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
    123. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
    124. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
    125. `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
    126. `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
    127. PRIMARY KEY (`id`),
    128. UNIQUE KEY `uk_group_id` (`group_id`)
    129. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
    130. /******************************************/
    131. /* 数据库全名 = nacos_config */
    132. /* 表名称 = his_config_info */
    133. /******************************************/
    134. CREATE TABLE `his_config_info` (
    135. `id` bigint(64) unsigned NOT NULL,
    136. `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    137. `data_id` varchar(255) NOT NULL,
    138. `group_id` varchar(128) NOT NULL,
    139. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
    140. `content` longtext NOT NULL,
    141. `md5` varchar(32) DEFAULT NULL,
    142. `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
    143. `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
    144. `src_user` text,
    145. `src_ip` varchar(20) DEFAULT NULL,
    146. `op_type` char(10) DEFAULT NULL,
    147. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    148. PRIMARY KEY (`nid`),
    149. KEY `idx_gmt_create` (`gmt_create`),
    150. KEY `idx_gmt_modified` (`gmt_modified`),
    151. KEY `idx_did` (`data_id`)
    152. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
    153. /******************************************/
    154. /* 数据库全名 = nacos_config */
    155. /* 表名称 = tenant_capacity */
    156. /******************************************/
    157. CREATE TABLE `tenant_capacity` (
    158. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    159. `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
    160. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
    161. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
    162. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
    163. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
    164. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
    165. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
    166. `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
    167. `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
    168. PRIMARY KEY (`id`),
    169. UNIQUE KEY `uk_tenant_id` (`tenant_id`)
    170. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
    171. CREATE TABLE `tenant_info` (
    172. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    173. `kp` varchar(128) NOT NULL COMMENT 'kp',
    174. `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
    175. `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
    176. `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
    177. `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
    178. `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
    179. `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
    180. PRIMARY KEY (`id`),
    181. UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
    182. KEY `idx_tenant_id` (`tenant_id`)
    183. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
    184. CREATE TABLE users (
    185. username varchar(50) NOT NULL PRIMARY KEY,
    186. password varchar(500) NOT NULL,
    187. enabled boolean NOT NULL
    188. );
    189. CREATE TABLE roles (
    190. username varchar(50) NOT NULL,
    191. role varchar(50) NOT NULL,
    192. constraint uk_username_role UNIQUE (username,role)
    193. );
    194. CREATE TABLE permissions (
    195. role varchar(50) NOT NULL,
    196. resource varchar(512) NOT NULL,
    197. action varchar(8) NOT NULL,
    198. constraint uk_role_permission UNIQUE (role,resource,action)
    199. );
    200. INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
    201. INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

    4、部署nacos

    1. docker pull nacos/nacos-server

    查看mysql内部ip

    在docker中 不能使用127.0.0.1连接数据库, 需要查看mysql在docker中ip地址

  1. docker inspect mysql

在信息中找到 IPAddress, 创建nacos容器会用到
6、Docker常见部署案例 - 图2

创建并启动nacos容器

  1. docker run -d -e MODE=standalone -e JVM_XMS=256m -e JVM_XMX=256m -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.17.0.3 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_DB_NAME=nacos_config -p 8848:8848 -p 9848:9848 --name nacos nacos/nacos-server

参数说明:

  • -e MODE=standalone : 启动模式, 可选cluster/standalone, 默认 cluster
  • -e JVM_XMS=256m : 给JVM分配的最小内存
  • -e JVM_XMX=256m : 给JVM分配的最大内存
  • -e SPRING_DATASOURCE_PLATFORM=mysql : 使用mysql数据库
  • -e MYSQL_SERVICE_HOST=172.17.0.3 : 数据库的host
  • -e MYSQL_SERVICE_PORT=3306 : 数据库端口号
  • -e MYSQL_SERVICE_USER=root : 链接数据库用户名
  • -e MYSQL_SERVICE_PASSWORD=123456 : 数据库的密码
  • -e MYSQL_SERVICE_DB_NAME=nacos_config : 数据库的表的名字
  • -p 8848:8848 : 端口映射, nacos默认启动端口为8848
  • -p 9848:9848 : 端口映射, nacosgRPC暴露端口 不放开 程序会连不上报错

    启动后就可以访问了

    浏览器输入 ip:8848/nacos 就可以访问了
    默认用户名和密码都是 : nacos

7、部署RabbitMQ

  1. docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v /data/rabbitmq:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.7.7-management

-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);

—hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);

-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

web管理页面

http://150.158.85.171:15672/

8、部署zookeeper单节点

一、查看zookeeper 镜像

docker search zookeeper

6、Docker常见部署案例 - 图3

二、运行下载/安装镜像

可以先创建/mydata/zookeeper/data/ 本机映射目录 docker run -d \ -p 2181:2181 \ -v /mydata/zookeeper/data/:/data/ \ —name=zookeeper \ —privileged zookeeper

三、校验安装

docker ps #查看docker进程 docker log zookeeper #查看zk启动日志
6、Docker常见部署案例 - 图4

1、进入zkCli.sh 模式

docker exec -it /bin/bash cd bin #默认是zk的主目录需要切换到bin目录 ./zkCli.sh