docker部署springboot项目

 

1、项目结构

 

pom文件中加入:docker-maven-plugin

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.11</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>

 

 

 

 2、创建Dockerfile文件

在src/main/docker文件夹下创建用于生成镜像的文件

文件内容:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD kzng-thymeleaf.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

  文件解释:  

FROM为使用哪个镜像

VOLUME为挂载路径

ADD为复制文件到镜像中

RUN为初始化时运行的命令

ENV为设置环境变量

  ENTRYPOINT为启动时运行的命令  

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录

项目的 jar 文件作为 “app.jar” 添加到容器的

ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source

3、docker部署springboot项目

  • 在服务器创建mydocker文件夹,并且将上面写好的Dockerfile文件和打包好的springboot项目放到该文件夹下

 

 

  • 构建项目镜像

执行docker build命令,docker就会根据Dockerfile-kzng里你定义好的命令构建新的镜像

在该mydocker目录下,命名为kzng_app(注意后边有个点)

docker build -f Dockerfile-kzng -t kzng-app .

    

  其中-f代表选择的镜像文件Dockerfile-kzng,-t代表要构建的镜像的tag,.代表当前目录,也就是Dockerfile-kzng文件所在的目录。

  查看镜像是否创建成功 docker images

  

 

 

 注:容器时间和宿主时间会不一致

  查看容器的时间:

docker exec [containerId] date

创建容器时注意与宿主机时间保持一致(-v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime)

docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -d -p 5050:5050 kzng-app

此方法只修改了容器时间,但启动的服务仍然还是差8小时 ,最好的方法直接在Dockfile文件中修改时间、时区

4、启动项目

docker run -d -p 80:8888 kzng-app
-d参数是让容器后台运行 
-p 是做端口映射,此时将服务器中的80端口映射到容器中的80(项目中端口配置的是80)端口 建议应用系统设置一致

  当出现:docker: Error response from daemon: driver failed programming external connectivity on endpoint epic_kowalevski时重启docker(systemctl restart docker)

 

 5、结尾

当docker运行部署好后,若只能在服务器端访问,而不能在其它客户端机器上访问时,即(Linux 下 Docker 端口映射到宿主机后 外部无法访问对应宿主机端口)

需要进行如下配置:

解决办法:

# vi /etc/sysctl.conf

或者

# vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:

net.ipv4.ip_forward=1

重启network服务

# systemctl restart network

查看是否修改成功

# sysctl net.ipv4.ip_forward

如果返回为“net.ipv4.ip_forward = 1”则表示成功了

 

posted @ 2020-11-10 15:24  过氧化氢  阅读(871)  评论(0编辑  收藏  举报