前言: centos + docker + jdk1.8 + idea 亲测有效!!!
1.demo项目
@SpringBootApplication
public class DockerApplication {
public static void main(String[] args) {
SpringApplication.run(DockerApplication.class, args);
}
}
@RestController
public class DockerController {
@RequestMapping("/")
public String index() {
return "Hello Docker!";
}
}
<spring.boot.version>2.1.0.RELEASE</spring.boot.version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
启动项目,访问url 成功即可!!!
2.docker 相关文件 在pom.xml中加入
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<dockerHost>http://192.168.1.12:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.outputDirectory}</directory>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
注意这里面 imageName 标签中的名字必须都为小写!!!如果有大写会报错!!
Dockerfile
# 基础镜像使用java
FROM openjdk:8-jdk-alpine
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD projecttodocker-1.0-SNAPSHOT.jar app.jar
# 运行jar包
RUN /bin/sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
projecttodocker-1.0-SNAPSHOT.jar 为jar后的文件,根据自己的项目修改
打包指令 在new goal 中输入 保存后运行
clean package -DskipTests docker:build
如果发生错误,显示的是连接问题,那么我们需要手动打开docker对外端口 vim /lib/systemd/system/docker.service 修改一下代码
#原代码
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
#改为
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
保存后,再执行
# 重新加载守护进程配置
systemctl daemon-reload
# 重启 docker 服务
systemctl restart docker.service
如果上述指令没成功,请检查docker.service文件,一定有代码错误的地方。 如果是阿里云或者腾讯云,一定要记得在安全控制台中开放相应端口!!!
再次执行导包指令,看到success则为成功。 进入docker中 查看
docker images #查看镜像
#启动服务
docker run -itd --name 容器名 -p 8080:8080 镜像名:版本号
#查看容器是否启动
docker ps
正常启动后,在浏览器输入网址 即可查看
附录: 小编在使用中,遇到了很多问题。如果问题实在无法解决的时候,可以采用jar包上传服务器的方法进行。下面我就简单的给大家说一下: 1.利用idea打包生成jar包 (方法同上) 将红框中的文件上传到服务器中 建议目录为 /opt/docker/jar ,两个文件必须在同一级目录下
#cd 到文件夹下 执行
docker build -t name:tag .
例如: docker build -t project:v1.0 . #一定要在结尾加这个点!!
执行成功后,我们可以查看docker镜像,后续步骤同上。
经验之谈: 现在网上的解决方案,都是各式搬运,各种代码缺失,各种错误漏洞,简直是误人子弟。建议各位同学在学习过程中,多看几个文章,多试几个例子。取长补短,形成自己的解决方案。
参考文献: https://blog.csdn.net/appleyk/article/details/87367281 https://blog.csdn.net/ic_esnow/article/details/113284475 https://blog.csdn.net/qq_31104725/article/details/107319320?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1.control&spm=1001.2101.3001.4242
|