- Docker File是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
1、使用本地命令构建镜像
1.1、上传项目jar
-
当前以部署一个普通的springboot项目为例。
- 实际开发一般情况都是docker配合分布式+微服务项目
- 第1步:上传一个springboot项目jar包到linux
- 第2步:将jar包上传linux服务器/usr/local/docker-app/springboot_demo/目录,在jar包所在目录创建名为Dockerfile的文件
- 实际开发一般情况都是docker配合分布式+微服务项目
-
创建目录命令
mkdir -p /usr/local/docker-app/springboot_demo/
- 将jar包上传linux服务器/usr/local/docker-app/springboot_demo/目录
1.2、下载JDK镜像
- 一般使用openjdk镜像。
# 查看有哪些openjdk的镜像可以下载(拉取)
docker search openjdk #(不指定版本就是下载最新的)
# 拉取镜像
docker pull openjdk
1.3、创建构建文件
- 要构建到镜像中的jar文件需要和buildFile处于同一个目录。
# 使用vi编辑器进入Dockerfile
vi Dockerfile
# Dockerfile里面要写的内容
FROM openjdk:8
ADD springboot_demo01-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
EXPOSE 8761
1.4、语法解释
#指定基础镜像,这个需要根据自己配置的仓库上的版本写
FROM openjdk:8
#指定源包,赋值到容器,前者是你的jar包,后面是别名
ADD spring_boot_demo01-1.0-SNAPSHOT.jar app.jar
#指定容器启动时执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
#对外端口
EXPOSE 8080
1.5、构建镜像
# 语法:
docker build -f 构建文件 -t 镜像名称:TAG 相对目录(如果是镜像构建当前目录就是点)
# 示例:
docker build -f /usr/local/docker-app/springboot_demo/buildFile -t springbootdemo:1.0 .
1.6、启动
docker run --name springbootdemo -p 8080:8080 -d springbootdemo:1.0
1.7、浏览器访问:
2、使用IDEA构建镜像
1、修改Docker服务配置
vim /usr/lib/systemd/system/docker.service
- 编辑/usr/lib/systemd/system/docker.service内容,在ExecStart变量末尾,增加下述配置:
-H unix:///var/run/docker.sock -H 0.0.0.0:2375
参数说明
-H unix:///var/run/docker.sock : 开启一个对外主机服务,使用docker.sock文件管理。
-H 0.0.0.0:2375 : 允许什么客户端IP访问当前服务,当前服务对外暴露的端口号是什么。端口可自定义。
2、重启docker服务
# 重新加载配置
systemctl daemon-reload
# 重新启动docker
systemctl restart docker
3、在IDEA项目POM依赖
- 新增plugin插件配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>springboot_demo:1.0</imageName> <!--指定镜像名称 仓库/镜像名:标签-->
<baseImage>openjdk:latest</baseImage> <!--指定基础镜像-->
<dockerHost>http://192.168.126.10:2375</dockerHost> <!-- 指定服务器仓库地址 -->
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <!-- 容器启动执行的命令 -->
<exposes>
<expose>8080</expose><!-- 发布端口 -->
</exposes>
<resources>
<resource>
<targetPath>/</targetPath> <!-- 指定要复制的目录路径,这里是当前目录 -->
<directory>${project.build.directory}</directory> <!-- 指定要复制的根目录,这里是target目录 -->
<include>${project.build.finalName}.jar</include> <!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->
</resource>
</resources>
</configuration>
</plugin>