同步操作将从 JustryDeng/notebook 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在本地idea上开发java代码,通过idea的docker插件,将代码部署至远程服务器上
进行示例安装教程见[CentOS 7安装docker、docker-compose](./[04]CentOS 7安装docker、docker-compose.md)
查看运行的docker版本
docker -v
位置:
File
|Settings
|Plugins
|Docker
在启动指令上增加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
,表示允许任何ip访问2375端口
# 版本不一样,可能docker.service文件的位置不一样
# 可使用指令locate docker.service进行查找,如果查到到多个,选一个最像的进行修改即可(不放心的话,可以全部都修改)
vim /lib/systemd/system/docker.service
# 注:-H unix:///var/run/docker.sock可以试情况加不加,如下图中已经指定了运行时为containerd那么就可以不加unix:///var/run/docker.sock
# 如果没指定运行时,那么需要加unix:///var/run/docker.sock
# 简单的,修改配置后,重启docker后,使用docker ps指令验证一下,如果执行没报错说明可以不加unix:///var/run/docker.sock,如果报错了,则说明需要加上
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重启docker
# 重新加载配置文件
systemctl daemon-reload
# 重启服务
systemctl restart docker.service
# 测试docker正常(若报错,请vim /lib/systemd/system/docker.service,去掉或加上-H unix:///var/run/docker.sock再试一试)
docker ps
确保2375端口已开放
# 开放指定端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
# 重新载入(重启)防火墙
firewall-cmd --reload
# 查询指定端口是否开放
firewall-cmd --zone=public --query-port=2375/tcp
位置:
File
|Settings
|Build,Execution,Deployment
|Docker
点击OK后,在Services里面就能看到对应的docker了(注:有的版本的idea,docker信息不在Services里看,而是专门有个tab页给予呈现)
提示:如果要编写的Dcodkerfile过于复杂,那么建议使用方式二
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>build-image</id>
<!-- 设置只有当mvn install时,才激活当前插件的build与push功能 -->
<phase>install</phase>
<goals>
<goal>removeImage</goal>
<goal>build</goal>
<!-- 需要推送镜像至docker私服时,开启此goal -->
<!--
角色&流程:
① removeImage/build ② push ③
windows(idea所在机器) ==================> 执行docker api的机器 ==================> docker registry(docker私服)
说明:
removeImage: 将②上, 同标签名+同镜像名的旧镜像移除
build: 将①上的代码构建成镜像到②上, 执行完build后在②docker images可以看到当前镜像
push:将②上的镜像推送至③
-->
<!-- <goal>push</goal> -->
</goals>
</execution>
</executions>
<configuration>
<!-- 指定生成的镜像名(注:如果需要上传到私有仓库,那么格式一般为: {私有仓库地址ip:port}/{imageName}:${标签}) -->
<!--
注:如果你的docker私有仓库需要账号密码的话,那么还需要在maven的settings.xml中的<servers>标签中指定账号密码,如:
<server>
<id>aliyun-justrydeng-harbor</id>
<username>admin</username>
<password>dengshuai</password>
</server>
然后这里使用serverId进行引用
<serverId>aliyun-justrydeng-harbor</serverId>
<imageName>47.105.39.189:8635/library/${project.artifactId}:${project.version}</imageName>
-->
<imageName>${project.artifactId}:${project.version}</imageName>
<!-- 指定标签-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 指定远程docker机器的地址和ip(这里指定的host,即前面角色①②③中的②) -->
<dockerHost>http://192.168.44.137:2375</dockerHost>
<!-- 这复制jar包到 ocker容器指定目录配置 -->
<resources>
<resource>
<!-- 指定需要复制的根目录. ${project.build.directory}即target目录 -->
<directory>${project.build.directory}</directory>
<!-- 指定需要directory中需要复制进docker的文件 -->
<include>${project.build.finalName}.jar</include>
<!-- 指定复制到docker的哪个文件夹 -->
<targetPath>/data</targetPath>
</resource>
</resources>
<!--
直接在这里完成Dockerfile的功能(注:如果要编写的Dcodkerfile过于复杂,那么建议使用方式二)
-->
<!-- 基础镜像jdk 1.8 -->
<baseImage>openjdk:8-jdk</baseImage>
<!-- 制作者信息 -->
<maintainer>13548417409@163.com</maintainer>
<!-- 设置 启动容器时,切换到容器中的指定目录,并执行执行 -->
<workdir>/data</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
</configuration>
</plugin>
pom中插件的配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>build-image</id>
<!-- 设置只有当mvn install时,才激活当前插件的build与push功能 -->
<phase>install</phase>
<goals>
<goal>removeImage</goal>
<goal>build</goal>
<!-- 需要推送镜像至docker私服时,开启此goal -->
<!--
角色&流程:
① removeImage/build ② push ③
windows(idea所在机器) ==================> 执行docker api的机器 ==================> docker registry(docker私服)
说明:
removeImage: 将②上, 同标签名+同镜像名的旧镜像移除
build: 将①上的代码构建成镜像到②上, 执行完build后在②docker images可以看到当前镜像
push:将②上的镜像推送至③
-->
<!-- <goal>push</goal> -->
</goals>
</execution>
</executions>
<configuration>
<!-- 指定生成的镜像名(注:如果需要上传到私有仓库,那么格式一般为: {私有仓库地址ip:port}/{imageName}:${标签}) -->
<!--
注:如果你的docker私有仓库需要账号密码的话,那么还需要在maven的settings.xml中的<servers>标签中指定账号密码,如:
<server>
<id>aliyun-justrydeng-harbor</id>
<username>admin</username>
<password>dengshuai</password>
</server>
然后这里使用serverId进行引用
<serverId>aliyun-justrydeng-harbor</serverId>
<imageName>47.105.39.189:8635/library/${project.artifactId}:${project.version}</imageName>
-->
<imageName>${project.artifactId}:${project.version}</imageName>
<!-- 指定标签-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 指定远程docker机器的地址和ip(这里指定的host,即前面角色①②③中的②) -->
<dockerHost>http://192.168.44.137:2375</dockerHost>
<!-- 这复制jar包到 ocker容器指定目录配置 -->
<resources>
<resource>
<!-- 指定需要复制的根目录. ${project.build.directory}即target目录 -->
<directory>${project.build.directory}</directory>
<!-- 指定需要directory中需要复制进docker的文件 -->
<include>${project.build.finalName}.jar</include>
<!-- 指定复制到docker的哪个文件夹 -->
<targetPath>/data</targetPath>
</resource>
</resources>
<!-- 指定Dockerfile文件所在目录 -->
<dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
</configuration>
</plugin>
在dockerDirectory指定的目录(我们这里即${project.basedir}/src/main/resources
)下创建Dockerfile
FROM openjdk:8-jdk
MAINTAINER JustryDeng<13548417409@163.com>
ADD /data/*.jar /app.jar
ENTRYPOINT [ "java", "-jar", "/app.jar" ]
提示:在上面的第三步,我们指定的是当进行maven install时,会触发docker-maven-plugin插件
进行mvn install,通过日志可以看到,install之后,docker-maven-plugin就开始执行了
验证一下,此步完成后,进入远程服务器查看docker镜像:
说明:openjdk是依赖的基础镜像,lastest标签是自动对最新版镜像的记录,1.0.1则是本人刚才通过执行mvn install触发激活docker-maven-plugin插件生成的镜像;1.0.0是之前本人测试时生成的镜像
由此可见,成功了!
验证一下,登录远程服务器,查看容器
可见,成功了!
我们的java代码是
/**
* start-class
*
* @author JustryDeng
* @since 1.0.0
*/
@Slf4j
@RestController
@SpringBootApplication
public class DeployDockerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(DeployDockerDemoApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
final String info = "hello" + LocalDateTime.now();
log.info(info);
return info;
}
}
在服务器上测试访问curl localhost:8080/hello
:
由此可见,成功了!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。