Docker部署Springboot项目(含MySQL+Redis)

使用Docker部署之前写的一个博客项目,主要用到了MySQL和Redis,Redis作网站访问量统计。下面会对具体的部署方式作详细讲解

一、服务器安装Docker

1、删除docker旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、设置镜像仓库

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云的

3、安装Docker

# 安装docker 相关 docker-ce 社区版 docker-ee企业版
yum install docker-ce docker-ce-cli containerd.io

这时报错

- Status code: 404 for https://mirrors.aliyun.com/docker-ce/linux/centos/2/x86_64/stable/repodata/repomd.xml

查询os版本
可以看到当前服务器版本是Huawei Cloud EulerOS 的2.0版本

[hqf@ecs-337729 ~]$ cat /etc/os-release

NAME="Huawei Cloud EulerOS"
VERSION="2.0 (x86_64)"
ID="hce"
VERSION_ID="2.0"
PRETTY_NAME="Huawei Cloud EulerOS 2.0 (x86_64)"
ANSI_COLOR="0;31"

找到mirrors.aliyun.com/docker-ce/linux/centos路径下发现并没有版本为2的路径,只有7-8。所以只需要修改该路径就行了

[hqf@ecs-337729 ~]$ sudo vim /etc/yum.repos.d/docker-ce.repo

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

将$releaserver改成8
之后再次执行

yum install docker-ce docker-ce-cli containerd.io

安装成功!

二、安装MySQL

1、拉取MySQL镜像

[hqf@ecs-337729 ~]$ docker pull mysql:8.0
8.0: Pulling from library/mysql
197c1adcd755: Pull complete 
45f2e353f7d2: Pull complete 
68ec6ece42ef: Pull complete 
cfa4d9a7b88e: Pull complete 
64cab5858b1d: Pull complete 
92fcd248d982: Pull complete

2、查看镜像

[hqf@ecs-337729 ~]$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         8.0       57da161f45ac   2 weeks ago     517MB
hello-world   latest    feb5d9fea6a5   17 months ago   13.3kB

3、运行镜像

[hqf@ecs-337729 ~]$ docker run -d -p 3306:3306 -v mysql_conf:/etc/mysql/conf.d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:8.0
00afe560d1c93a750f9b021da46f9a8544cd466e6263b2574980152885daf5bb

4、查询运行中的容器

[hqf@ecs-337729 ~]$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
00afe560d1c9   mysql:8.0   "docker-entrypoint.s…"   6 seconds ago   Up 6 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

5、查看容器IP

[hqf@ecs-337729 ~]$ docker inspect mysql01
... ...
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "8131aa939ac0e34ca9e00641ed5d0f21b138815d765c2d36e8e7f1882a3cef32",
                    "EndpointID": "38041eab55f2643c750c77235195cd7aaea1b6a16049498259d32da93f547b8e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }

“IPAddress”: “172.17.0.2”
记录下来之后会用到

6、查询卷挂载目录

[hqf@ecs-337729 ~]$ docker volume ls
DRIVER    VOLUME NAME
local     mysql_conf
local     mysql_data

[hqf@ecs-337729 ~]$ docker volume inspect mysql_data
[
    {
        "CreatedAt": "2023-02-23T14:56:07+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mysql_data/_data",
        "Name": "mysql_data",
        "Options": null,
        "Scope": "local"
    }
]

7、上传.sql文件

到卷挂载目录下上传.sql文件
在这里插入图片描述

8、将数据导入数据库

进入容器

[hqf@ecs-337729 ~]$ docker exec -it mysql01 /bin/bash

创建数据库

mysql> create database blog;

进入数据库

mysql> use blog;

导入数据

mysql> source /var/lib/mysql/blog.sql;

查看导入数据

mysql> show tables;

Docker部署Springboot项目(含MySQL+Redis)_第1张图片
导入成功!

9、修改新密码并设置远程连接

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx';

mysql> flush privileges; // 刷新权限

使用navicate连接,成功!

Docker部署Springboot项目(含MySQL+Redis)_第2张图片

三、 安装Redis

1、拉取redis镜像

docker pull redis

Docker部署Springboot项目(含MySQL+Redis)_第3张图片

2、启动redis容器

docker run -p 6379:6379 --name myredis -v /home/www/redis/redis.conf:/etc/redis/redis.conf -v /home/www/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

3、查看容器进程

如果启动失败,需要将配置文件中的daemonize的参数值改为no
再次启动后成功!
在这里插入图片描述

4、查看redis容器IP

docker inspect myredis

Docker部署Springboot项目(含MySQL+Redis)_第4张图片
记录下该地址之后项目配置会用到

5、使用连接工具连接redis

Docker部署Springboot项目(含MySQL+Redis)_第5张图片
连接成功!

四、项目部署

1、项目打包

将项目数据库连接IP改成上述MySQL容器IP
Docker部署Springboot项目(含MySQL+Redis)_第6张图片
将redis连接IP改成上述Redis容器IP
Docker部署Springboot项目(含MySQL+Redis)_第7张图片

2、编写Dockerfile

FROM java:8

VOLUME /tmp

ADD boot-blog-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 80

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

3、将Dockerfile和jar包上传至服务器

在这里插入图片描述

4、构建Dockerfile

docker build -t boot-blog:1.0 .

报错

Error response from daemon: manifest for java:8 not found: manifest unknown: manifest unknown

解决
将Dockerfile中FROM java:8 改成 FROM openjdk:8
Docker部署Springboot项目(含MySQL+Redis)_第8张图片
然后再次执行构建,成功!

5、查看构建成功的镜像

Docker部署Springboot项目(含MySQL+Redis)_第9张图片

6、运行镜像

docker run -d -p 80:80 --name boot-blog boot-blog:1.0

在这里插入图片描述

7、容器启动后停止

查看容器运行日志

docker logs <container-id>

Docker部署Springboot项目(含MySQL+Redis)_第10张图片
在数据库连接url后添加allowPublicKeyRetrieval=true
Docker部署Springboot项目(含MySQL+Redis)_第11张图片
重新打包上传并运行

8、运行成功

浏览器访问服务器IP
Docker部署Springboot项目(含MySQL+Redis)_第12张图片

你可能感兴趣的:(个人博客,运维,docker,spring,boot,mysql,redis,java)