Docker DockerFile部署java jar项目包,以及Mysql,Redis
作者:mmseoamin日期:2023-12-18

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

1. Docker安装

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

  1. yum -y install gcc

  2. 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

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第1张

1.8 配置阿里云镜像加速

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第2张

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第3张

 在CentOS下配置镜像加速器

mkdir -p /etc/docker 

tee /etc/docker/daemon.json <<-'EOF'

{

  "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 DockerFile部署java jar项目包,以及Mysql,Redis,第4张 进入容器执行

# 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, 这个目录就是上面创建容器时挂载的数据卷

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第5张

[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配置中的密码,没有配置密码的直接跳过这步)

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第6张 到这里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 , 如果成功过则代表后端部署完成

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第7张

可以访问进一步验证

Docker DockerFile部署java jar项目包,以及Mysql,Redis,第8张

后端部署完成

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

查看容器的日志

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

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