ubuntu系统下安装docker并部署Springboot+mysql+redis

目录

  • 安装Docker
  • Docker常用命令
  • 构建mysql容器
  • 构建Redis容器
  • 构建Springboot应用镜像及容器
    • (1)springboot使用maven将程序打成jar包,接着编写Dokerfile文件,[Dockerfile详细介绍](http://www.dockerinfo.net/dockerfile%e4%bb%8b%e7%bb%8d)
    • (2)将打好的jar包与Dockerfile放到linux下同个目录下
    • (3)运行命令制作镜像:
    • (4)根据Springboot配置文件中mysql的配置运行容器:
    • (5)查看springboot运行日志及状态
  • 部署过程的异常
    • docker运行spring boot 包镜像出现no main manifest attribute问题
      • 解决方案
  • 参考

安装Docker

最简单的方法:使用国内 daocloud 一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

验证是否安装成功:

docker version

若出现版本信息则说明成功安装了

Docker常用命令

此部分转载自:博主「一路向北0」

1.重启docker服务
systemctl restart docker

2.停止docker命令
systemctl stop docker

3.查看镜像列表
docker images

4.删除镜像
docker rmi image-id

5.查看容器列表
docker ps
查看所有容器,包括停止的容器
docker ps -a

6.启动以及停止容器
docker start container-name/container-id
docker stop container-name/container-id

7.删除容器
docker rm container-id
强制删除容器
docker rm -f container-id

8.查看容器日志
docker logs container-name/container-id
查看实时日志
docker logs -f container-name/container-id

9.设置 阿里云 加速地址
找到 /etc/docker/ 目录下
vim daemon.json
将以下内容复制到文件中
{
“registry-mirrors”: [“https://rypl6yvv.mirror.aliyuncs.com”]
}
systemctl daemon-reload 通知systemd重载此配置文件
systemctl restart docker 重启docker

10.查看最后一次运行的容器
docker ps -l

11.查看停止的容器
docker ps -f status=exited

12.【外部】复制文件到【容器】中去:
docker cp /外部目录/外部文件 容器名:/容器目录/文件名【若最后写了文件名,就以最后的文件名为主】

13.【容器】复制文件到【外部】:
docker cp 容器名:/容器目录/容器中的文件 /外部目录/文件名【若最后写了文件名,就以最后的文件名为主】

14.(目录挂载)文件映射:
docker run -di --name=mynginx -p 90:80 -v /usr/html:/usr/share/nginx/html nginx:1.17.5
-v 目录挂载 外部目录:容器目录
-p 端口映射 外部端口:容器端口

15.查看容器所有信息:
docker inspect container-name

构建mysql容器

此处构建的是mysql:8.0.18的镜像,构建mysql5.x的镜像可以参考:在docker中运行mysql实例

  1. 下载mysql镜像:
    docker pull mysql:8.0.18
  2. 运行镜像,设置root账号初始密码(123456),映射本地宿主机端口3306到Docker端口3306。
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /usr/local/mysql/data:/var/lib/mysql:rw -v /usr/local/mysql/mysql-files:/var/lib/mysql-files:rw -v /usr/local/mysql/log:/var/log/mysql:rw -v /usr/local/mysql/config:/etc/mysql:rw -v /etc/localtime:/etc/local/time:ro --restart=always -d mysql:8.0.18

参数说明:

  • –name: 指定容器的名称
  • -p: 指定本机与容器的映射端口,以此访问容器端口
  • -e: 初始化root用户的密码
  • -v: 挂载数据。容器里面的数据不能直接访问的,但可通过-v指定本机的目录挂载到容器中实现访问容器的数据
  • –restar=always:自动重启,比如服务器突然断电,重启服务器之后不需要你重新手动启动
  • -d:以后台的方式运行,即守护线程(Daemon)
  1. 查看mysql容器是否运行:
    docker ps

  2. 进入mysql容器:
    docker exec -it mysql bash

  3. 在容器内登陆Mysql:
    mysql -uroot -p123456

  4. 查看用户信息
    select host,user,plugin,authentication_string from mysql.user;

    host为 % 表示不限制ip,localhost表示本机使用。 plugin如果不是mysql_native_password 则需要修改

 ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'FLUSH PRIVILEGES;  //刷新数据库权限
  1. 退出mysql容器:
    exit

构建Redis容器

与构建mysql容器类似

  1. 拉取镜像
    docker pull redis:latest
  2. 运行容器
    docker run -itd --name redis -p 6379:6379 redis
  3. 进入容器,检测redis容器是否运行
    docker exec -it redis-test /bin/bash
    redis-cli

构建Springboot应用镜像及容器

(1)springboot使用maven将程序打成jar包,接着编写Dokerfile文件,Dockerfile详细介绍

Dockerfile示例:

FROM java:8
# 作者
MAINTAINER Darren <754121262@qq.com>VOLUME /tmp
# 将jar包添加到容器的/目录下并更名为user-server.jar
ADD user-server-1.0-SNAPSHOT.jar /user-server.jarEXPOSE 9000
# 运行jar包
RUN bash -c 'touch /user-server.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dfile.encoding=utf-8","-jar","/user-server.jar"]

(2)将打好的jar包与Dockerfile放到linux下同个目录下

(3)运行命令制作镜像:

docker build -t [容器名] .

注意:最后面一个点表示当前目录

(4)根据Springboot配置文件中mysql的配置运行容器:

当springboot项目连接数据的配置文件为:

spring.datasource.url = jdbc:mysql://localhost:3306/spring

运行命令:

docker run --net=host --name=springboot -p 9000:9000 -di springboot:1.0

–net=host 告诉 Docker 不要将容器网络放到隔离的名字空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其 它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true,容器会被允许直接配置主机的网络堆栈。

当springboot项目连接数据的配置文件为:

spring.datasource.url = jdbc:mysql://mysql:3306/spring
即:有数据库别名的时候
# --link 连接提供mysql服务的容器,冒号后面是配置文件中数据库的别名,别名应该和代码中的数据库地址一致
docker run --link mydata:mysql --name=springboot-p 9000:9000 -di springboot:1.0# --link 链接,mydata为已经在运行的数据库镜像的别名,冒号后面是配置文件中数据库的别名,这里配置文件中数据库的别名为mysql
# --name 为容器的别名
# -p 为端口号映射 80 为外部访问端口,8090为容器对宿主机的映射端口
# -d后台运行容器
# -i以交互模式运行容器
# 镜像名:版本号

(5)查看springboot运行日志及状态

docker ps 
docker logs -f [容器名]

部署过程的异常

docker运行spring boot 包镜像出现no main manifest attribute问题

运行命令docker logs 【容器ID】,查看运行日志

no main manifest attribute

即springboot程序没有入口类

解决方案

项目基于maven pom多模块的开发的,需要设置goal-repackage属性为true,否则打包后文件依赖文件没有一起打包,然后镜像内没有可以运行的程序文件

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 指定该Main Class为全局的唯一入口 --><mainClass>com.zcj.email.EmailApplication</mainClass><layout>ZIP</layout></configuration><executions><execution><goals><!--可以把依赖的包都打包到生成的Jar包中--><goal>repackage</goal></goals></execution></executions>
</plugin>

参考

  • docker安装mysql8.0.18
  • Ubuntu Docker 安装
  • docker 安装以及部署springboot项目和连接mysql
  • 完整的docker+springboot+mysql部署
  • 在docker中运行mysql实例
  • docker运行spring boot 包镜像出现no main manifest attribute问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis连接池

【README】 本文旨在po出 redis连接池的测试用例 <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.5.1</version></dependency></dependencies> 【1】 代…

qmc0转换mp3工具_GoldenRecords for Mac(唱片录音转换软件)

想要将你最喜欢的唱片音乐转换成为方便易于携带的数字音频么&#xff1f;GoldenRecords Mac版是一款Macos上的唱片录音转换软件&#xff0c;用户可以将自己收藏的旧唱片快速转换成为自己喜欢的数字音频音乐&#xff0c;随时随地想听就听&#xff01;GoldenRecords mac版&#x…

java提高篇之抽象类与接口

转载自 java提高篇之抽象类与接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类与接口是java语言中对抽象概念进行定义的两种机制&#xff0c;正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似&…

Java中synchronized同步块的执行流程

必要知识 Java 对象的数据结构 在 HotSpot 虚拟机中&#xff0c;Java 对象在内存中存储的布局可以分为 3 块区域&#xff1a;对象头&#xff08;Header&#xff09;、实例数据&#xff08;Instance Data&#xff09;和对齐填充&#xff08;Padding&#xff09;对象头中的 Mar…

深入理解Java的接口和抽象类

转载自 深入理解Java的接口和抽象类 对于面向对象编程来说&#xff0c;抽象是它的一大特征之一。在Java中&#xff0c;可以通过两种形式来体现OOP的抽象&#xff1a;接口和抽象类。这两者有太多相似的地方&#xff0c;又有太多不同的地方。很多人在初学的时候会以为它们可以随意…

转: 记录centos7 安装erlang22.3和rabbitMQ

转&#xff1a; https://blog.csdn.net/weixin_44436611/article/details/109492936 记录centos7 安装erlang22.3和rabbitMQ 记录centos7 安装erlang22.3和rabbitMQTOC 官网地址&#xff1a;https://www.rabbitmq.com/install-rpm.html#install-erlang 部分rpm包&#xff1a;…

hashmap应用场景_工作中常用到的Java集合有哪些?应用场景是什么?

秋招Java面试大纲&#xff1a;Java并发spring数据库RedisJVMNetty等疫情期间“闭关修炼”&#xff0c;吃透这本Java核心知识&#xff0c;跳槽面试不心慌Spring全家桶笔记&#xff1a;SpringSpring BootSpring CloudSpring MVC前言Java集合是我认为在Java基础中最最重要的知识点…

Zookeeper入门总结

什么是Zookeeper 官方定义&#xff1a; zookeeper是一个分布式服务框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;统一命名服务、状态同步服务、集群管理、分布式应用配置项的管…

rabbitmq启动失败-报Failed to load advanced configuration file解决方法

【README】 1、本文基于 centos8 搭建 rabbitmq&#xff1b; 版本信息如下&#xff1a; rabbitmq rabbitmq-server-3.8.12-1.el8.noarch.rpm erlang erlang 23.2.5 (erts-11.1.8) 上述两者版本一定要强对应&#xff0c;否则mq启动失败&#xff0c;参见官网 https://rabb…

Java抽象类与接口的区别

转载自 Java抽象类与接口的区别 抽象类 抽象类是用来捕捉子类的通用特性的 。它不能被实例化&#xff0c;只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例&#xff1a; public abstract class GenericServlet implements Servlet…

gateway坑点:gateway有Controller时会直接处理对应的路径并返回

前言 使用gateway过程中&#xff0c;因为在gateway中加入了一个标注RestController的类&#xff0c;导致请求直接由gateway中的RestController的类处理并返回。花费了几小时才发现问题原因&#xff0c;特此记录 问题 以gateway作为网关转发请求得到的响应&#xff0c;所有字…

电脑任务栏跑到右边去了_电脑没有声音怎么解决 电脑没有声音解决方法【详解】...

电脑没有声音怎么办? 这个话题在我耳边已经听到过了无数次了&#xff0c;处理故障也是由以前的摸索解决到现在可以快速的找到原因。但对于新手朋友来说可能不知道从哪里入手&#xff0c;对于电脑没有声音怎么办&#xff0c;也给不出一个对策&#xff0c;今天围绕这个问题&…

rabbitmq-java生产者消费者

【README】 本文使用java 连接rabbitmq&#xff0c;模拟生产者&#xff0c;消费者场景 【1】项目搭建 1&#xff09;maven项目&#xff0c;依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

Java 8新特性——default方法(defender方法)介绍

转载自 Java 8新特性——default方法&#xff08;defender方法&#xff09;介绍 我们都知道在Java语言的接口中只能定义方法名&#xff0c;而不能包含方法的具体实现代码。接口中定义的方法必须在接口的非抽象子类中实现。下面就是关于接口的一个例子&#xff1a; 1 2 3 4 5 6 …

对于高并发的理解及实践方案

目录01 如何理解高并发&#xff1f;02 高并发系统设计的目标是什么&#xff1f;2.1标题宏观目标高并发绝不意味着只追求高性能&#xff0c;这是很多人片面的理解。2.2 微观目标2.2.1 性能指标2.2.2 可用性指标2.2.3 可扩展性指标03 高并发的实践方案有哪些&#xff1f;3.1 通用…

ubuntu ifconfig_Ubuntu 设置固定 IP 最简单的方法!

因为鼠标共享软件需要使用网络连接&#xff0c;台式机的 IP 总是变化导致笔记本每次重启都要重新配置 IP&#xff0c;所以我给 ubuntu 设置了固定 IP&#xff0c;方法很简单&#xff0c;直接再系统设置里面配置就可以了。1. 查看默认网络配置打开系统「Setting」&#xff0c;打…

rabbitmq-发布订阅模式

【README】 本文po出 mq的发布订阅模式&#xff0c;及代码示例&#xff1b; 【1】intro 1&#xff09; 角色&#xff1a; 有4个角色&#xff0c; 包括 生产者&#xff0c;消费者&#xff0c; 交换机 exchange&#xff08;X&#xff09;&#xff0c; 队列&#xff1b; 2&#…

深入Java类型信息:RTTI和反射

转载自 「深入Java」类型信息&#xff1a;RTTI和反射 1.RTTI Run-Time Type Infomation 运行时类型信息 为什么需要RTTI&#xff1f; 越是优秀的面向对象设计&#xff0c;越是强调高内聚低耦合&#xff0c;正如依赖倒转原则所说&#xff1a;“无论是高层模块还是低层模块&#…

设计费收费标准2002修订_@设计师,2019景观园林设计收费标准,注意查收!

From&#xff1a;景观邦(ID&#xff1a;LA_bang)一、设计费量的定制&#xff1a;设计费在10万以上的(包括10万)省外工程方能承接。其工作内容有:景观概念规划设计、方案设计、初步设计、施工图设计、效果图绘制及多媒体制作等。二、设计费的取费标准&#xff1a;居住区、道路、…

rabbitmq-路由模式-routingkey

【README】 本文po出 rabbitmq路由模式&#xff1b; 【1】intro to 路由模式 特点1&#xff09;队列与交换机的绑定&#xff0c;不能是任意绑定&#xff0c; 而是指定一个路由key-routingkey&#xff1b; 特点2&#xff09;消息的发送方向在向 exchange-交换机发送消息时&…