版权声明:版权属 z_xuewen 所有 ©胖子牛逼 https://blog.csdn.net/z_xuewen/article/details/81251743
前言:使用Docker是好处就是一次构建,多处运行,构建完毕的镜像直接拉取至新的服务器直接运行即可。可以保证运行环境完全一致,避免了环境的细节导致程序运行问题。
想要使用Docker,必须让原本的maven和springboot项目加入Docker支持。其配置可以按如下步骤:
- 在 pox.xml 中添加 Docker 镜像名。
<properties> <docker.image.prefix>springboot</docker.image.prefix> </properties>
【注意:后面如果使用docker Hub仓库的话,最好镜像名是docker hub的账户名,不然push和pull都会失败。当然也可以使用命令对镜像名进行增加账户名】
- 在 plugins 中添加 Docker 构建插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin --> </plugins> </build>
- 在 src/main 中创建 docker 目录,在 docker 目录下创建 Dockerfile 文件,主要用于构建说明
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD spring-boot-docker-1.0.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
【注:第一个jar包名需要写本来maven打包出来的jar包名】
以上三步即可让springboot项目支持Docker
接下来是安装Docker环境,方法参考 Centos安装Docker和Maven 。这里就不详细说明了
使用 Docker 构建 springboot 项目
将 整个项目拷贝到具有docker环境的服务器下,进入项目路径根目录
mvn package docker:build
构建成功即可
Docker的使用命令
docker images 【查看构建好的镜像】
docker run -p 8080:8080 -t springboot/spring-boot-docker 【运行镜像】
docker ps 【查看正在运行的镜像,容器列表】
docker stop 容器名 【停住运行镜像】
使用Docker Hub仓库
到 https://hub.docker.com 注册帐号
docker login 【登录docker hub, push和pull前必须先登录否则没有权限】
登录成功后就可以推送和拉取镜像
docker push zxw/springboot 【推送镜像至云仓库,注:镜像名一定要有帐号信息即帐号名】
若本地镜像无帐号信息则会报如下错误:denied: requested access to the resource is denied
【将本地镜像名增加帐号信息】docker tag springboot/spring-boot-docker zxw/springboot
在新的服务器环境,直接拉取镜像运行即可:
docker pull zxw/springboot
拉取成功参考上面的运行命令即可!