spring boot+SQL Server 在CentOS7系统docker下的部署详解

最近有个项目在Windows下部署成功,听闻docker技术挺火,又想学学lunux,所以通过将项目部署在linux下的docker上来实践一下。下面是我的部署步骤及遇到的坑,分享出来避免别人也来踏坑。

1.安装visualbox虚拟机,这个基本上网上都有教程,恕不繁述。

2.下载一个CentOs的镜像文件,去官网下载最新的即可,我下载的是64位版本的。

3.在visualbox里面新建一个操作系统,硬盘选项里面选择这个镜像文件,启动后会自动开始安装,注意:本机bios要打开虚拟化设置,不然安装选项里面没有64位的选项,另外按下visualbox启动按钮后,提示失败提示框后,可以选择无界面启动,等待几秒钟后再点击显示就可以了,另外 需要把硬盘划分足够大!需要把硬盘划分足够大!需要把硬盘划分足够大!,重要的事情说三遍,不然你以后想扩充就很费事了,一般分配15-20G应该足够了。

4.系统装好后,首先要装docker,这方面百度上有很多介绍,大家可以对照安装,因为linux操作80%要使用字符命令方式,所以建议在Windows上安装一个smarTTY远程终端,注意:这里有个细节需要注意,linux配置好固定ip地址的同时需要将DNS服务器的地址也要配置好,不然,CentOs能和宿主Windows主机ping通,但是无法上网,dns的地址可以在宿主Windows主机上通过ipconfig命令获取,经过这一步,在宿主Windows上通过smarTTy与虚拟机的CentOs架起了一座桥梁,以后我们的所有操作基本都是在smarTTy上来完成的。smarTTy可以同时打开多个窗口,这样在后面同时对docker、sqlserver、linux操作时就可以大显身手了·。

cd /etc/sysconfig/network-scripts/
vi ifcfg-enp0s3 

service network restart
​

重启一下网络 ,ping www.baidu.com 验证一下。

5.CentOs装上jdk,我从Oracle上下载总是提示需要登录,嫌麻烦,我直接在百度了一个jdk,这是下载地址http://qunying.gxkjbg.com:8080/201704/tools/jdk-linux-x64.rpm,怎么安装可以百度,不繁述。安装是否成功,通过 java -version 查看。

6.安装docker,yum -y install docker-io,我这里提示没有发现yum,需要先安装yum,照样百度。

7.在docker里面安装sqlserver,这里我安装的是sqlserver2017lastest版本。

8.在CentOs里面安装maven,安装结束后需要在 etc/profile里面配置环境变量,我的配置如下

export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export M3_HOME=/usr/local/maven3
export PATH=$JAVA_HOME/bin:$M3_HOME/bin:$PATH

通过mvn -v来验证是否安装成功,安装maven的目的是用来对springboot进行编译、打包、生成docker镜像。

9.将项目文件夹拷贝到CentOs里面,我直接用smarTTy自带的upload a dictionary 工具,将宿主Windows上的springboot项目文件夹上传到usr/local/mySpringBoot文件夹下,然后将项目里的pom.xml进行修改,如下,这是添加docker的插件和镜像前缀,需要在src/main新建一个docker 文件夹,里面新建一个Dockerfile文件, 保存后,开始执行 mvn package

pom.xm里面的-----------------------------------

<!-- docker插件 -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                 <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>

    <properties>     
         <docker.image.prefix>springboot</docker.image.prefix>
    </properties>

dockfile里面的---------------------------------------------

FROM java:8
VOLUME /tmp
ADD oasys-1.5.6.RELEASE.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

这样代表编译生成了我所需要的程序jar文件。通过java -jar xxx-1.5.6.RELEASE.jar ,启动项目看看是否成功,当然我的项目启动不会成功,因为没有sqlserver。

10.现在需要构建springboot的docker镜像了,输入mvn package docker:build开始构建。构建成功后,如下图

这时候可以在docker 里面通过images 看看是否存在了这个镜像,如果存在,你已经成功了一半,加油!!!

11.开始sqlserver数据库的导入工作了,一般docker里面的sqlserver没有什么类似于management studio的图形界面进行操作,但是咱可以通过宿主windows里面的management Studio来远程连接这个docker里面的sqlserver,具体执行一条docker run的命令把sqlserver先跑了起来,

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=myPassword@007' -p 1433:1433 -v sqlvolume:/var/opt/mssql --name mssql -d mcr.microsoft.com/mssql/server:2017-latest

看着比较复杂,你可以一段一段的分开看,重点说说 -p 这个是端口映射,前面的1433是centOs的端口,后面的1433是docker里面sqlserver的端口,端口映射的目地是让远程可以访问这个docker里面的sqlserver,-v 是为docker加一个卷,卷名是 sqlvolume 映射到容器 里的/var/opt/mssql 目录 ,这个目录很重要,将来备份的mdf、ldf都要放到这个目录下,它可不是centOs下的目录,是容器mssql里面的目录,不要混淆了。

在windows里面通过managment studio 就可以远程访问他了

12.现在你可以通过studio操作这个数据库了,当然也可以在docker里面通过qlcmd的命令执行sql指令,因为我的项目数据库原来就在windows上,在重新在docker里面建数据库建表太麻烦(80多张表),所以想用投机取巧的办法直接将mdf、ldf文件放到linux里面,然后导入到dokcer的sqlserver里面,还是通过smarTTy的upload file 将这两个文件放入到/usr/local/sqlBackup里面了,接下来是关键,首先将这两个文件拷贝到docker的这个sqlserver容器里面去,通过指令

docker cp /usr/local/sqlBackup/xxx.ldf d8685e6bb2ab:/usr/xxx.ldf

docker cp /usr/local/sqlBackup/xxx.mdf  d8685e6bb2ab:/usr/xxx.mdf 

d8685e6bb2ab:mssql的容器ID

/usr:放置文件的容器目录,拷贝完成后,可以通过bash,进入看看,注意不能直接往var目录下拷贝,不知为何。

运行这个镜像,然后进入bash,最后执行sqlcmd,如图1,2,3,最后进入命令行模式

现在执行导入mdf、ldf文件命令

不出意外就会将数据库还原成功了。恭喜你,已经完成90%了,再接再厉!!!

13.将 项目容器运行起来,docker run -p 8080:8080 -t  springboot/xxx,这样应该能启动,但是会报错,因为没有连接上sqlserver,sqlserver运行在另外一个容器里面(mssql),两个容器之间没有沟通的桥梁,这时候参数--net=host派上用场了,通过设置这个参数,springboot/xxx容器不会配置自己的网络,直接拿宿主,也就是centOs的网络来用,这样springboot的数据库连接串指定localhost就可以连接mssql容器的sqlserver了。最后的正确启动命令是 docker run -it --net=host   -t springboot/xxx ,这时可以在Windows上打开浏览器访问了,如果没有响应,记着关闭防火墙 

systemctl start firewalld

 

总结:至此已经实现了最初的目的,我感觉最后这几步需要反复的试验,有些错误需要百度查找原因,总之,有志者事竟成,当你义无反顾的朝着目标努力时,胜利的曙光就在你眼前

另附sqlserver的docker部署官方文档:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-configure-docker?view=sql-server-2017#copy-files-from-a-container

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亮亮的爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值