Docker安装JAVA软件总结一、安装JDKdockerpull openjdk:8#拉取镜像dockerrun-id--nameopenjdk-p8080:8080 openjdk:8#创建容器二、安装MySql拉取镜像# 查询中央仓库dockersearch-fis-officialtrue mysql# 从中央仓库下载dockerpull mysql:8.0.25配置mysql挂载目录mkdir-p/usr/local/mysql/datamkdir-p/usr/local/mysql/logsmkdir-p/usr/local/mysql/conf创建mysql配置文件在宿主机上创建mysql配置文件:/usr/local/mysql/conf/my.cnfcat/usr/local/mysql/conf/my.cnfEOF[mysqld]character-set-serverUTF8MB4 default-storage-engineINNODBdefault_authentication_pluginmysql_native_passwordwait_timeout1814400[mysql]default-character-setUTF8MB4[client]default-character-setUTF8MB4 EOF创建容器# 创建并运行容器docker 会自动创建 /usr/local/mysql/data 目录和mysql配置目录conf/my.cnfdockerrun-id-p3306:3306\--namemysql\--restartalways\-v/usr/local/mysql/data:/var/lib/mysql\-v/usr/local/mysql/logs:/var/log/mysql\-v/usr/local/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf\-eMYSQL_ROOT_PASSWORD123456mysql:8.0.25三、安装Tomcat搜索tomcat镜像dockersearch tomcat拉取tomcat镜像dockerpull tomcat:8创建容器设置端口映射、目录映射# 在/root目录下创建tomcat目录用于存储tomcat数据信息mkdir-p/usr/local/tomcat#创建容器dockerrun-id--nametomcat8-p8080:8080-v/usr/local/tomcat:/usr/local/tomcat/webapps tomcat:8 或#docker run -id --nametomcat8 -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps tomcat:8参数说明-p 8080:8080将容器的8080端口映射到主机的8080端口 第一个8080是宿主机端口用来和tomcat做映射的第二个8080是容器启动tomcat端口8080第二个端口是tomcat容器默认启动的端口-v $PWD:/usr/local/tomcat/webapps将主机中当前目录挂载到容器的webapps使用外部机器访问tomcat在宿主机目录/usr/tomcat下创建test目录。并在test目录下创建index.html。那么test目录会同步到tomcat8容器的 /usr/local/tomcat/webapps里面 在docker版的tomcat8中其webapps文件为空其欢迎页都放在webapps.dist文件中[rootlocalhost tomcat]# mkdir test[rootlocalhost tomcat]# cd test/[rootlocalhost test]# vim index.html #在index.html里面编写 h1hello tomcat/h1浏览器测试访问http://127.0.0.1:8080/test/index.html四、安装NGINX搜索nginx镜像dockersearch nginx拉取nginx镜像dockerpull nginx创建目录进入到/usr/localmkdir-p/usr/local/nginx/conf.dmkdir-p/usr/local/nginx/logsmkdir-p/usr/local/nginx/html编写nginx配置文件nginx.conf/usr/local/nginx/conf.d/nginx.confcat/usr/local/nginx/conf.d/nginx.confEOF server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; #usr/share/nginx/html为docker中nginx的静态资源目录 index index.html index.htm; } } EOF上面安装jdk时端口号设为了80这里端口号冲突了可设置为81,下面一样说明第四步其实可以省略默认创建一个nginx容器会在/etc/nginx/目录下生成一个叫nginx.conf的配置文件nginx容器启动会去加载该文件该文件的内容和第四步配置文件的内容相同。这个文件的末尾有include /etc/nginx/conf.d/*.conf;这句话也就说在conf.d目录下并且以conf结尾的文件都会被加载而这个目录下只有一个配置文件就是default.confdefault.conf文件的内容配置了一个server节点以及默认访问nginx的目录和首页/html/index.html创建nginx容器、端口映射、目录挂载dockerrun-id-p80:80\--namenginx\--restartalways\-v/usr/local/nginx/conf.d:/etc/nginx/conf.d\#不挂载这个配置文件也是可以的-v/usr/local/nginx/logs:/var/log/nginx\#nginx容器默认的日志文件保存到/var/log/nginx目录下-v/usr/local/nginx/html:/usr/share/nginx/html\#nginx默认会去访问/usr/share/nginx/html下的index.htmlnginxdockerrun-id-p80:80\--namenginx\--restartalways\-v/usr/local/nginx/conf.d:/etc/nginx/conf.d\-v/usr/local/nginx/logs:/var/log/nginx\-v/usr/local/nginx/html:/usr/share/nginx/html\nginxdockerrun-d\--namenginx\-p80:80\-p443:443\-v/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf\-v/data/nginx/conf.d:/etc/nginx/conf.d\-v/data/nginx/html:/usr/share/nginx/html\-v/data/nginx/logs:/var/log/nginx\-v/data/nginx/ssl:/etc/nginx/ssl:ro\--restartalways\nginx:1.23任选一个如果你不想挂载所有的都可以不挂载如果所有的都不挂载默认情况当创建nginx容器时在/etc/nginx/目录下有nginx.conf这个文件这个文件是nginx的配置文件nginx容器启动的时候会去读这个配置文件在宿主机的/usr/local/nginx/html目录下新建 index.html让其同步到/usr/share/nginx/html目录下测试访问http://192.168.128.130/五、安装Redis搜索redis镜像dockersearch redis拉取redis镜像dockerpull redis:5.0创建挂载目录并复制redis.conf到该目录中mkdir-p/usr/local/redis/conf创建容器dockerrun-id\-p6379:6379\--nameredis\--restartalways\-v/usr/local/redis/conf/redis.conf:/usr/local/bin/myredis.conf\redis:5.0 /bin/bash\-credis-server /usr/local/bin/myredis.conf提示-c “redis-server /usr/local/bin/myredis.conf” 为redis指定以哪个配置文件启动使用外部机器连接redis[rootlocalhost ~]#./redis-cli.exe -h 127.0.0.1 -p 6380六、安装MinIo拉取镜像dockerpull minio/minio 创建挂载目录mkdir-p/usr/local/minio/data 创建容器dockerrun-p9000:9000-p9090:9090\--nethost\--nameminio\-d--restartalways\-eMINIO_ACCESS_KEYminioadmin\-eMINIO_SECRET_KEYminioadmin\-v/usr/local/minio/data:/data\minio/minio server\/data --console-address:9000-address:9090#端口一样则不需要否则无法启动–console-address “:9000” --address “:9090” docker使用静态的固定端口以避免启动时使用随机端口上面安装成功访问不了的话dockerrun\--nameminio\-p9000:9000\-p9090:9090\-d\-eMINIO_ROOT_USERminioadmin\-eMINIO_ROOT_PASSWORDminioadmin\-v/usr/local/minio/data:/data\-v/usr/local/minio-config:/root/.minio\minio/minio server /data --console-address:9090--address:9000安装最新版本失败安装历史版本dockerpull minio/minio:RELEASE.2022-02-12T00-51-25Zsudodockerrun\-d\--nameminio\--restartalways\-p9000:9000\-p9001:9001\-eMINIO_ROOT_USERminioadmin\-eMINIO_ROOT_PASSWORDminioadmin\-v/usr/local/minio/data:/data\-v/usr/local/minio-config:/root/.minio\minio/minio:RELEASE.2022-02-12T00-51-25Z\server /data --console-address:9001七、安装Elasticsearch1、安装Elasticsearch下载镜像如果本地有镜像则无需下载。是否有镜像可通过 docker images 命令查看。dockerpull elasticsearch:7.11.1docker run 运行容器#创建目录mkdir-p/usr/local/elasticsearch/datachmod777/usr/local/elasticsearch/datamkdir-p/usr/local/elasticsearch/pluginschmod777/usr/local/elasticsearch/pluginsdockerrun-d--nameelasticsearch\--restartalways\-ediscovery.typesingle-node\-v/etc/localtime:/etc/localtime:ro\-v/usr/local/elasticsearch/data:/usr/share/elasticsearch/data\-v/usr/local/elasticsearch/plugins:/usr/share/elasticsearch/plugins\-p9200:9200\-p9300:9300\elasticsearch:7.11.1docker 运行 elasticsearch 时有可能会报如下错误max virtual memory areas vm.max_map_count[65530]is too low, increase to at least[262144]解决办法是在宿主机/etc/sysctl.conf文件最后添加一行vm.max_map_count262144然后执行命令sysctl -p。echovm.max_map_count262144/etc/sysctl.confsysctl-p#让配置生效验证通过docker ps查看容器的运行信息。访问网址http://主机IP:9200/会有一点点延迟会看到类似如下内容:{name:...,cluster_name:...,cluster_uuid:...,version:{number:7.10.1,build_flavor:...,build_type:...,build_hash:...,build_date:...,build_snapshot:...,lucene_version:...,minimum_wire_compatibility_version:...,minimum_index_compatibility_version:...},tagline:You Know, for Search}默认配置【不用改】ES 默认的配置文件 elasticsearch.yml 的内容只有 2 行cluster.name:docker-clusternetwork.host:0.0.0.02、安装IK分词器 复制ik分词器到/usr/local/elasticsearch/plugins目录中即可3、安装Kibana下载镜像dockerpull kibana:7.11.1修改配置创建/usr/local/kibana/config/kibana.ymlmkdir-p/usr/local/kibana/configcat/usr/local/kibana/config/kibana.ymlEOF server.name: kibana server.host:0elasticsearch.hosts:[http://elasticsearch的ip地址:9200]# elasticsearch 改为elasticsearch容器的地址monitoring.ui.container.elasticsearch.enabled:truei18n.locale:zh-CN# 设置kibana为中文EOF创建容器dockerrun-it-p5601:5601\--namekibana\--restartalways\-v/usr/local/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml\-e“ELASTICSEARCH_URLhttp://192.172.0.14:9200”\-dkibana:7.11.1注意这里的--net elastic这里指定使用docker中的那个虚拟网络后面-e ELASTICSEARCH_HOSTShttp://elasticsearch:9200指定了Kibana的elasticsearch地址的全局变量端口对应elastcserach容器开放的端口号。八、安装RabbitMQ创建目录cd/usr/localmkdir/rabbitmq拉取镜像dockerpull rabbitmq:management#拉取最新镜像创建容器dockerrun-d\-p5672:5672-p15672:15672\--namerabbitmq\--restartalways\--hostnamerabbitmq rabbitmq:management九、安装Nacos拉取镜像dockerpull nacos/nacos-server创建容器-v /usr/local/nacos/logs:/home/nacos/logs \ 日志路径-v /usr/local/nacos/conf:/home/nacos/conf \ 配置文件路径# 运行nacosdockerrun\--namenacos-d\-p8848:8848\--privilegedtrue\--restartalways\-eJVM_XMS256m\-eJVM_XMX256m\-eMODEstandalone\-ePREFER_HOST_MODEhostname\nacos/nacos-server十、安装Sentinel拉取镜像dockerpull bladex/sentinel-dashboard创建容器dockerrun--namesentinel--restartalways-d-p8858:8858-dbladex/sentinel-dashboard 或dockerrun--namesentinel--restartalways--nethost-d-p8858:8858-dbladex/sentinel-dashboard十一、安装seata创建seata所需数据表-- 分支事务表 DROP TABLE IF EXISTSbranch_table;CREATE TABLEbranch_table(branch_idbigint(0)NOT NULL,xidvarchar(128)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,transaction_idbigint(0)DEFAULT NULL,resource_group_idvarchar(32)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,resource_idvarchar(256)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,local_keyvarchar(128)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,branch_typevarchar(8)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,statustinyint(0)DEFAULT NULL,client_idvarchar(64)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,application_datavarchar(2000)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,gmt_createdatetime(0)DEFAULT NULL,gmt_modifieddatetime(0)DEFAULT NULL, PRIMARY KEY(branch_id)USING BTREE, INDEXidx_xid(xid)USING BTREE)ENGINEInnoDB CHARACTER SETutf8mb4 COLLATEutf8mb4_0900_ai_ci ROW_FORMATDynamic;-- 全局配事务表 DROP TABLE IF EXISTSglobal_table;CREATE TABLEglobal_table(xidvarchar(128)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,transaction_idbigint(0)DEFAULT NULL,statustinyint(0)NOT NULL,application_idvarchar(32)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,transaction_service_groupvarchar(32)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,transaction_namevarchar(128)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,timeoutint(0)DEFAULT NULL,begin_timebigint(0)DEFAULT NULL,application_datavarchar(2000)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,gmt_createdatetime(0)DEFAULT NULL,gmt_modifieddatetime(0)DEFAULT NULL, PRIMARY KEY(xid)USING BTREE, INDEXidx_gmt_modified_status(gmt_modified,status)USING BTREE, INDEXidx_transaction_id(transaction_id)USING BTREE)ENGINEInnoDB CHARACTER SETutf8mb4 COLLATEutf8mb4_0900_ai_ci ROW_FORMATDynamic;-- 数据锁表 DROP TABLE IF EXISTSlock_table;CREATE TABLElock_table(row_keyvarchar(128)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,xidvarchar(96)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,transaction_idmediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,branch_idmediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,resource_idvarchar(256)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,table_namevarchar(32)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,pkvarchar(36)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,gmt_createdatetime(0)DEFAULT NULL,gmt_modifieddatetime(0)DEFAULT NULL, PRIMARY KEY(row_key)USING BTREE)ENGINEInnoDB CHARACTER SETutf8mb4 COLLATEutf8mb4_0900_ai_ci ROW_FORMATDynamic;拉取镜像dockerpull seataio/seata-server:1.4.2在宿主机上创建配置/usr/local/seata/registry.confcat/usr/local/seata/registry.confEOF registry{# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatypenacosnacos{applicationseata-serverserverAddr192.172.0.14:8848#nacos的外部访问地址groupDEFAULT_GROUP#和微服务的分组相同namespaceclusterdefaultusernamenacospasswordnacos}}config{# file、nacos 、apollo、zk、consul、etcd3typefilefile{namefile.conf}}EOF - /usr/local/seata/file.confcat/usr/local/seata/file.confEOF store{## store mode: file、db、redismodedb## database store propertydb{datasourcedruid## mysql/oracle/postgresql/h2/oceanbase etc.dbTypemysqldriverClassNamecom.mysql.cj.jdbc.Driverurljdbc:mysql://192.172.0.14:3306/seata_db?serverTimezoneUTC#mysql的外部访问地址userrootpassword123456minConn5maxConn30globalTableglobal_tablebranchTablebranch_tablelockTablelock_tablequeryLimit100maxWait5000}}EOF - 创建容器dockerrun-d\--restartalways\--nameseata-server\-p8091:8091\-v/usr/local/seata/registry.conf:/seata-server/resources/registry.conf\-v/usr/local/seata/file.conf:/seata-server/resources/file.conf\-eSEATA_IP外网ip\-eSEATA_PORT8091\-eMODEstandalone\seataio/seata-server:1.4.2注意nacos默认是使用cluster集群方式启动的这里要指定MODE是standalone单机模式否则会导致seata等服务注册不到nacos。遇到的坑如果是部署云服务器没有设置SEATA_IP默认注册的是docker的内网ipseata启动虽然没有问题但是微服务项目启动连接时会报错can not register RM,err:can not connect to services-server.十二、安装zipkin拉取dockerpull openzipkin/zipkin安装dockerrun--namezipkin\-p9411:9411\--restartalways\-dopenzipkin/zipkin说明容器自动启动dockerupdate--restartalways 容器名