file-type

Docker-compose部署Java应用实例教程

ZIP文件

下载需积分: 5 | 3KB | 更新于2025-08-06 | 73 浏览量 | 3 下载量 举报 收藏
download 立即下载
### 知识点:Linux + Docker-Compose 部署 Java 应用 (JAR 和 Dist 文件) #### 一、Docker简介与优势 Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。 使用 Docker 的优势主要体现在以下方面: 1. **轻量级**:容器共享宿主机的内核,可以做到资源的轻量级隔离。 2. **可移植性**:容器可以在任何支持 Docker 的平台上运行,无需重新配置环境。 3. **可扩展性**:可以快速扩展或回滚应用。 4. **版本控制**:可以控制应用的版本和配置。 5. **隔离性**:不同应用之间相互隔离,互不干扰。 6. **自动化**:可以实现应用部署、扩展、更新和维护的自动化。 #### 二、Docker-Compose简介及功能 Docker-Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YML 文件来配置应用程序需要的所有服务,然后使用一个命令,就可以从 YML 文件中创建并启动所有服务。 主要功能包括: 1. **快速启动**:一键启动所有服务。 2. **版本控制**:通过版本控制对配置文件进行管理。 3. **环境变量**:可以在不同的环境中运行同一应用。 4. **依赖管理**:定义服务之间的依赖关系,保证启动顺序。 5. **网络配置**:自动创建网络,并且把容器连接到指定的网络。 #### 三、Linux操作系统基础 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 操作系统能提供稳定、安全、高效的操作环境。 部署在 Linux 系统上,需要对操作系统的基本知识有一定了解,如: 1. **文件系统**:如目录结构、文件权限、链接等。 2. **命令行操作**:常用的命令行操作,如 `cd`、`ls`、`cp`、`mv` 等。 3. **系统管理**:包管理工具,如 `apt`、`yum` 等。 4. **网络配置**:基本的网络知识,如配置 IP、DNS 等。 5. **服务管理**:如 `systemctl`、`service` 等命令来管理服务。 #### 四、Java 应用的 Docker 部署 Java 应用的部署通常涉及将 JAR 文件转换成 Docker 镜像,然后运行该镜像。部署流程大致如下: 1. **编写 Dockerfile**:定义基础镜像、复制 JAR 文件到镜像中、暴露端口、设置环境变量等。 2. **构建镜像**:使用 `docker build` 命令基于 Dockerfile 构建镜像。 3. **运行容器**:使用 `docker run` 命令运行构建好的镜像,指定需要的参数如端口映射、环境变量等。 4. **日志监控**:利用 `docker logs` 查看容器的运行日志。 5. **网络配置**:配置 Docker 网络,使容器间能够通信。 6. **数据持久化**:配置数据卷,实现数据持久化。 当涉及到 JAR 文件之外的其他文件,例如配置文件、证书文件或数据库文件,可以通过挂载卷的方式将这些文件夹或文件从宿主机挂载到容器内。 #### 五、案例分析 - Linux + Docker-Compose 部署 JAR + Dist 文件 在这个案例中,我们要利用 Docker-Compose 在 Linux 环境下部署一个 Java 应用。应用可能包括 JAR 文件和一些其他分布式部署需要的文件(Dist 文件)。以下是部署步骤的详细分析: 1. **编写 Docker-Compose 文件**:创建一个 `docker-compose.yml` 文件,定义服务的配置,包括使用的镜像、端口映射、卷挂载、环境变量等。 ```yaml version: '3' services: myapp: image: myapp-image ports: - "8080:8080" volumes: - ./dist:/usr/src/dist - ./config:/usr/src/config environment: - JAVA_OPTS=-Xmx1024m depends_on: - db networks: - my-network db: image: mysql environment: MYSQL_ROOT_PASSWORD: example networks: - my-network networks: my-network: ``` 上述 YML 文件定义了两个服务,一个是 `myapp`,另一个是数据库服务 `db`。这里将容器内的目录 `/usr/src/dist` 和 `/usr/src/config` 分别映射到了宿主机的 `./dist` 和 `./config` 目录。 2. **构建镜像**:如果没有现成的镜像,可以通过编写 Dockerfile 来构建一个镜像,并使用 `docker-compose build` 命令来构建镜像。 ```Dockerfile FROM openjdk:8-jdk-alpine COPY target/myapp.jar /app/myapp.jar ENTRYPOINT ["java","-jar","/app/myapp.jar"] ``` 该 Dockerfile 使用了 `openjdk:8-jdk-alpine` 作为基础镜像,并将本地的 `target/myapp.jar` 复制到容器内的 `/app/myapp.jar`。`ENTRYPOINT` 指定容器启动时运行的命令。 3. **启动服务**:使用 `docker-compose up` 命令来启动服务,这个命令会根据 `docker-compose.yml` 文件的定义来启动容器。 ```bash docker-compose up -d ``` `-d` 参数使得容器在后台运行。 4. **验证部署**:可以通过访问宿主机的 `8080` 端口来验证 Java 应用是否成功部署,同时检查 Docker 容器的日志确认服务运行状况。 ```bash docker-compose logs -f myapp ``` 5. **维护与优化**:根据应用运行情况,可能需要对 Docker 配置进行优化,例如修改资源限制、调整网络配置或优化镜像构建。 通过这一系列操作,我们可以在 Linux 环境下利用 Docker-Compose 快速、高效地部署 Java 应用。在整个过程中,需要注意对 Docker 镜像和容器的管理,确保服务的稳定运行。

相关推荐

filetype

前端 本地运行 需安装 node,可通过 npm 安装所需安装包,并运行项目。 Shell npm install npm run dev 服务器部署 服务器需安装 docker 环境。 打包项目: Shell npm install npm run build 获取 nginx 镜像: Shell docker pull nginx 在项目根目录下创建 nginx 文件夹,该文件夹下新建文件 default.conf YAML server { listen 80; server_name localhost; #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 创建 Dockerfile 文件: Dockerfile FROM nginx COPY dist/ /usr/share/nginx/html/ COPY nginx/default.conf /etc/nginx/conf.d/default.conf 基于 Dockerfile 构建应用镜像: Shell docker build -t citi-front(你期待的应用名) . 启动容器: Shell docker run -p 8082:80 -d --name citi-front citi-front 在开启服务器 8082 端口的防火墙之后,即可通过 ip:8082 访问。 后端 前置环境要求,服务器需安装 docker 环境,并安装好 mysql、mongodb、redis 三 个数据库。 每个服务的文件夹下均创建了 Dockerfile,比如 data-center 下的 Dockerfile 内容如 下: Bash FROM openjdk:17 # 设置工作目录 WORKDIR /app # 将本地的 JAR 文件复制到容器中 COPY data-center.jar /app/data-center.jar # 暴露应用程序的端口(如果应用程序监听特定端口) EXPOSE 8200 # 启动 Java 应用程序 CMD ["java", "-jar", "-Dspring.profiles.active=prod", "data-center.jar"] 部署的时候使用 maven 将服务打包,并将 jar 包和对应服务的 Dockerfile 上传至服 务器的同一文件夹下即可。以 data-center 为例,输入以下指令: Bash sudo docker build -t data-center . sudo docker run -d -p 8200:8200 --name data-center data-center

一头秀发的小白
  • 粉丝: 11
上传资源 快速赚钱