springboot + dockerfile-maven-plugin 整合

1,796 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

整合步骤 (maven + springboot)

1. 在maven的pom.xml文件中增加配置

	<properties>
		<docker.image.prefix>xd</docker.image.prefix>
	</properties>
	
	<build>
		<finalName>docker-demo</finalName>
	    <plugins>
	        <plugin>
	            <groupId>com.spotify</groupId>
	            <artifactId>dockerfile-maven-plugin</artifactId>
	            <version>1.3.6</version>
	            <configuration>
	                <repository>${docker.image.prefix}/${project.artifactId}</repository>
	                <buildArgs>
	                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
	                </buildArgs>
	            </configuration>
	        </plugin>
	    </plugins>
	</build>

配置讲解

​ Spotify 的 docker-maven-plugin 插件是用maven插件方式构建docker镜像的。project.build.finalName产出物名称,缺省为{project.build.finalName}** 产出物名称,缺省为**{project.artifactId}-${project.version}

2. 打包SpringCloud镜像并上传私有仓库并部署

什么是dockerFile

​ 什么是Dockerfile : 由一系列命令和参数构成的脚本,这些命令应用于基础镜像, 最终创建一个新的镜像

​ 创建 Dockerfile 添加内容 (默认是根目录, 可以修改为src/main/docker/Dockerfile,如果修则需要制定路径)

​ 下面是dockfile的内容:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

参数讲解:

  • FROM : 需要一个基础镜像,可以是公共的或者是私有的, 后续构建会基于此镜像,如果同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令

  • VOLUME 配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录

  • ARG:设置编译镜像时加入的参数, ENV 是设置容器的环境变量

  • COPY : 只支持将本地文件复制到容器 ,还有个ADD更强大但复杂点

  • ENTRYPOINT:容器启动时执行的命令

  • EXPOSE 8080:暴露镜像端口

3. 构建镜像

mvn install dockerfile:build
mvn install dockerfile:build -Dmaven.test.skip=true

​ 补充: 如何在阿里云上的linux如何打包上去

4. 在maven 安装目录的setting文件中加入配置

<server>
	<id>docker-registry</id>
	<username>*******</username>
	<password>******</password>
</server>

5. 修改阿里云centeros7 Docker配置开放远程访问

vi /usr/lib/systemd/system/docker.service

​ ExecStart这一行后面加上 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

最终效果:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

6. 重启

systemctl daemon-reload

systemctl start docker

7. 服务器验证是否开始监听

netstat -anp|grep 2375

curl 127.0.0.1:2375/info

8. windows系统环境变量中新建DOCKER_HOST, 值为 tcp://[修改成你的远程服务器端口号]:2375

9. 打标签

docker tag a1b9fc71720d registry.cn-shenzhen.aliyuncs.com/xd/xd_images:docker-demo-v201808

10. 推送到镜像仓库

docker push registry.cn-shenzhen.aliyuncs.com/xd/xd_images:docker-demo-v201808

11. 应用服务器拉取镜像

docker pull registry.cn-shenzhen.aliyuncs.com/xd/xd_images:docker-demo-v201808

12. 启动

docker run -d --name xd_docker_demo1 -p 8099:8080  a1b9fc71720d

13. 查看启动日志

docker logs -f  containerid

14. 访问

http://[IP]:8099/find/user

docker整合注册中心

1. 新增maven插件

<properties>
  <docker.image.prefix>xd</docker.image.prefix>
</properties>
<build>
  <finalName>docker-demo</finalName>
  <plugins>
    <plugin>
      <groupId>com.spotify</groupId>
      <artifactId>dockerfile-maven-plugin</artifactId>
      <version>1.3.6</version>
      <configuration>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <buildArgs>
          <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
      </configuration>
    </plugin>
  </plugins>
</build>

2. 新建Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

3. 打包

mvn install dockerfile:build
mvn install -Dmaven.test.skip=true dockerfile:build

4. 推送阿里云镜像仓库

阿里云镜像仓库:dev.aliyun.com/search.html

docker tag 062d2ddf272a registry.cn-shenzhen.aliyuncs.com/xd/xd_images:eureka-v20180825
docker push registry.cn-shenzhen.aliyuncs.com/xd/xd_images:eureka-v20180825
docker pull registry.cn-shenzhen.aliyuncs.com/xd/xd_images:eureka-v20180825

5、查看日志

docker logs -f  containerid

6. 运行

docker run -d --name docker-eureka-server -p 8761:8761 e7f687f101a7

Docker Redis安装

1. 搜索镜像

docker search redis

2. 拉取

docker pull docker.io/redis

3. 启动

docker run --name "xd_redis" -p 6379:6379 -d 4e8db158f18d

参考:

docker run --name "xd_redis" -p 6379:6379 -d 4e8db158f18d --requirepass "123456" -v $PWD/data:/data

4. 访问redis容器里面,进行操作

docker exec -it 295058d2b92e redis-cli