在docker上部署springboot项目

 

关于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地址即可

展开阅读全文

没有更多推荐了,返回首页