Docker安装JAVA软件总结

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 容器名
  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值