Docker DockerFile部署java jar项目包及Mysql和Redis的详细过程

 更新时间:2023年12月09日 11:11:29   作者:dongcsdn123  
Dockerfile是一种用于构建Docker镜像的文件格式,可以通过Dockerfile部署Java项目,这篇文章主要给大家介绍了关于Docker DockerFile部署java jar项目包及Mysql和Redis的详细过程,需要的朋友可以参考下

Docker运行环境要求系统为64位、Linux系统内核版本为 3.8以上

1. Docker安装

1.1 搭建gcc环境 (gcc是编程语言译器)

yum -y install gcc
yum -y install gcc-c++

1.2 安装需要的软件包

yum install -y yum-utils

1.3 装镜像仓库

因为docker的服务器是在国外,

所以有时候从仓库中下载镜像的时候会连接被拒绝或者连接超时的情况!

因此可以使用阿里云镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.4 新yum软件包索引

 yum makecache fast

1.5 安装docker引擎

yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

1.6 启动docker

systemctl start docker

1.7 查看docker版本

docker version

1.8 配置阿里云镜像加速

 在CentOS下配置镜像加速器

mkdir -p /etc/docker 
tee /etc/docker/daemon.json <<-'EOF'
{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
  "registry-mirrors": ["你个人的阿里云镜像加速器地址"]
}
EOF
systemctl daemon-reload
systemctl restart docker 

 docker已经安装完毕

2. docker安装Mysql

2.1 拉取mysql镜像

docker pull mysql:8.0.19

2.2 启动mysql

 # docker run 创建一个新的容器
docker run -d -p 23306:3306 --name mysql \
-v /usr/dcoker-mysql/log:/var/log/mysql \
-v /usr/docker-mysql/data:/var/lib/mysql \
-v /usr/docker-mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.19

命令参数说明:

参数说明:

  • -d   后台运行
  • -p 33060:3306  端口映射,宿主机的33060端口映射到容器3306端口
  • --name mysql  容器名称,可以自定义
  • -v /usr/dcoker-mysql/log:/var/log/mysql  宿主机/usr/dcoker-mysql/log目录与容器的/var/log/mysql目录挂载,该目录保存了mysql的日志
  • -v /usr/docker-mysql/data:/var/lib/mysql  也是挂载,该目录是mysql数据储存的位置
  • -v /usr/docker-mysql/conf:/etc/mysql/conf.d  也是挂载,该目录放置配置文件的
  • -e MYSQL_ROOT_PASSWORD=123456  设置环境变量,该变量是设置root用户的密码,可自行修改
  • mysql:8.0.19  镜像名称以及tag

如果不挂载数据卷,容器被删掉之后,mysql数据库里面的数据都会消失 

如果启动失败,可以执行docker logs -f -t --tail 1000  [容器id] ,查看日志,找失败的原因

2.3 查看容器

docker ps 

 进入容器执行

# docker exec 在运行的容器中执行命令
docker exec -it mysql mysql -uroot -p123456

参数说明: -i 以交互模式运行容器 -t 为容器重新分配一个伪输入终端 mysql -uroot -p123456 容器执行的命令,直接进入容器中的mysql 

*注意:安装的mysql是8.x版本的,默认的身份验证插件为caching_sha2_password,该插件不能使用旧版本的客户端来连接;如果所使用的Navicat版本较旧,需要修改身份验证插件才能登录。修改插件执行:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

使用navicat连接后创建数表并插入数据, 如果出现乱码, 修改配置文件

执行exit退出容器, 在宿主机中挂载的配置文件编写

执行 vim /usr/docker-mysql/conf/my.cnf, 这个目录就是上面创建容器时挂载的数据卷

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

 保存之后执行docker restart mysql重启容器

3. docker部署redis

3.1 拉取redis镜像

docker pull redis:6.0.8

3.2 创建配置文件

在宿主机上创建一个文件redis.conf, 路径可以自定义, 这里提供一个配置文档, 配置可根据自己的需求修改, 本文配置文件路径: /usr/docker-redis/conf/reids.conf

# bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
#设置密码为123456,可注释掉
requirepass 123456
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

* 注意:daemonize no是关闭守护线程,如果开启的话容器会启动不起来 

根据个人需求进行配置 

3.3 执行以下命令启动容器

docker run -d -p 6379:6379 --name redis \
-v /usr/docker-redis/conf/redis.conf:/etc/redis/redis.conf \
-v /usr/docker-redis/data:/data \
redis redis-server /etc/redis/redis.conf

参数说明:

  • -d   后台运行
  • -p 6379:6379  端口映射,<宿主机端口>:<容器端口>
  • --name redis   容器名称,可以自定义
  • -v /usr/docker-redis/conf/redis.conf:/etc/redis/redis.conf  宿主机/usr/docker-redis/conf/redis.conf文件与容器的/etc/redis/redis.conf文件挂载
  • -v /usr/docker-redis/data:/data  也是挂载,该目录是redis数据持久化文件储存的位置
  • redis    镜像名称
  • redis-server /etc/redis/redis.conf   以上面redis.conf文件写的配置启动redis

启动redis容器之后,执行docker ps查看是否启动成功

如果没有启动成功可以执行命令docker logs <容器名称或id>查看日志;如果日志没有内容可能是配置中开启了守护线程的原因,关闭即可

启动成功后,执行docker exec -it redis redis-cli命令进入容器

如果设置了密码,执行auth 123456(123456配置中的密码,没有配置密码的直接跳过这步)

 到这里redis就安装完成了

4. docker部署java jar

4.1 将jar上传到需要构建镜像的目录

4.2 在当前目录下创建Dockerfile编写Dockerfile (最好命名Dockerfile,否则构建需要指定文件名)

#基础镜像使用jdk1.8
FROM openjdk:8-jdk-alpine
#作者
MAINTAINER pan
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名
ADD ruoyi-admin.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
# 为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#ENTRYPOINT ["nohup","java","-jar","/data/app/ruoyi-admin.jar","&"]
#暴露8080端口
EXPOSE 8080

4.3 构建镜像 (需要在Dockerfile同级目录下构建,执行次命令)

docker build -t app:1.0 .    # 注意末尾的点不能去掉

4.4 构建成功后查看当前的镜像, 构建过程中如果没有拉取过openjdk:8-jdk-alpine,需要等待下载

docker images

4.5 启动后端项目镜像

 docker run -d --name app-container -p 8080:8080 app:1.0

4.6 查看容器是否启动成功

docker ps , 如果成功过则代表后端部署完成

可以访问进一步验证

后端部署完成

4.7 如果容器没有启动成功, 请看这一步

查看容器的日志

docker logs -f -t --tail 1000 [容器ID]

 通过日志确定问题,将报错进行复制,进行百度搜索,自行解决 

总结

到此这篇关于Docker DockerFile部署java jar项目包及Mysql和Redis的文章就介绍到这了,更多相关Docker DockerFile部署jar项目包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot自动装配之Condition深入讲解

    SpringBoot自动装配之Condition深入讲解

    @Conditional表示仅当所有指定条件都匹配时,组件才有资格注册。该@Conditional注释可以在以下任一方式使用:作为任何@Bean方法的方法级注释、作为任何类的直接或间接注释的类型级别注释@Component,包括@Configuration类、作为元注释,目的是组成自定义构造型注释
    2023-01-01
  • 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

    一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

    使用SSM(Spring、SpringMVC和Mybatis)已经有段时间了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,下面这篇文章主要给大家介绍了关于整合SSM框架:Spring MVC + Spring + MyBatis的相关资料,需要的朋友可以参考下。
    2017-07-07
  • 使用JavaWeb webSocket实现简易的点对点聊天功能实例代码

    使用JavaWeb webSocket实现简易的点对点聊天功能实例代码

    这篇文章主要介绍了使用JavaWeb webSocket实现简易的点对点聊天功能实例代码的相关资料,内容介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • 关于Java8新特性Optional类的详细解读

    关于Java8新特性Optional类的详细解读

    Optional类是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在,原来用 null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常,需要的朋友可以参考下
    2023-05-05
  • Java 批量删除html中注释内容的方法

    Java 批量删除html中注释内容的方法

    最近项目中有一个功能需要读取外部html文本文件。但是有的html文件里面有大量的注释,需要删除其中的注释在存储
    2014-04-04
  • Java调用Python脚本传递数据并返回计算结果

    Java调用Python脚本传递数据并返回计算结果

    实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,Java如何调用Python脚本,感兴趣的可以了解一下
    2021-05-05
  • Java自动化工具Ant的基础使用教程

    Java自动化工具Ant的基础使用教程

    这篇文章主要介绍了Java自动化工具Ant的基础使用教程,例子在Windows系统下操作演示,讲解了Ant基本的文件操作和属性,需要的朋友可以参考下
    2016-02-02
  • Java代码注释规范(动力节点整理)

    Java代码注释规范(动力节点整理)

    代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率。也是程序代码可维护性的重要环节之一。下面通过本文说一下我们在日常开发中使用的代码注释规范
    2017-03-03
  • 基于Java实现PDF文本旋转倾斜

    基于Java实现PDF文本旋转倾斜

    这篇文章主要介绍了基于Java实现PDF文本旋转倾斜,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java时间类库Timer的使用方法与实例详解

    Java时间类库Timer的使用方法与实例详解

    这篇文章主要介绍了Jave时间类库Timer的使用方法与实例详解,需要的朋友可以参考下
    2020-02-02

最新评论