文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

docker如何部署java服务

2023-07-05 12:25

关注

本篇内容主要讲解“docker如何部署java服务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker如何部署java服务”吧!

目的

在centos上安装mysql、jdk,之后完成java服务部署

通过docker进行部署,熟悉docker命令

打包发布到docker hub

系统安装

安装centos7系统,首先拉取镜像

docker pull centos:centos7

查看镜像是否下载成功

docker images

通过images命令可以看到镜像版本、id、创建时间、镜像大小等信息。

docker如何部署java服务

运行容器

docker run -itd --name centos-test --privileged centos:centos7 init

通过run命令启动成功后,会返回容器id。

-itd 其实是 -i -t -d 三个参数组合在了一起,因为docker中单参数可以进行组合,所以这样写没有问题。

–name 是指定启动后的容器的名称

–privileged 这个命令可以让用户具有容器的root权限;能看到宿主机的一些设备,并可以执行mount操作;可以在docker容器中在启动docker
centos:centos7 则是要启动的镜像信息,centos为镜像名称,centos7为镜像版本

这里给出的部署命令参数较少,其他的参数还有 -p、-P、-r、-s等命令,本文中不做详细介绍,详情可参考 docker命令详解

查看容器启动信息

docker ps

通过docker ps命令可以看到容器id、名称、创建时间等信息

docker如何部署java服务

通过exec进入容器

docker exec -it centos-test /bin/bash

软件安装

安装服务部署所需的软件,本次通过docker部署服务,仅用到jdk、mysql。本文仅对这两个软件进行安装和启动的说明。

jdk安装

查找系统中是否存在jdk

yum list java-1.8*

安装java1.8

yum install java-1.8.0-openjdk* -y

验证是否安装成功

java -version

使用上边的docker exec命令进入到容器中,只想java -verson查看jdk是否安装成功,安装成功显示如下。

docker如何部署java服务

此外通过yum install jdk的方式有一个好处,PATH路径会自动给配置好。如果没有配置的话,需要手动将JAVA_HOME、JAR_HOME等信息在profile中配置。配置项如下:

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64JRE_HOME=$JAVA_HOME/jreCLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binexport JAVA_HOME JRE_HOME CLASS_PATH PATH

启动JAVA_HOME中jdk的路径换成自己安装的路径即可。

mysql安装

本文中安装的mysql是 Server version: 5.7.39 MySQL,如果安装其他版本可能有所不同。

先查询mysql的可安装版本

yum search mysql

查到的版本会有很多,mysql-community-server.x86_64 安装这个版本就可以

通过yum安装mysql

yum install mysql-community-server.x86_64

mysql安装的时候遇到一个报错 Check that the correct key URLs are configured for this repository
这个是因为contos7中的 GPG repository配置有问题,不想耗费过多时间,使用了 --nogpgcheck 来进行异常忽略

最终执行成功的mysql安装命令如下

yum install mysql-community-server.x86_64 --nogpgcheck

mysql启动,先使用了service的方式启动

service mysqld start

启动中出现异常1:
service command not found
service命令没找到。service的路径为 /sbin/service,先看 /sbin/service 这个文件有没有,如果没有进行安装
执行service安装命令

yum install initscripts
安装之后如果还是报错,看下环境配置文件有没有sevice路径的配置
centos环境变量配置在以下几个文件中
/etc/profile
~/.bashrc
~/.bash_profile
在配置文件中看看有没有 PATH的配置,如果没有加一下,缺哪个路径也加一下就可以
PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin

再次启动中出现异常2:
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
这个原因是centos7之后CentOS开始使用systemd服务来代替daemon,service只保留极少部分命令,其他的由systemctl代替。

最终执行的mysql启动命令如下

systemctl start mysqld

执行中出现 Failed to get D-Bus connection: Operation not permitted 异常,是因为docker中安装centos无法使用systemctl命令管理进程,所以启动docker的时候需要授权。所以在第一步docker启动的时候需要加 –privileged 参数。

修改mysql密码

查看mysql临时密码

grep ‘temporary password' /var/log/mysqld.log

通过临时密码进行登陆。登陆命令为

mysql -uroot -p 回车后再输入临时密码

进入mysql命令行后修改密码

ALTER USER ‘userName'@‘localhost' IDENTIFIED BY ‘root123';

修改的密码如果太简单,会出现如下异常
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
出现密码太简单的异常时,先后执行下边的两步,再次设置密码就可以了。第一步修改policy参数,第二部修改密码长度。
set global validate_password_policy=0;
set global validate_password_length=1;

java服务上传

通过上边步骤,已在docker内完成java服务依赖软件的安装,这一步只需要在本地ide中打java包,然后将java包上传到docker服务器

docker cp test.jar containerId:/path

docker cp为文件上传到docker的命令。test.jar为本地jar包,containerId为容器id,/path是文件上传到docker之后的路径。
在执行这个命令是,test.jar可以写绝对路径,如果是相对路径,需要进入到test.jar所在目录再执行.

容器打包

经过上边的操作后,容器已完成所有配置,这个时候我们可以把容器打包,发布到docker hub上。这样我们在其他服务器上部署的时候,就可以通过镜像来部署,会省事很多。镜像后续要传到docker hub中,所以打包名称要把docker hub的用户名包含进去。

docker commit -m ‘打包测试' -a ‘sungy' centos-test dockerHubUserName/testCom:v1

commit 命令就是将容器打包成镜像。 -m 打包信息 -a 作者信息 fblog-server 要打包的容器名称 testCom:v1 打包后名称及版本号。

打包之后的镜像可以发布到 https://hub.docker.com/ 中,以后用到,直接docker pull就可以。
要进行发布,在hub.docker.com注册好账号后,命令行中执行

docker login

输入账号密码,完成登陆后就可以push镜像 imageName是镜像名称,tag是打包时设置的版本。需要注意镜像要上传到自己的dockerhub中,所以打包的镜像需要包含docker hub的用户名。

docker push dockerHubUserName/imageName[:TAG]

注意

容器中不要存数据!不要存数据!不要存数据!

因为docker容器是基于镜像进行启动,只要镜像存在,容器可以随意增删,如果数据存在容器中,非常容易丢失。

可以使用 -v、–mount 等命令,把数据存储到宿主机中。

镜像在启动时,有其他的命令需要执行,可以使用docker file等。尽量使容器启动变简单。

容器不要太大,太大了,部署、再打包都很慢。这次打包出来的镜像有1.5G,后边要想办法减少一些,500M以内应该是比较合理的。

到此,相信大家对“docker如何部署java服务”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯