关于docker的安装,网上有许多教程,这里就不在赘述,windows家庭版请使用dockertool,在linux上安装docker比windows要简单的多,本次部署的springboot项目会使用mysql,环境为centos7,本文记录了sql文件导入docker的mysql的方法
在docker上部署springboot项目
首先在springboot项目的pom.xml文件中添加Docker镜像名称:
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
在plugin中添加docker构建插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
接着使用maven install(可以使用maven命令行,也可以使用ide自带的maven)打包,创建Dockerfile文件,Dockerfile相当于说明书,告诉docker容器应该如何运行项目,规定项目运行的一些规则:
FROM java:8
VOLUME /tmp
ADD movie-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
FROM:表示基础镜像,即运行环境
VOLUME:一个特别指定的目录,用于存储数据,该命令的作用是在/var/lib/docker创建一个名为tmp的目录,在开启redis服务时,需要特别指定redis的数据存储在哪个文件夹,此时这个命令就十分有用
ADD:拷贝文件并且重命名
EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员告诉容器布署人员容器应该映射哪个端口给外界
ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd
的系统属性指向/dev/urandom
作为 ENTRYPOINT
创建docker文件夹,将jar包与Dockerfile移动到该文件夹,进入该文件夹,运行命令:
docker build -t docker .
此时会将该项目构建成一个image(镜像),运行命令:
docker images
可以查看对应的镜像信息:
运行镜像:
docker run -p 8080:8080 -d docker
-p表示端口映射,冒号左边为docker容器外的端口号,右边为容器内的端口号,-d表示后台运行 docker表示REPOSITORY的值
运行命令:
docker ps
可以查看运行的镜像:
至此,springboot项目部署完毕,由于我的项目需要使用mysql,即使我们在本机上安装了mysql,springboot项目是无法访问的,因为docker中运行的项目与本机是两套完全不同的环境,因此如果想要访问,可以在docker中部署mysql,也可以将项目的jdbc的url中的localhost改为本机的IP地址,本文采取第一种方式
在docker上安装mysql
首先在docker上安装mysql:
dockers pull mysql
运行命令:
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
在后台启动mysql,并将密码设置为123456,如果我们本机上运行了mysql,可以将上述的-p参数改为3307:3306,或是关掉本地的mysql
查看容器的ID:
docker ps
记下容器的ID号
接下来将sql文件导入到docker的数据库,将movie.sql拷贝到容器的root目录中:
docker cp movie.sql 21db7dd6618e:\root
进入到运行容器的bash
docker exec -it 21db7dd6618e bash
在docker的mysql中创建movie数据库,
我的movie.sql放在root目录下,在root目录下运行命令:
mysql -uroot -p123456 -D movie<movie.sql
在centos7下数据库可能无法显式中文,使用下列命令:
mysql>set names utf8;
获得mysql的IP地址:
docker inspect 21db7dd6618e
将springboot中的JDBC更改为上述IP地址即可