ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在IDEA中使用docker的几种技术

2022-05-03 15:35:18  阅读:455  来源: 互联网

标签:容器 compose IDEA 几种 镜像 docker 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加脚本感觉更方便(已经实现了)

标签:容器,compose,IDEA,几种,镜像,docker,Docker
来源: https://www.cnblogs.com/hhddd-1024/p/16218462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有