springboot整合Dockerfile

springboot整合Dockerfile

一、 Dockerfile

  1. Dockerfile是什么?

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

  2. Dockerfile的结构
    springboot整合Dockerfile_第1张图片

  3. Dockerfile文件常用指令

    (1)FROM指定基础镜像

    ​ FROM指令初始化一个新的构建阶段,并为后续指令设置基础镜像。因此,有效的 Dockerfile 必须以 FROM 指令开头。该镜像可以是任何有效的镜像–很容易通过从Public Repositories(镜像仓库) 拉取一个镜像。

    ​ FROM类似于Java中extends关键字继承于基础镜像,即FROM之后的内容都依赖于此基础镜像。

    格式:
      FROM 镜像名称
      FROM 镜像名称:
      FROM 镜像名称@
    注:
      tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像

    案例:

    FROM mysql:5.6
    
    FROM mysql
    

    (2)MAINTAINER指定维护者信息

    ​ 用于指定维护者的信息,用于为Dockerfile署名。

    格式:
      MAINTAINER 名字

    案例:

    MAINTAINER xzx
    

    (3)ADD复制文件

    ​ 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。

    格式:

    ADD src … dest
      ADD [“src”,… “dest”] 用于支持包含空格的路径

    从src目录复制文件到容器的dest。

    案例:

    ADD target/springboot-dockerfile-1.0-SNAPSHOT.jar /app.jar
    

    将本机target/springboot-dockerfile-1.0-SNAPSHOT.jar文件拷贝到容器内**/app.jar**

    (4)ENTRYPOINT入口点

    ENTRYPOINT 允许您配置将作为可执行文件运行的容器。用ENTRYPOINT的exec形式来设置相当稳定的默认命令和参数,然后使用CMD的任何一种形式来设置更可能更改的其他默认值。

    ​ 注: 一般在制作一些执行就关闭的容器中会使用。

    格式:

    ENTRYPOINT [“executable”, “param1”, “param2”] (可执行文件, 优先)
      ENTRYPOINT command param1 param2 (shell内部命令)

    ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

    案例:

    ENTRYPOINT ["java","-jar","/app.jar"]
    

    (5)EXPOSE指定于暴露的端口

    格式:

    EXPOSE […]

    案例:

    EXPOSE 9090
    

    (6)VOLUME指定挂载点

    ​ 使用指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可以共享给其它容器。

    格式:

    VOLUME 文件路径

    案例:

    VOLUME /tmp
    

    (7)CMD

    ​ “CMD”的主要目的是为执行容器提供默认值。 这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,你还必须指定“ENTRYPOINT”指令。

二、 linux中配置远程访问docker

  1. 打开文件docker.service

    [root@woniu abc]# vim /lib/systemd/system/docker.service
    
  2. 修改文件,在13行末尾添加(:set number显示行号)

    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    

springboot整合Dockerfile_第2张图片

  1. 重启docker

    [root@woniu abc]# systemctl daemon-reload
    [root@woniu abc]# systemctl restart docker.service
    
  2. 测试2375端口是否有效

    [root@woniu abc]# netstat -nplt|grep 2375
    
  3. curl测试服务是否启动(ip写你自己虚拟机ip)

    [root@woniu abc]# curl http://192.168.102.100:2375/info
    
  4. 开放2375端口(直接把防火墙关了也行,二选一)

    [root@woniu abc]# firewall-cmd --add-port=2375/tcp --permanent
    success
    [root@woniu abc]# firewall-cmd --reload
    success
    [root@woniu abc]# firewall-cmd --list-ports
    3306/tcp 2375/tcp
    
    #关闭防火墙
    [root@woniu abc]# service firewalld stop
    [root@woniu abc]# systemctl disable firewalld
    

三、springboot整合Dockerfile

  1. idea安装配置docker插件
    springboot整合Dockerfile_第3张图片

  2. 新建一个基本的springboot项目,目录结构和基本配置如下

    springboot整合Dockerfile_第4张图片
    springboot整合Dockerfile_第5张图片
    springboot整合Dockerfile_第6张图片
    springboot整合Dockerfile_第7张图片

  3. 使用maven里面的package生成jar包

    springboot整合Dockerfile_第8张图片

  4. 在项目下创建文件Dockerfile,开始编写该文件(这个Dockerfile的作用是创建一个基于anapsix/alpine-java镜像的Docker容器,该容器会运行一个监听在9090端口的Java应用程序。该应用程序的可执行文件是hello-docker-1.0-SNAPSHOT.jar,它会被复制到容器内的/app.jar路径下,并在容器启动时通过java -jar /app.jar命令来运行)

    FROM anapsix/alpine-java 
    MAINTAINER xzx 
    EXPOSE 9090 
    ADD target/hello-docker-1.0-SNAPSHOT.jar /app.jar 
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    springboot整合Dockerfile_第9张图片

  5. 编辑生成的镜像名称和绑定的ip以及端口号

    springboot整合Dockerfile_第10张图片

  6. 点击Run开始运行,回到linux中就能查到docker容器了

    springboot整合Dockerfile_第11张图片
    在这里插入图片描述

  7. 同时也可以使用(http://192.168.102.100:9090/api/hello)访问了

    springboot整合Dockerfile_第12张图片

你可能感兴趣的:(spring,boot,后端,java)