centOS中docker部署springboot项目(整合版:包含mysql、redis)

文章目录

1:安装docker
2:docker安装mysql
3:docker安装redis
4:docker部署srpingboot项目

1:安装docker

执行命令

yum install -y docker

查看docker是否安装成功

yum list installed |grep docker

在这里插入图片描述

启动docker服务

systemctl start docker.service

查看docker服务状态 running 就是启动成功

systemctl status docker
在这里插入图片描述

配置国内镜像
为什么要配置国内镜像?
  • 在日常进行Docker pull时,就算挂上了某些工具,仍然会出现timeout error的情况,这主要是因为国外的镜像源的下载速度实在是太慢太慢太慢了。
国内镜像地址:
Docker中国区官方镜像:
https://registry.docker-cn.com

网易:
http://hub-mirror.c.163.com

ustc:
https://docker.mirrors.ustc.edu.cn

中国科技大学:
https://docker.mirrors.ustc.edu.cn

阿里云:
登录:cr.console.aliyun.com
点击“创建我的容器镜像”,得到专属加速地址。
如何配置?
  • 在宿主机器编辑文件(若没有则需手动创建):

    vim /etc/docker/daemon.json

  • 格式如下:

    {
        "registry-mirrors": [
            "http://hub-mirror.c.163.com",
            "https://docker.mirrors.ustc.edu.cn",
            "https://registry.docker-cn.com"
        ]
    }
    
  • 配置完成之后重启docker

    service docker restart

到此!我们docker的安装已经基本完成,那么再往下走之前我们需要了解一些docker基本的操作指令,以方便我们更方便的往下搭建镜像和容器

基本的镜像命令:

帮助命令:
docker --help

查看镜像是否配置成功:
docker info 

查看本地镜像:
docker images

查看本地全部镜像:
docker images -a

 删除镜像:
docker rmi xxx(镜像id)

基本容器命令:

停止容器:
docker stop xxx(容器id)

启动已经停止容器:
docker start xxx(容器id)

进入容器:
docker exec -it xxx(容器id)  /bin/bash

删除容器:
docker rm -f xxx(容器id)

重启容器命令:
docker restart xxx(容器id)

查看容器的运行信息
docker ps 

查看全部容器的运行信息
docker ps -a

官网的镜像地址:
该网站上都是别人已经写好并发布的镜像,我们可以直接搜索自己想要的镜像pull,大大简化部署时间;

https://hub.docker.com/


2:docker安装mysql

(1)拉取指定版本:

docker pull mysql:8.0.20

注意:8.0.20是版本号,可以根据自己的需求拉取指定的版本,若没有指定版本号则默认拉取最新的版本

(2)创建目录(用于容器数据挂载):
mkdir -p /usr/local/etc/mysql/log
mkdir -p /usr/local/etc/mysql/data
mkdir -p /usr/local/etc/mysql/conf

注意:mkdir是liunx创建目录指令,后续的路径可根据自己的需要创建到指定的文件夹下

(3)运行mysql容器
sudo docker run --privileged=true -p 3006:3306 --name mysql-8  -v /usr/local/etc/mysql/log:/var/log/mysql  -v /usr/local/etc/mysql/data:/var/lib/mysql  -v /usr/local/etc/mysql/conf:/etc/mysql/conf.d  -e MYSQL_ROOT_PASSWORD=szml666  -d mysql:8.0.20  --lower-case-table-names=1

在复制这段命令之前我们需要先理解上面这段命令

容器与主机映射端口为, 3006(主机端口,即外部连接mysql使用的端口号): 3306(容器端口):
-p 3006:3306

容器运行后的名称:
--name mysql-8

将容器/var/log/mysql目录下的数据,备份到主机的 /mysqldata/mysql/log目录下:
-v /usr/local/etc/mysql/log:/var/log/mysql

将容器/var/lib/mysql目录下的数据,备份到主机的 /mysqldata/mysql/data目录下:
-v /usr/local/etc/mysql/data:/var/lib/mysql

将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下:
-v /usr/local/etc/mysql/conf:/etc/mysql

将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下:
-e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root

需要运行的容器名称以及版本号
mysql:8.0.20 

不去分表的大小写(主要针对mycat问题):
--lower-case-table-names=1 
(4)进行授权远程连接(mysql 8.0跟之前的授权方式不同)
登录容器:
docker exec -it  容器名称  /bin/bash

登录mysql
mysql -u root -p  

执行:
GRANT ALL ON *.* TO 'root'@'%';

刷新权限:
flush privileges; 

更改加密规则:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

设置密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123654';

刷新权限:
flush privileges;

这一步主要防止我们使用数据库视图工具及连接的时候连接不上的问题

到此mysql的容器启动完成,我们可以用Navicat 测试连接

在这里插入图片描述


3:docker安装redis

(1)拉取指定版本:

docker pull redis:7.0.11

注意:7.0.11是版本号,可以根据自己的需求拉取指定的版本,若没有指定版本号则默认拉取最新的版本

(2)创建目录和文件夹(用于容器数据挂载和文件配置):
mkdir -p /usr/local/etc/redis/conf

touch /usr/local/etc/redis/conf/redis.conf
(3)运行redis容器
docker run -d \ --name redis-7.0.11 -p 6369:6379 \ --restart unless-stopped  -v /usr/local/etc/redis/data:/data  -v /usr/local/etc/redis/conf/redis.conf:/etc/redis/redis.conf \ redis:buster redis-server /etc/redis/redis.conf 

理解上面这段命令

启动容器的名字:
-name redis

后台运行:
-d

将容器的 6379(后面那个) 端口映射到主机的 6379(前面那个) 端口:
-p 6379:6379

容器重启策略:
-restart unless-stopped

将Redis储存文件夹挂在到主机:
-v /mydata/redis/data:/data

将配置文件夹挂在到主机:
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf

启动哪个版本的 Redis (本地镜像的版本):
redis:buster

 Redis 容器中设置 redis-server 每次启动读取 /etc/redis/redis.conf 这个配置为准:
redis-server /etc/redis/redis.conf

shell 命令换行:
\
(4)修改redis密码
1:查看运行的redis,并记下它的 CONTAINER ID

docker ps

2:通过容器id,进入redis
docker exec -it CONTAINER_ID /bin/bash

3:运行redis客户端
redis-cli

4:查看redis的密码
config get requirepass

5:置redis的密码
config set requirepass xxx(你的密码)

6:认证
auth xxx(你的密码)

到此redis的容器启动完成,我们可以用RedisDeskt测试连接
在这里插入图片描述


4:docker部署srpingboot项目

(1)使用idea将java项目打成jar包:

先清除之前的再重新打包
Alt

找到打包的jar包,在项目文件夹的target文件夹里面
Alt
Alt

(2)拉取jdk指定版本:

docker pull java:8

(3)在centos中指定文件夹用于存放jar包和dockerfile

dockerfile:用于将jar包编译成镜像

  • 在指定文件夹下执行:

    vim dockerfile

  • 填写以下内容:

      #依赖jdk镜像
      FROM java:8
      #作者
      MAINTAINER xxx
       设置时区
      ENV TimeZone=Asia/Shanghai
      #使用软连接,并且将时区配置覆盖/etc/timezone
      RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
      #暴露端口
      EXPOSE 8089
      #启动程序命令
      ENTRYPOINT ["java","-jar","/data/jeecg-boot-module-system-3.3.0.jar"]
    

    dockerfile命令:

    命令作用
    FROM来源于哪个基础镜依赖
    MAINTAINER作者信息
    RUN容器构建时需要运行的命令
    EXPOSE对外暴露端口
    WORKDIR容器创建后,终端默认登录进来的工作目录
    USER指定该镜像以什么用户去执行 默认为root
    ENV运行时环境变量
    VOLUME配置容器数据卷挂载
    ADD将宿主机目录下的文件拷贝进镜像并且会自动处理URL和解压tar包 ,等于copy+解压
    COPY将源文件从宿主机拷贝到容器内
    CMD在执行docker run时候执行,可以有多个cmd指令但是只有最后一个生效, docker run的参数会覆盖 cmd的参数,一般可变参数用cmd,支持两种格式 shell: yum isntall -y vim ; exec: [“可执行文件”,“参数”]
    ENTRYPOINT也是用来指定容器启动时要执行的命令,类似cmd 但是不会被 run 后的参数命令覆盖,固定参数一般用ENTRY_POINT, 当CMD和ENTRYPOINT联用时,cmd多用于给ENTRYPOINT传参
  • 将jar包放到dockerfile填写的文件夹下:

    如:我jar包当前放的是docker同级文件夹下的data文件夹

    Alt
    在这里插入图片描述

    在这里插入图片描述

(4)编译dockerfile制作成镜像
docker build -t app-api . 

app-api : 为生成镜像后的镜像名字;注意后面的"."!!!

(5)生成容器
docker run -p 8089:8080 --name app-api  -d app-api
8089:为对外暴露端口

8080:为项目端口

--name app-api:为容器名字 app-api

-d app-api: 为执行哪个镜像
(6)最后部署成功,我们可以用ApiPost测试接口能否成功访问

请求路径为:宿主机ip+容器暴露的端口+接口的路径

例:http://xx:xx:xx:xx:8089/test

在这里插入图片描述

至此使用docker部署springboot项目成功,每个人的项目不同,需要部署的服务不同,但是所有的逻辑是相通的

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值