赞
踩
最近有个项目在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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。