SpringCloud笔记十:springCloud和Docker整合部署
文章目录
构建SpringBoot应用Docker镜像
- 官方文档
- maven里面添加配置
<properties>
<docker.image.prefix>公司名字</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镜像的。
p r o j e c t . b u i l d . f i n a l N a m e 产 出 物 名 称 , 缺 省 为 {project.build.finalName} 产出物名称,缺省为 project.build.finalName产出物名称,缺省为{project.artifactId}-${project.version} project.artifactId的值要小写
打包SpringCloud镜像并上传私有仓库并部署
- 创建Dockerfile,默认是根目录,(可以修改为src/main/docker/Dockerfile,如果修改需要制定路径)
Dockerfile:由一系列命令和参数构成的脚本,这些命令应用于基础镜像,最终创建一个新的镜像。
就相当于一个加工厂,根据原材料将项目加工成一个镜像。
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 暴露镜像端口
- 构建镜像
mvn install dockerfile:build
-
打标签
-
推送到仓库
-
服务端拉取,然后运行
-
运行时注意
docker run -d --name “docker-demo” -p 8088:8080 909ff4c0319a
第一个8088是外部访问的端口
第二个8080是内部服务启动的端口
- 进行测试
curl “http:127.0.0.1:xxx”
- 所有对外的都要经过网关才可以对外,应用间通信(除非跨机房)都用内网通信。
docker配置redis
- 搜索redis
docker search redis
- 拉取redis
docker pull docker.io/redis
- 运行redis
启动 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
- 访问redis容器里面,进行操作
docker exec -it 4e430ef837c6 redis-cli
生产环境常见问题以及中心配置
- maven打包构建,会触发单元测试,部分情况可以跳过,
mvn install -Dmaven.test.skip=true dockerfile:build
- 生产环境不能用localhost 或者 127.0.0.1, 一定要用内网通信ip (虚拟主机映射,本地域名映射 hosts)
技术未来
- k8s,service mesh,server less等技术,未来将成为前沿技术。