Docker 二:IDEA + Docker 插件创建镜像并运行
IDEA 上提供了 Docker integration 插件,可以很方便的管理镜像和容器,当然这些操作通过命令行也能完成,使用 IDEA 插件方式的另一个便利在于 IDEA 提供了 Docker 配套的 Configuration,可以一次性定义好操作序列,修改代码或资源后只需 Run/Debug Configuration 即可。
接下来直接通过示例项目介绍这些操作。
项目结构
- 网关项目:gateway
- pigeon RPC 服务项目:service-1
- pigeon RPC 服务项目:service-2
三个项目都为 spring boot 项目,pigeon 使用 zookeeper 做为注册中心,因此需要部署 zookeeper,此外还有 redis。
创建并运行 zookeeper 和 redis 的镜像
不确定 Docker Hub 仓库中是否存在镜像时可使用 docker search redis
进行检索。
docker pull zookeeper
docker run -p 127.0.0.1:2181:2181 --name zookeeper -d zookeeper:latest
docker pull redis
docker run -p 127.0.0.1:6379:6379 --name redis -d redis:latest
Dockfile 文件编写
gateway 项目借助 maven 打成 war 包,两个 RPC 服务最终打成 jar 包。
pigeon 服务的 Dockerfile 文件
FROM frolvlad/alpine-oraclejdk8:slim
COPY target/service-1-1.0.0.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- FROM 指定当前镜像基于哪一个镜像源
- COPY 指定在 build 时将 Dockerfile 所在目录下的
target/service-1-1.0.0.jar
拷贝到镜像跟目录(类型 linux 文件目录)下,并重命名为 app.jar - ENTRYPOINT 指定镜像容器启动后执行命令
java -jar /app.jar
gateway 项目的 Dockfile 文件
FROM frolvlad/alpine-oraclejdk8:slim
COPY target/gateway-1-1.0.0.war appwjar
ENTRYPOINT ["java","-jar","/app.war"]
之后创建镜像时需要根据这三份文件进行创建。这里需要注意 gateway 项目的 pom 文件需要添加 `` 插件,否则 docker 中 java -jar /app.war
运行 war 包时会出错(提示没有“主清单属性”)。
docker build
创建镜像
执行 docker build
命令需要进入 Dockfile 所在目录,直接执行 docker build -t service-1:0.0.1 .
,也可以指定 Dockerfile 绝对路径(文件夹层级即可)的方式进行构建:
docker build -t rh-service:0.0.1 G:/workspaces/work/service-1
![](https://img.haomeiwen.com/i7460499/6ce7f88930439f0b.png)
命令执行成功后 IDEA 的 Docker 面板就会看到创建成功的镜像了。
docker run
创建并运行容器
docker run -p 127.0.0.1:8081:8081 --name service-1 -d service-1:0.0.1 java -jar /app.jar
docker run -p 127.0.0.1:9091:9091 --name service -2-d service-2:0.0.1 java -jar /app.jar
这两个为 pigeon 服务,网关项目借助 zookeeper 与其进行 RPC 通信,所以这里端口也可以随机映射到主机的高位端口:
docker run -P --name service-1 -d service-1:0.0.1 java -jar /app.jar
docker run -P --name service-2 -d service-2:0.0.1 java -jar /app.jar
网关项目需要外部进行访问,所以需要映射到主机的指定端口上:
docker run -p 127.0.0.1:8082:8082 --name gateway -d gateway:0.0.1 java -jar /app.war
借助 IDEA Configuration 一键运行项目
在 IDEA 中使用 Edit Configurations
创建 Docker 配置 。
![](https://img.haomeiwen.com/i7460499/7f7c56389c0cb68b.png)
选择 Dockerfile
![](https://img.haomeiwen.com/i7460499/6d3b5b5b954fb927.png)
进行如下配置
![](https://img.haomeiwen.com/i7460499/5d81d1edf784588f.png)
Dockerfile:
处选择自己的 Dockerfile 所在位置,Context folder
将会自动填充;image tag
一般由两部分构成:REPOSITORY:TAG(参考 docker ps
命令显示的列表标题);勾选 Run build image
,这样 Run/Debug
时在执行了 docker build
命令后,会继续执行 docker run
命令; Executable->Command
指定容器启动后执行命令;Bind ports
配置端口映射,Run options
可添加 -d
使容器在后台运行。
- 注意在 Before lanuch 中配置
mvn install
,使用 maven 构建 jar(war) 包,这样docker build
执行时使用的才会是最新的target/service-1-1.0.0.jar
文件 -
Command previce
中可以看到当前配置将依次执行命令docker build
和docker run
- 当点击 IDEA 的
Run/Debug