IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> java程序怎样在docker上面运行 -> 正文阅读

[系统运维]java程序怎样在docker上面运行

首先我这里讲解一个Java程序在docker上面运行部署的例子

首先介绍一下这是一个需要jdk和MySQL的项目,然后我们就需要在docker-compose上面写两个services

请添加图片描述

然后mysql挂载在宿主机下面,首先我先介绍一个docker-compose文件:(先不要复制,有坑!后面说)

version: "3"
services:
  mysql:
    image: mysql
    container_name: mysql
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root 
    ports:
      - 3306:3306
    volumes:
      # 数据挂载
      - /home/exam/mysql/data/:/var/lib/mysql/
      # 配置挂载
      - /home/exam/mysql/conf/:/etc/mysql/conf.d/
      # 初始化目录挂载
      - /home/exam/mysql/init/:/docker-entrypoint-initdb.d/



  mycity:
    # 指定容器名称
    container_name: mycity
    # 重启机制
    restart: always
    image: java:8
    volumes:
      # 本地jar包路径:容器内路径
      - /home/exam/mycity.jar:/mycity.jar
      # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
      - ./logs:/logs
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
    # 访问端口
    ports:
      - "8088:8088"
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    entrypoint: java -server -Xms256m -Xmx256m -jar -Dserver.port=8088 -Dspring.profiles.active=local mycity.jar


我们首先分析一下这个文件,第一个是一个mysql服务:

我们其实重点就是最后的挂载,我们将容器内的 # 初始化目录挂载 - /home/exam/mysql/init/:/docker-entrypoint-initdb.d/这个的作用就是可以初始化sql脚本:

请添加图片描述

第二个服务就是我们的jar包了:起了个名字叫mycity,然后其他的类同

接下来说一下关于jar包本身:首先是打包的时候要这样写:

  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.ftz.Demo.controller.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

这里我们需要这样打包就可以将项目资源打包进去并且需要指定Main方法

然后说一下关于路径的问题,比如我们程序中有一个需要加载data.txt这样的语句,我们要想打成jar包在linux上运行成功就需要这样写:

请添加图片描述

之前的绝对路径写法就是错误的

然后就是数据库连接问题,由于我们是直接跑在docker容器内部的,所以我们需要在数据库加载文件中这样写:

请添加图片描述

这里的host直接写成docker中容器跑mysql服务的名称就可以连接上了

上面的步骤完成,还差一个就是,倘若你的java程序有用户交互的界面你就会发现按照上面那样写是不可以识别到Scanner的!因为docker不支持写命令行!

所以我们的dockers-compose文件就需要变一下,保持mysql不变,上面的java去掉最后一句自动执行改成让他不要挂掉的:

tty: true
stdin_open: true

整体文件:

version: "3"
services:
  mysql:
    image: mysql
    container_name: mysql
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root 
    ports:
      - 3306:3306
    volumes:
      # 数据挂载
      - /home/exam/mysql/data/:/var/lib/mysql/
      # 配置挂载
      - /home/exam/mysql/conf/:/etc/mysql/conf.d/
      # 初始化目录挂载
      - /home/exam/mysql/init/:/docker-entrypoint-initdb.d/



  mycity:
    # 指定容器名称
    container_name: mycity
    # 重启机制
    restart: always
    image: java:8
    volumes:
      # 本地jar包路径
      - /home/exam/mycity.jar:/mycity.jar
      # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
      - ./logs:/logs
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
    # 访问端口
    ports:
      - "8088:8088"
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    tty: true
    stdin_open: true






然后你在docker启动服务以后,新开一个界面!然后用docker exec -it 容器名 /bin/bash进入内部去适用java -jar xxx.jar去运行这样服务就可以实现了!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:33:29  更:2022-02-16 13:33:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:34:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码