Docker部署Mysql8.0.21以及SpringBoot部署,使用Dockerfile生成镜像

Step1:拉取mysql8.0.21镜像

docker pull mysql:8.0.21


查看所有docker镜像

docker images


 Docker删除镜像

docker rmi +镜像ID

Step2:运行mysql镜像

docker run --name mysql8 -p 3307:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.21 -d

参数详解:

-d 后台运行

--name 给容器起名,我用的mysql8 名字,这里自己可以随便取

-p 端口映射 3307(主机端口):3306(容器端口),也可以使用3306,我用3307是因为我已经在linux里面安装了mysql,3306端口被占用了。

-v  /data/mysql:/var/lib/mysql 将主机当前目录下的/data/mysql目录挂载到容器的/var/lib/mysql

-e MYSQL_ROOT_PASSWORD=123456 设置环境变量,设置密码

mysql:8.0.21 使用的镜像

进入容器

docker exec -it mysql8 /bin/bash

mysql8 是自己的容器名称,写你自己的名称。 

如果出现错误,"docker exec" requires at least 2 arguments.See 'docker exec --help'.

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...],Run a command in a running container
尝试一下先开启,在进入。

docker start mysql8
docker exec -it mysql8 /bin/bash 

到这里,成功进入!!!部署成功。


查询容器

docker ps -a

删除容器

docker  rm 容器ID

如果容器正在运行不能删除,就先停止,在删除。

docker stop 容器ID

docker rm 容器ID 

退出容器


Step3:本地机测试

端口号我在上面是映射在linux的3307,所以这里要连接3307端口。

 连接成功!

Step4:Dockerfile文件编写

在Jar包同级目录下创建Dockerfile文件,不知道这么打包Jar包放到linux的见这篇文章SpringBoot打包jar包。如何下载JDk17请参考这一篇文章安装JDK

FROM centos:7
LABEL version="1.0"
RUN mkdir -p /usr/local/java && mkdir -p /soft_pros/java
ADD jdk-17_linux-x64_bin.tar.gz /usr/local/java/
ENV JAVA_HOME=/usr/local/java/jdk-17.0.11
ENV PATH=$JAVA_HOME/bin:$PATH
WORKDIR /soft_pros/java/
COPY big_event-1.0-SNAPSHOT.jar ./big_event.jar
COPY application.yml ./application.yml
EXPOSE  8080
ENTRYPOINT ["java", "-jar", "big_event.jar"]

Dockerfile详解:

FROM centos:7 基于CentOS7为基础镜像

RUN mkdir -p /usr/local/java && mkdir -p /soft_pros/java Run类似于在CentOS7中执行命令,linux语法是怎么样就可以怎么写,而且每一次运行,docker就会在上面新建一层,为了不让docker过于庞大,可以使用&&将两行命令结合在一起。如果是多行命令结合在一起,可以使用&& \ 换行继续写,结构更整洁。

ADD jdk-17_linux-x64_bin.tar.gz /usr/local/java/ 使用ADD和COPY都可以完成,只是ADD命令会自动解压到容器中,COPY估计还需要写一些别的,为了方便我用的ADD。jdk-17_linux-x64_bin.tar.gz这是在我上下文路径中存在的文件,及Dockerfile同级目录下文件,所以可以直接写文件名,放到我的容器的/usr/local/java/目录下

ENV JAVA_HOME=/usr/local/java/jdk-17.0.11
ENV PATH=$JAVA_HOME/bin:$PATH 这两行是为了配置环境变量,和在linux里面安装jdk是一样的

WORKDIR /soft_pros/java/ 指定工作路径,下面的操作都是在这一路径下。

COPY big_event-1.0-SNAPSHOT.jar ./big_event.jar COPY文件到容器里

COPY application.yml ./application.yml 把数据库配置文件带到容器里去
EXPOSE 8080 容器向外暴露的端口
ENTRYPOINT ["java", "-jar", "big_event.jar"]  和CMD 指令类似,但时不会被 docker run 的命令行参数指定的指令所覆盖。

 使用Dockerfile创建镜像时,docker build 命令会根据用户的指定知道上下文路径,会将路径下的所有内容打包,然后上传给 Docker 引擎。所以,在这里我一般会把文件放到和Dockerfile的同级目录下。

Step5:数据库信息配置

在文件同级目录中有一个application.yml配置了关于数据库容器的一些信息。

注:在这里我一开始使用的是虚拟机的ip地址加暴露出来的3307端口,但是容器隔离了,导致连接不上,最后我使用的Docker的桥接网络才成功的。这里的mysql8是的mysql容器名称,3306端口就是mysql8容器的端口,不是主机暴露出来的3307!!

Step6:构建docker镜像

docker build -t big_event:1.0 .        

#big_event:1.0 即镜像的名称和版本号

 注:命令后面存在一个.    即上文提到的用户指定的上下文路径

现在可以看到我们的big_event镜像就创建好了。

现在可以用我们的镜像建立容器跑起来了。

docker run --name big_event -p 8081:8080 -v /data/big_config:/usr/local/config -d big_event:1.0

参数详解:

-d 后台运行

--name big_event 给容器起名,

-p 端口映射 8081(主机端口):8080(容器端口)

-v  /data/big_config:/usr/local/config 将主机当前目录下的/data/big_config目录挂载到容器的/usr/local/config

big_event:1.0 使用的镜像

Step7:Docker桥接网络

容器之间的通信好像有好几种,有兴趣的可以自己去了解一下哦。

1、先查看一下docker网络有哪些

docker network ls

2、创建桥接网络 big_mysql 名字自己随意取

docker network create  big_mysql

 3、把容器连接到这个网络里来 ,下面的mysql8 、big_event是我的容器名

 docker network connect big_mysql mysql8
 docker network connect big_mysql big_event

4、检查一下,是否连接成功

docker network inspect big_mysql

好了,已成功!

运行起来后,想看具体情况的话,可以查看docker的日志 

docker logs 容器ID 


一些错误解决:

如果日志文件出现这种,就是数据库连接问题了,查一下你的数据库和jar包的容器连接没有。还有些其他问题,可能是防火墙端口没开放等等问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值