在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

修改的地方如下图所示:

QQ截图20191203190038.png

修改保存后,重启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:

QQ截图20191203190538.png

填写远程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:

QQ截图20191203191101.png

在项目根目录下新建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…

QQ截图20191203191341.png

选择远程的Docker服务,填写镜像标签内容,点击保存后,运行:

QQ截图20191203191547.png

通过日志来看,镜像构建是成功的:

QQ截图20191203191734.png

可以看到远程服务器上已经包含了该Docker镜像:

QQ截图20191203191809.png

可以到服务器上验证下:

QQ截图20191203191934.png

参考博客:

https://mrbird.cc/IDEA-Docker-Plugin.html

IDEA中使用Docker Compose 容器编排

(一)确保idea 中连接到docker

image-20200626182947008

(二)打包镜像

当前测试的是前后分离项目 如果是微服务中呢,由于前文中在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

image-20200626183632910

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

未使用时 查看服务器 正在运行的容器列表

image-20200626183317890

idea 中操作

image-20200626184039920

运行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 所在

项目名(不指定时默认为目录名) + 自定义服务名 + 容器索引(第几个实例)

image-20200626184120113

访问测试

image-20200626184316570

参考博客:

https://blog.csdn.net/leilei1366615/article/details/106973517/

IDEA中使用maven插件将编译后的jar制作成镜像上传至服务器中

参考:

主要参考(已实践可用):Maven插件docker-maven-plugin的使用

次要参考:docker-maven-plugin详细使用方法

最次要参考:docker部署springboot 前后端分离项目

有时间在实践,其实可以用docker-compose加脚本感觉更方便(已经实现了)

posted @ 2022-05-03 15:16  黄河大道东  阅读(663)  评论(0编辑  收藏  举报