Docker安装JAVA软件总结
一、安装JDK
docker pull openjdk:8 #拉取镜像
docker run -id --name=openjdk -p 8080:8080 openjdk:8 #创建容器
二、安装MySql
- 拉取镜像
# 查询中央仓库
docker search -f is-official=true mysql
# 从中央仓库下载
docker pull mysql:8.0.25
- 配置mysql挂载目录
mkdir -p /usr/local/mysql/data &&
mkdir -p /usr/local/mysql/logs &&
mkdir -p /usr/local/mysql/conf
-
创建mysql配置文件
在宿主机上创建mysql配置文件:/usr/local/mysql/conf/my.cnf
cat > /usr/local/mysql/conf/my.cnf << EOF
[mysqld]
character-set-server=UTF8MB4
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
wait_timeout=1814400
[mysql]
default-character-set=UTF8MB4
[client]
default-character-set=UTF8MB4
EOF
- 创建容器
# 创建并运行容器,docker 会自动创建 /usr/local/mysql/data 目录和mysql配置目录conf/my.cnf
docker run -id -p 3306:3306 \
--name=mysql \
--restart=always \
-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 \
-e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.25
三、安装Tomcat
- 搜索tomcat镜像
docker search tomcat
- 拉取tomcat镜像
docker pull tomcat:8
- 创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir -p /usr/local/tomcat
#创建容器
docker run -id --name=tomcat8 -p 8080:8080 -v /usr/local/tomcat:/usr/local/tomcat/webapps tomcat:8
或
#docker run -id --name=tomcat8 -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文件中
[root@localhost tomcat]# mkdir test
[root@localhost tomcat]# cd test/
[root@localhost test]# vim index.html #在index.html里面编写 <h1>hello tomcat</h1>
浏览器测试访问:
http://127.0.0.1:8080/test/index.html
四、安装NGINX
- 搜索nginx镜像
docker search nginx
- 拉取nginx镜像
docker pull nginx
-
创建目录
进入到/usr/local
mkdir -p /usr/local/nginx/conf.d &&
mkdir -p /usr/local/nginx/logs &&
mkdir -p /usr/local/nginx/html
-
编写nginx配置文件nginx.conf
/usr/local/nginx/conf.d/nginx.conf
cat > /usr/local/nginx/conf.d/nginx.conf << EOF
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.conf,default.conf文件的内容配置了一个server节点,以及默认访问nginx的目录和首页(/html/index.html)
- 创建nginx容器、端口映射、目录挂载
docker run -id -p 80:80 \
--name=nginx \
--restart=always \
-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.html
nginx
docker run -id -p 80:80 \
--name=nginx \
--restart=always \
-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 \
nginx
如果你不想挂载,所有的都可以不挂载,如果所有的都不挂载,默认情况,当创建nginx容器时,在/etc/nginx/目录下有nginx.conf这个文件,这个文件是nginx的配置文件,nginx容器启动的时候会去读这个配置文件
在宿主机的/usr/local/nginx/html目录下新建 index.html,让其同步到/usr/share/nginx/html目录下
测试访问:http://192.168.128.130/
五、安装Redis
- 搜索redis镜像
docker search redis
- 拉取redis镜像
docker pull redis:5.0
- 创建挂载目录,并复制redis.conf到该目录中
mkdir -p /usr/local/redis/conf
- 创建容器
docker run -id \
-p 6379:6379 \
--name=redis \
--restart=always \
-v /usr/local/redis/conf/redis.conf:/usr/local/bin/myredis.conf \
redis:5.0 /bin/bash \
-c "redis-server /usr/local/bin/myredis.conf"
提示:-c “redis-server /usr/local/bin/myredis.conf” 为redis指定以哪个配置文件启动
- 使用外部机器连接redis
[root@localhost ~]#./redis-cli.exe -h 127.0.0.1 -p 6380
六、安装MinIo
拉取镜像
docker pull minio/minio
创建挂载目录
mkdir -p /usr/local/minio/data
创建容器
docker run -p 9000:9000 -p 9090:9090 \
--net=host \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-v /usr/local/minio/data:/data \
minio/minio server \
/data --console-address ":9000" -address ":9090" #端口一样则不需要,否则无法启动
–console-address “:9000” --address “:9090” docker使用静态的固定端口,以避免启动时使用随机端口
上面安装成功访问不了的话
docker run \
--name minio \
-p 9000:9000 \
-p 9090:9090 \
-d \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /usr/local/minio/data:/data \
-v /usr/local/minio-config:/root/.minio \
minio/minio server /data --console-address ":9090" --address ":9000"
七、安装Elasticsearch
1、安装Elasticsearch
-
下载镜像
如果本地有镜像,则无需下载。是否有镜像,可通过 docker images 命令查看。
docker pull elasticsearch:7.11.1
- docker run 运行容器
#创建目录
mkdir -p /usr/local/elasticsearch/data && chmod 777 /usr/local/elasticsearch/data
mkdir -p /usr/local/elasticsearch/plugins && chmod 777 /usr/local/elasticsearch/plugins
docker run -d --name elasticsearch \
--restart=always \
-e "discovery.type=single-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 \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.11.1
- docker 运行 elasticsearch 时,有可能会报如下错误:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决办法是:在宿主机 /etc/sysctl.conf
文件最后添加一行:vm.max_map_count=262144
,然后执行命令 sysctl -p
。
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -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-cluster"
network.host: 0.0.0.0
2、安装IK分词器
复制ik分词器到/usr/local/elasticsearch/plugins目录中即可
3、安装Kibana
- 下载镜像
docker pull kibana:7.11.1
-
修改配置
创建/usr/local/kibana/config/kibana.yml
mkdir -p /usr/local/kibana/config
cat > /usr/local/kibana/config/kibana.yml << EOF
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch的ip地址:9200" ] # elasticsearch 改为elasticsearch容器的地址
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN" # 设置kibana为中文
EOF
- 创建容器
docker run -it -p 5601:5601 \
--name kibana \
--restart=always \
-v /usr/local/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-e “ELASTICSEARCH_URL=http://192.172.0.14:9200” \
-d kibana:7.11.1
注意这里的--net elastic
这里指定使用docker中的那个虚拟网络,后面 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
指定了Kibana的elasticsearch地址的全局变量端口对应elastcserach容器开放的端口号。
八、安装RabbitMQ
- 创建目录
cd /usr/local
mkdir /rabbitmq
- 拉取镜像
docker pull rabbitmq:management #拉取最新镜像
- 创建容器
docker run -d \
-p 5672:5672 -p 15672:15672 \
--name rabbitmq \
--restart=always \
--hostname rabbitmq rabbitmq:management
九、安装Nacos
- 拉取镜像
docker pull nacos/nacos-server
-
创建容器
-v /usr/local/nacos/logs:/home/nacos/logs \ 日志路径
-v /usr/local/nacos/conf:/home/nacos/conf \ 配置文件路径
# 运行nacos
docker run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
nacos/nacos-server
十、安装Sentinel
- 拉取镜像
docker pull bladex/sentinel-dashboard
- 创建容器
docker run --name sentinel --restart=always -d -p 8858:8858 -d bladex/sentinel-dashboard
或
docker run --name sentinel --restart=always --net host -d -p 8858:8858 -d bladex/sentinel-dashboard
十一、安装seata
- 创建seata所需数据表
-- 分支事务表
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table` (
`branch_id` bigint(0) NOT NULL,
`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`transaction_id` bigint(0) DEFAULT NULL,
`resource_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`resource_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`local_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`branch_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`status` tinyint(0) DEFAULT NULL,
`client_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`application_data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`gmt_create` datetime(0) DEFAULT NULL,
`gmt_modified` datetime(0) DEFAULT NULL,
PRIMARY KEY (`branch_id`) USING BTREE,
INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- 全局配事务表
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table` (
`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`transaction_id` bigint(0) DEFAULT NULL,
`status` tinyint(0) NOT NULL,
`application_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`transaction_service_group` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`transaction_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`timeout` int(0) DEFAULT NULL,
`begin_time` bigint(0) DEFAULT NULL,
`application_data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`gmt_create` datetime(0) DEFAULT NULL,
`gmt_modified` datetime(0) DEFAULT NULL,
PRIMARY KEY (`xid`) USING BTREE,
INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,
INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- 数据锁表
DROP TABLE IF EXISTS `lock_table`;
CREATE TABLE `lock_table` (
`row_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`xid` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`transaction_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
`branch_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
`resource_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`table_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`pk` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`gmt_create` datetime(0) DEFAULT NULL,
`gmt_modified` datetime(0) DEFAULT NULL,
PRIMARY KEY (`row_key`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
- 拉取镜像
docker pull seataio/seata-server:1.4.2
-
在宿主机上创建配置
- /usr/local/seata/registry.conf
cat > /usr/local/seata/registry.conf << EOF
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "192.172.0.14:8848" #nacos的外部访问地址
group = "DEFAULT_GROUP" #和微服务的分组相同
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "file"
file {
name = "file.conf"
}
}
EOF
- /usr/local/seata/file.conf
cat > /usr/local/seata/file.conf << EOF
store {
## store mode: file、db、redis
mode = "db"
## database store property
db {
datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://192.172.0.14:3306/seata_db?serverTimezone=UTC" #mysql的外部访问地址
user = "root"
password = "123456"
minConn = 5
maxConn = 30
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
}
EOF
```
- 创建容器
docker run -d \
--restart always \
--name seata-server \
-p 8091:8091 \
-v /usr/local/seata/registry.conf:/seata-server/resources/registry.conf \
-v /usr/local/seata/file.conf:/seata-server/resources/file.conf \
-e SEATA_IP=外网ip \
-e SEATA_PORT=8091 \
-e MODE=standalone \
seataio/seata-server:1.4.2
注意:nacos默认是使用cluster集群方式启动的,这里要指定MODE是standalone单机模式,否则会导致seata等服务注册不到nacos。
遇到的坑,如果是部署云服务器,没有设置SEATA_IP,默认注册的是docker的内网ip,seata启动虽然没有问题,但是微服务项目启动连接时,会报错can not register RM,err:can not connect to services-server.
十二、安装zipkin
- 拉取
docker pull openzipkin/zipkin
- 安装
docker run --name zipkin \
-p 9411:9411 \
--restart=always \
-d openzipkin/zipkin
说明
- 容器自动启动
docker update --restart=always 容器名