在IDEA中使用docker的几种技术
IDEA中使用Docker插件
在Windows上如果没有安装docker for windows的话,是没办法构建Docker镜像的。
这种情况下,如果要通过fat jar构建docker镜像的话,只能将fat jar上传到安装了docker服务的Linux服务器上,然后编写Dockerfile构建。这种方式比较麻烦,这里记录下如何通过IDEA的Docker插件远程构建Docker镜像。
Docker开启远程访问
假如CentOS虚拟机上已经安装好Docker,IP地址为192.168.33.11,需修改Docker的配置,开启远程访问权限:
# 修改Docker配置
vim /lib/systemd/system/docker.service
修改的地方如下图所示:
修改保存后,重启Docker服务:
systemctl daemon-reload
systemctl restart docker.service
重启后,验证下2375端口是否是通的:
curl 192.168.33.11:2375/info
如果返回了JSON数据,说明配置成功。
IDEA使用Docker插件
IDEA Ultimate版本已经默认安装了Docker插件(没有的话去插件市场下载安装下就可以了)。点击IDEA -> File -> Settings… -> Build,Execution,Deployment -> Docker:
填写远程Docker地址,如果显示Connection Successfully说明连接远程Docker服务成功。
新建一个简单的Spring Boot项目,pom如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jia</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后用maven打包,打包后项目根目录的target下会有如下fat jar:
在项目根目录下新建Dockerfile,内容如下所示:
FROM openjdk:8u212-jre
MAINTAINER JHL
COPY target/demo-0.0.1.jar /demo-0.0.1.jar
ENTRYPOINT ["java", "-jar", "/demo-0.0.1.jar"]
然后点击IDEA -> Run -> Edit Configrations…
选择远程的Docker服务,填写镜像标签内容,点击保存后,运行:
通过日志来看,镜像构建是成功的:
可以看到远程服务器上已经包含了该Docker镜像:
可以到服务器上验证下:
参考博客:
https://mrbird.cc/IDEA-Docker-Plugin.html
IDEA中使用Docker Compose 容器编排
(一)确保idea 中连接到docker
(二)打包镜像
当前测试的是前后分离项目 如果是微服务中呢,由于前文中在pom.xml 中绑定了idea docker 打包插件 在其 父工程中使用 打包命令 即可将其子模块 打成一个个镜像
(三)Compos编排文件编写
docker compose 使用镜像编排
version: '3' #compose 文件版本(1.2.x+ 用3即可)
services:
# 指定服务名
lei-server:
# 这里是采用 镜像编排 当然也可以使用 dockerfile
image: registry.cn-chengdu.aliyuncs.com/leileideve/cattle-web:latest
# 重启策略
restart: always
# host:container 端口映射
ports:
- 6543:6543
# host:container 数据卷挂载
volumes:
- /docker/logs/server:/data/logs/
# 指定编排服务名
lei-web:
# image: 后为 需要编排的镜像 默认从本地服务器寻找 ,未找到则从dokcerhub中寻找
image: app-fontend
restart: always
ports:
- 8888:8888
volumes:
- /docker/logs/web:/logs
docker compose 使用dokcerfile 编排
version: '3'
services:
# 指定服务名
server:
# 指定容器名为'xiao-xiao-su-api',不指定则为project_service_index(项目_服务_索引)
container_name: lei-server-haha
# 重启策略: 容器退出时总是重启容器
restart: always
build:
# 指定设定上下文根目录,然后以该目录为准寻找Dockerfile文件
context: ./
#DockerFile 真正所在位置
dockerfile: ./docker/server/Dockerfile
# 设置工作目录为容器内的app文件夹
working_dir: /app
environment:
TZ: Asia/Shanghai
# 挂载数据卷
volumes:
# 映射容器产生的日志到主机的logs文件夹
- ./logs/:/app/log
# 映射端口
ports:
- 7777:6543
# 前端项目服务
web:
# 容器名为'lei-web-haha'
container_name: lei-web-haha
# 重启策略: 容器退出时总是重启容器
restart: always
build:
# 指定设定上下文根目录,然后以该目录为准寻找Dockerfile
context: ./
# DockerFile 真正所在位置
dockerfile: ./docker/web/Dockerfile
environment:
TZ: Asia/Shanghai
# 映射端口
ports:
- 8899:8888
使用dockerfile 和镜像编排的区别
dockerfile 每次编排需要创建一个新镜像 然后启动容器实例
使用images则是在原本镜像中 新启动一个容器实例
docker-compose.yml 一般都是放在项目最外层
(四)idea 中操作docker compose
未使用时 查看服务器 正在运行的容器列表
idea 中操作
运行services 其实质是执行了docker compose 命令 docker-compose up -d (当compose文件 为标准的 docker-compose.yml 时) 如不标准 则实质时 用-f 参数指定文件名 与 docker build 命令类似 (docker-compose -f dockerdemo.yml up -d)
docker compose 常用命令 以 tomcat 为例子
docker-compose up -d 服务名 构建并启动指定服务的一个容器实例
例如:docker-compose up -d tomcat(此处指服务) 构建并启动tomcat服务的一个容器实例
docker-compose exec tomcat bash 登录到这个容器中
docker-compose down 删除配置中涉及到的所有容器,镜像
docker-compose ps 显示正在运行的容器
docker-compose restart 容器ID 重新启动指定容器
docker-compose build tomcat 根据配置构建一个服务的镜像
docker-compose build --no-cache tomcat 不带缓存的构建。
docker-compose logs tomcat 查看tomcat服务所有容器实例的日志
docker-compose logs -f tomcat 查看tomcat的实时日志
查看服务器中,docker容器信息,容器名默认为docker compose 所在
项目名(不指定时默认为目录名) + 自定义服务名 + 容器索引(第几个实例)
访问测试
参考博客:
https://blog.csdn.net/leilei1366615/article/details/106973517/
IDEA中使用maven插件将编译后的jar制作成镜像上传至服务器中
参考:
主要参考(已实践可用):
Maven插件docker-maven-plugin的使用
次要参考:docker-maven-plugin详细使用方法
最次要参考:docker部署springboot 前后端分离项目
有时间在实践,其实可以用docker-compose加脚本感觉更方便(已经实现了)