springboot整合Dockerfile
一、 Dockerfile
-
Dockerfile是什么?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
-
Dockerfile的结构
-
Dockerfile文件常用指令
(1)FROM指定基础镜像
FROM指令初始化一个新的构建阶段,并为后续指令设置基础镜像。因此,有效的 Dockerfile 必须以 FROM 指令开头。该镜像可以是任何有效的镜像–很容易通过从Public Repositories(镜像仓库) 拉取一个镜像。
FROM类似于Java中extends关键字继承于基础镜像,即FROM之后的内容都依赖于此基础镜像。
格式:
FROM 镜像名称
FROM 镜像名称:<tag>
FROM 镜像名称@<digest>
注:
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 <port> [<port>…]
案例:
EXPOSE 9090
(6)VOLUME指定挂载点
使用指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可以共享给其它容器。
格式:
VOLUME 文件路径
案例:
VOLUME /tmp
(7)CMD
“CMD”的主要目的是为执行容器提供默认值。 这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,你还必须指定“ENTRYPOINT”指令。
二、 linux中配置远程访问docker
-
打开文件docker.service
[root@woniu abc]# vim /lib/systemd/system/docker.service
-
修改文件,在13行末尾添加(:set number显示行号)
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
-
重启docker
[root@woniu abc]# systemctl daemon-reload [root@woniu abc]# systemctl restart docker.service
-
测试2375端口是否有效
[root@woniu abc]# netstat -nplt|grep 2375
-
curl测试服务是否启动(ip写你自己虚拟机ip)
[root@woniu abc]# curl http://192.168.102.100:2375/info
-
开放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
-
idea安装配置docker插件
-
新建一个基本的springboot项目,目录结构和基本配置如下
-
使用maven里面的package生成jar包
-
在项目下创建文件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"]
-
编辑生成的镜像名称和绑定的ip以及端口号
-
点击Run开始运行,回到linux中就能查到docker容器了
-
同时也可以使用(http://192.168.102.100:9090/api/hello)访问了