当前位置:首页 > 技术分析 > 正文内容

Dockerfile部署Java项目_docker部署java应用

ruisui882个月前 (02-11)技术分析20

1、概述

本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过dockerfile安装mysql数据库并初始化,其间会穿插介绍一些常用的Docker命令。

2、Docker及Dockerfile简介

什么是docker, docker是一个开源的应用容器引擎,基于go语言开发,遵循apache2.0协议开源。 docker可以让开发者打包应用以及依赖包到一个容器中,然后可以发布到linux服务器。该容器是轻量级、可移植的,它使用沙箱机制,相互之间没有接口,并且开销很低。

那么,什么是Dockerfile呢,Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了构建镜像所需的指令和说明。

3、部署

3.1、Docker的安装

#安装环境:centos7

#使用官方脚本自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3.2、Dockerfile编写

3.2.1、Jar项目的Dockerfile编写

#拉取一个jdk1.8版本的docker镜像

FROM openjdk:8-jdk

# 将项目jar包添加到容器

ADD test.jar test.jar

# 将外部配置文件复制到容器

COPY ./config /tmp/config

# ENTRYPOINT 执行项目test.jar及外部配置文件

ENTRYPOINT ["java", "-jar", "test.jar","--spring.config.location=/tmp/config/application.yaml"]

3.2.2、Mysql项目的Dockerfile编写

#拉取一个mysql5.7版本的docker镜像

FROM mysql:5.7

#将初始化的sql文件复制到docker容器内/tmp/sql

COPY ./sql /tmp/sql

#将tmp/sql中所有的sql文件复制到
/docker-entrypoint-initdb.d

RUN mv /tmp/sql/*.sql /docker-entrypoint-initdb.d

#删除临时文件夹

RUN rm -rf /tmp/sql

3.3、部署文件目录

#目录及文件结构

deploy

--jar #jar包相关文件目录

----test.jar

----Dockerfile #上述jar对应的Dockerfile,注意名字的大小写

----config #yaml配置文件目录

------application.yaml #java项目的配置文件

--mysql #mysql相关文件目录

----Dockerfile #上述mysql对应的Dockerfile,注意名字的大小写

----sql

------test.sql #数据库初始化sql,包括数据库创建,表创建,表数据初始化等

3.4、部署

#通过ftp上传上述包至centos指定目录中,例如上传到/usr/local/tools

cd /usr/local/tools

#进入部署包目录

cd deploy

#先安装mysql

cd mysql

#根据dockerfile构建docker镜像,其中 test_mysql 是镜像名

docker build -t test_mysql .

#查看镜像,会发现多了test_mysql镜像

docker images

#运行mysql镜像 ,docker会执行初始化sql文件对mysql数据库进行初始化

#其中MYSQL_ROOT_PASSWORD为mysql密码,可根据需要设置

#本文部署均使用docker容器的内网地址,所以不影射对外端口,

#若需要隐射可以再命令加 -p 3306:3306,即把容器的3306隐射到本机的3306端口

docker run -it -d -e MYSQL_ROOT_PASSWORD=123456 --name test_mysql test_mysql

#查看容器,docker ps查询正在运行的容器

#若查询不到,则使用docker ps -a查询所有容器,并查看日志查找运行失败原因

docker ps

####至此,mysql容器已经启动可

#安装jar包对应的容器

cd ../jar

#进入config目录,配置yaml文件

cd config

#查询mysql容器的ip

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名或id

#修改mysql参数中的ip为mysql容器ip,对应spring.datasource.url

#修改mysql参数中的密码为mysql容器启动时设置的密码,对应
spring.datasource.password

vi application.yaml

#根据dockerfile构建docker镜像,其中 test_java 是镜像名

docker build -t test_java .

#启动java项目,映射8080端口

docker run -it -d -p 8080:8080--name test_java test_java

#查看容器,docker ps查询正在运行的容器

#若查询不到,则使用docker ps -a查询所有容器,并查看日志查找运行失败原因

docker ps

######至此, 可以通过centos对应的ip访问到java接口了。

#可以通过以下命令对容器进行操作

docker start <容器 ID> #启动容器

docker stop <容器 ID> #关闭容器

docker exec -it <容器 ID> /bin/bash #进入容器

docker rm -f <容器 ID> #删除容器,删除前需要先stop容器

docker logs -f <容器 ID> #查看容器日志

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1890.html

标签: centos java
分享给朋友:

“Dockerfile部署Java项目_docker部署java应用” 的相关文章

2024年10 大 Linux 桌面发行版推荐

年已过半,现在是探究 2024 年最流行的 Linux 发行版的最佳时机。Linux 是一个开源操作系统,构建在 Linux 内核上,并集成了 GNU shell 实用程序、桌面环境、应用程序、包管理系统。由于其通用性、安全性、用户友好性和多样性,它的受欢迎程度超过了其他操作系统。在本文中,我们将从...

首个支持苹果 M1 Mac 的 Linux 发行版发布,面向用户开放下载

IT之家 3 月 20 日消息,Asahi Linux 是研究 Linux for Apple Silicon macs 的组织群体,3 月 18 日,Asahi Linux 宣布成功在 M1 MacBook Air 笔记本电脑上运行,并开放了 Asahi Linux 的下载安装。Asahi Lin...

vue 3 学习笔记 (八)——provide 和 inject 用法及原理

在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套...

基于gitlab的PR操作教程

基于gitlab的PR操作教程注:该教程主要基于git命令行操作,其他图形化工具也可完成以下所有操作步骤,顺手即可。推荐工具:Source Tree ,TortoiseGit参考:gitflow一 . 基于分支的PR操作1. 本地切换到master分支1. 拉取最新代码2. 基于master创建ho...

「Git迁移」三行命令迁移Git包含提交历史,分支,tag标签等信息

问题描述:公司需要将一个git远程服务器的全部已有项目迁移到一台新服务器的Gitlab中,其中需要包含全部的提交纪录,已有的全部分支与全部打tag标签,目前此工作已全部迁移完毕,特此记录一下操作步骤环境描述:1. 要迁移的远程Git:Gitblit2. 迁移目的Git:Gitlab3. 暂存代码的P...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...