失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ubuntu系统下安装docker并部署Springboot+mysql+redis

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

时间:2020-03-19 15:29:33

相关推荐

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

目录

安装DockerDocker常用命令构建mysql容器构建Redis容器构建Springboot应用镜像及容器(1)springboot使用maven将程序打成jar包,接着编写Dokerfile文件,[Dockerfile详细介绍](/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.”]

}

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实例

下载mysql镜像:

docker pull mysql:8.0.18运行镜像,设置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)

查看mysql容器是否运行:

docker ps

进入mysql容器:

docker exec -it mysql bash

在容器内登陆Mysql:

mysql -uroot -p123456

查看用户信息

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; //刷新数据库权限

退出mysql容器:

exit

构建Redis容器

与构建mysql容器类似

拉取镜像

docker pull redis:latest运行容器

docker run -itd --name redis -p 6379:6379 redis进入容器,检测redis容器是否运行

docker exec -it redis-test /bin/bash

redis-cli

构建Springboot应用镜像及容器

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

Dockerfile示例:

FROM java:8# 作者MAINTAINER Darren <754121262@>VOLUME /tmp# 将jar包添加到容器的/目录下并更名为user-server.jarADD 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.18Ubuntu Docker 安装docker 安装以及部署springboot项目和连接mysql完整的docker+springboot+mysql部署在docker中运行mysql实例docker运行spring boot 包镜像出现no main manifest attribute问题

如果觉得《ubuntu系统下安装docker并部署Springboot+mysql+redis》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。