Java教程

Docker部署SpringBoot项目并连接MySQL、Redis

本文主要是介绍Docker部署SpringBoot项目并连接MySQL、Redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Docker部署SpringBoot项目并连接MySQL、Redis

      • 服务器域名绑定
      • 安装docker
      • 安装tomcat
      • 安装MySQL
      • 安装Redis
      • 部署SpringBoot项目

服务器域名绑定

  • 新买的腾讯云服务器,如果绑定新买的域名?这里有3个前置步骤:买服务器,买域名,备案。这三个步骤就不一一说了。
  • 服务器绑定域名,换种说法就是域名解析的时候解析到你这台服务器上。操作步骤如下
  1. 点击“前往设置”来设置解析规则在这里插入图片描述
  2. 在域名列表中选择你想绑定到服务器的域名,点后边的“解析”
    在这里插入图片描述
  3. 第三步也就是最后一步,添加解析规则
    点击“添加记录”,注意:在你添加之前,这里本身会有几条记录,不用管它(你的记录可能和我这截图里不一样,不用管,我的手动改过),你自己添加的两条记录中,主机记录填一个@,填一个www,记录类型都选A,线路类型默认,记录值填服务器的公网IP,然后直接确认即可。说明:假设域名是abc.xyz,@表示解析abc.xyz,www表示解析www.abc.xyz,所以添加这两条记录后,abc.xyz和www.abc.xyz都能解析到该服务器上。
    在这里插入图片描述

安装docker

  • 我这里是centos系统,安装步骤就官网那几步
    # 卸载原来可能有的docker
    sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
    # 安装yum-utils
    sudo yum install -y yum-utils
    # 指定阿里云仓库地址
    sudo yum-config-manager \
    	--add-repo \
    	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 配置缓存
    sudo yum makecache fast
    # 安装,默认安装最新版(二选一)
    sudo yum install docker-ce docker-ce-cli containerd.io
    # 安装,安装指定版本(二选一)
    yum list docker-ce --showduplicates | sort -r
    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-	<VERSION_STRING> containerd.io
    # 启动
    sudo systemctl start docker
    # 开机自启
    sudo systemctl enable docker
    
  • 一个系统可以安装多个版本的docker吗?会不会冲突
  • sudo yum install docker-ce docker-ce-cli containerd.io与直接sudo yum install docker有啥区别?
  • 安装成功后,docker默认安装在/var/lib中,docker pull下载的镜像信息会记录在/var/lib/docker/image/overlay2/repositories.json文件中

安装tomcat

  • 这里安装tomcat与部署SpringBoot项目没啥关系,就是玩儿

    # 有些容器命令用起来简单,一段时间不用就忘了,这里罗列几个
    # 查看所有容器及其详细信息
    docker ps -a
    # 进入容器
    docker exec -it 【容器名或容器id】 /bin/bash
    # 退出容器
    exit
    # 删除容器
    docker stop 【容器名或容器id】
    docker rm 【容器名或容器id】
    # 删除镜像
    docker rmi 【容器名或容器id】
    # 重启容器,如果修改了挂载目录里的配置文件,可通过docker stop,docker restart来使之生效
    docker restart 【容器名或容器id】
    # 查看容器启动日志
    docker logs 【容器名或容器id】
    
    
    # 拉tomcat镜像,默认latest
    docker pull tomcat
    # 最简单方式运行,-d表示后台运行,两个8080第一个指宿主机的8080端口,第二个8080指容器的8080端口,
    # 将容器的8080端口映射到宿主机的8080端口上,给容器指定别名tomcat,后面就不用每次都操作容器id
    docker run -d -p 8080:8080 --name tomcat tomcat
    # 运行容器后,将需要部署的war包拷贝到webapps目录
    # 拷贝方式一,在宿主机上执行docker cp命令
    docker cp /usr/local/xxx.war 【容器名或容器id】:/usr/local/tomcat/webapps
    # 拷贝方式二,在容器内用rz上传,先进入容器
    apt update
    apt install lrzsz
    rz
    # 用上述方式运行容器,数据都在容器内,如果容器重启了,那么数据就都丢了,显然不是最好的方式
    # 最好的方式是建立容器与宿主机之间的映射,即把容器目录挂载到宿主机上,即使容器重启,只有宿主机上不删除,数据就不会丢
    # -v dir1:dir2 就表示容器的目录dir2映射到宿主机的目录dir1上,--restart=always表示docker重启时容器自动重启
    docker run -d -p 80:80 --name tomcat -v /root/docker-data/d-tomcat/webapps:/usr/local/tomcat/webapps -v /root/docker-data/d-tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml --restart=always tomcat
    
  • 经过上述方式启动后,修改/root/docker-data/d-tomcat/conf/server.xml中的端口为80,并且加上URIEncoding="UTF-8",在/root/docker-data/d-tomcat/webapps/ROOT下放了一个index.html,直接通过服务器域名就能访问到。但是,为什么看到的中文是乱码?

    • 页面在这里插入图片描述
    • index.html在这里插入图片描述
    • 网上说先看当然容器的编码格式,如果是POSIX就通过-e LANG="C.UTF-8"指定为utf-8,可我这儿本身就是C.UTF-8
      在这里插入图片描述
  • 备份容器

  • 备份到本地

    # 备份容器为镜像
    docker commit -p 【容器id】 【新镜像名,假设为test-backup】
    # docker images即可看到新镜像,导出到本地目录
    docker save test-backup > /Users/用户名/Desktop/test-backup.tar
    # 恢复容器,先删除docker里面的镜像
    docker rmi test-backup
    docker images
    # 导入
    docker load < /Users/用户名/Desktop/test-backup.tar
    # 再看docker中是否存在
    docker images
    
  • 备份到远程

    # 备份容器为镜像
    docker commit -p 【容器id】 【新镜像名,假设为test-backup】
    # 用户名密码登录docker
    docker login
    # 给镜像加tag
    docker tag test-backup xxx/mytest:test-backup
    # 保存
    docker push xxx/mytest:test-backup
    # 如果要恢复,在docker pull
    docker pull ...
    

安装MySQL

  • 安装MySQL步骤与安装tomcat差不多
    # 拉镜像
    docker pull mysql:5.7
    # 运行容器,指定端口映射,取别名,挂载数据目录,日志目录,配置文件目录,指定密码,自动重启,后台运行
    docker run -p 3306:3306 --name mysql -v /root/docker-data/d-mysql/data:/var/lib/mysql -v /root/docker-data/d-mysql/logs:/etc/mysql/logs -v /root/docker-data/d-mysql/conf:/etc/mysql/cnf.d -e MYSQL_ROOT_PASSWORD=123456 --restart=always -d mysql:5.7
    # 安装完后,进入容器,进入mysql,密码为123456
    # 设置远程登录
    use mysql;
    grant all privileges on *.* to 'root'@'%' with grant option;
    flush privileges;
    
  • 这里碰到的问题时,设置MySQL远程登录后,本地win10上远程登录成功,登录用的密码是123456,然后我进入容器,把容器内MySQL密码改成了root,之后容器内执行mysql -u root -p时必须输root才能进入MySQL,但是win10的远程连接并没有因为修改了密码而断开,并且,后面部署SpringBoot项目时,项目中连接MySQL需要使用123456这个初始指定的密码,而不是root

安装Redis

# 拉取镜像
docker pull redis:3.2
# 启动,指定端口映射,别名,指定挂载目录,自动启,指定配置文件启动redis-server
docker run -d -p 6379:6379 --name redis -v /root/docker-data/d-redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /root/docker-data/d-redis/data:/data --restart=always redis:3.2 redis-server /usr/local/etc/redis/redis.conf

部署SpringBoot项目

  • 将SpringBoot项目打成jar包,拷贝到某个目录下,并在该目录下创建Dockfile文件
    在这里插入图片描述
  • Dockfile
    # 基础镜像使用java
    FROM java:8
    # 维护人,作者
    MAINTAINER xxx
    # VOLUME 指定了临时文件目录为/tmp,
    # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
    VOLUME /tmp
    # 将jar包添加到容器中并更名为app.jar
    ADD express-0.0.1-SNAPSHOT.jar app.jar
    # 暴露运行端口
    EXPOSE 80
    # 指定prod环境运行
    ENTRYPOINT ["java","-Dspring.profiles.active=prod","-Duser.timezone=GMT+8","-jar","app.jar"]
    
  • 制作镜像并运行
    # 制作镜像,注意后面有个点
    docker build -t app .
    # 注意,因为项目中用到了MySQL以及Redis,这里运行容器时,需要指定MySQL以及Redis,也就是上面部署的MySQL和Redis,.
    # 上述 MySQL和 Redis在执行docker run命令时,我都指定了别名,分别为mysql、redis,所以这里可以直接用这些别名,docker就会通过别名找到对应容器
    # 通过--link参数即可使用容器,比如 --link mysql:conf-mysql,mysql即别名,conf-mysql即我所用的mysql的host,也就是我在application.yaml里面配mysql地址时配的是jdbc:mysql://conf-mysql:3306/【数据库】/xxx
    docker run --link mysql:conf-mysql --link redis:conf-redis -d -p 80:80  app 
    
这篇关于Docker部署SpringBoot项目并连接MySQL、Redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!