IDEA整合Docker,一键打包服务镜像与启动容器

这篇具有很好参考价值的文章主要介绍了IDEA整合Docker,一键打包服务镜像与启动容器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

尝试了IDEA整合Docker,坑有些多,但经过查阅资料都一一解决了,写了个案例,感觉这种方式确实要方便很多。下面来整理下步骤:

一、安装Docker

准备一台Linux,我这里用的是centos 7 mini 版,然后安装Docker

  1. 安装Device Mapper:

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  2. 配置Docker的yum源:

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  3. 更新yum缓存

    yum makecache fast
    
  4. 安装Docker-ce

    yum -y install docker-ce
    
  5. 等待上述加载完,然后启动Docker

    systemctl start docker
    
  6. 校验Docker是否安装成功

    docker -v
    

    如果能输出版本号等信息,说明Docker安装OK,如下:

    [root@localhost ~]# docker -v
    Docker version 20.10.22, build 3a2c30b
    

二、开启Docker的远程访问

  1. 修改服务文件:/lib/systemd/system/docker.service

    新增一行:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

    ps:注意间隔,别写错了(我这步就是因为-H跟前面的写一块了,结果报了一堆奇怪的问题,(⊙o⊙)…

  2. 重新加载配置文件

    systemctl daemon-reload
    
  3. 重启服务

    systemctl restart docker
    
  4. 内部检验:curl http://127.0.0.1:2375/info

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

  5. 外部访问(浏览器访问你Linux的IP+2375/info)

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

    能访问到如上信息,说明外部访问也是OK的

    ps:如果你访问不到,注意检查下2375端口是否开放,我这里安装了宝塔面板,可以方便在安全里添加开放端口的规则,当然你不装这个也行,用命令行也是可以操作的呢。

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

三、在IDEA整合Docker

  1. 先安装个插件Docker(在插件市场里面可以找到)

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

  2. 配置连接远程Docker信息

    信息填写完整,下方出现connection successful说明连接成功!

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

  3. 启动service

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

  4. 然后就能浏览远程Docker里面的信息了

    (里面我拉了一些其他的镜像,可忽略)

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

四、服务打镜像

1.创建一个简单的SpringBoot项目,结构如下:

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

2.pom.xml如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.lys</groupId>
    <artifactId>test-docker</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.7.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
            <plugins>
                <!-- 指定maven.compiler.plugin 配置版本,解决编译问题 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!--项目的启动类-->
                        <mainClass>com.lys.DemoApplication</mainClass>
                        <layout>ZIP</layout>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
    </build>
</project>

3.写一个简单的Controller,如下:

package com.lys.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class DemoController {
    @GetMapping
    public String getString() {
        return "test  123!!!";
    }
}

4.启动类

package com.lys;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

5.启动项目,确保项目是正常启动

6.在项目的根目录下,编写Dockerfile,内容如下:

#指定基础镜像,在其上进行定制
FROM williamyeh/java8:latest

#维护者信息
MAINTAINER liyansheng

#这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /tmp 中写入的信息都不会记录进容器存储层
VOLUME /tmp

#复制上下文目录下的target/demo-1.0.0.jar 到容器里
COPY target/test-docker-1.0-SNAPSHOT.jar  docker-0.0.1.jar

#bash方式执行,使demo-1.0.0.jar可访问
#RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
RUN bash -c "touch /docker-0.0.1.jar"

#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080

#指定容器启动程序及参数   <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-jar","docker-0.0.1.jar"]

7.将项目打jar包

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

如果打包成功,在项目下的target下我们能看到jar包

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

8.切换到Dockerfile文件,点击按钮打包镜像

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

在之前可以新增一些简单的配置

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

然后点击上图中的run按钮,进行镜像构建与容器启动

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

切换到Log面板,我们可以看到容器启动的日志

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

在Dashboard可以修改配置,比如我们新增端口映射:

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

这样我们在外部通过8080端口访问到容器内端口8080的服务

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

在控制面板,还提供了一些快捷按钮给我们操作:

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

比如进入容器:

ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

五、总结

综上,在IDEA里面整合Docker确实为我们提供很大的便利,比起传统的打包上传-打镜像-启动容器,上面的方式要快速很多,更多细节大家可以进一步探索!!!

六、踩坑

  1. 启动容器失败

    报错:

    (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
     (exit status 1)).
    

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

  2. IDEA打镜像报错

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

    ideadocker插件打包项目,# Docker,docker,intellij-idea,linux

    上述问题我也看了很多网上的解决方案,但是我没有得到解决,最后我是卸载然后重装了Docker然后才没有报上面的错误

本次分享到这,如有不对的地方欢迎指正!文章来源地址https://www.toymoban.com/news/detail-785564.html

到了这里,关于IDEA整合Docker,一键打包服务镜像与启动容器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 容器化微服务架构实践: Docker 镜像打包方式, 服务编排, 服务发现与注册中心

    作者:禅与计算机程序设计艺术 容器化微服务架构是云计算领域最新的架构模式之一,通过容器技术和编排工具Kubernetes等实现了跨主机、跨平台的部署管理能力。微服务架构模式采用分布式、面向服务的方式将复杂的应用程序切分成一个个独立的模块,每个模块运行在自己

    2024年02月06日
    浏览(49)
  • IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

    Docker官网:https://www.docker.com/ Docker Hub官网:http://hub.docker.com/ Docker 是一个开源的容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括 VMs(虚拟机) 、 ba

    2024年02月01日
    浏览(35)
  • Docker环境下将已运行的容器打包成新的镜像并运行在另一个服务器上的Docker容器中

    1.1、使用root账户登录进入Linux系统中,键入 docker ps 命令。 2.1、正在运行的容器一行中CONTAINER ID一列下面的字符串就是容器id,复制想要打包的容器ID并执行 docker commit 容器id 容器新名称 例如: docker commit e973c1d6731e mysql/newmysql 3.1、在根目录下键入 docker save -o 新镜像名称.tar 新

    2024年02月16日
    浏览(48)
  • 【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建的功能

     【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建,服务重启,服务发布的功能。一键实现。非常的舒服。 这是 shell脚本  脚本名称: startup.sh   本脚本的功能是在jenkins 构建完项目后,通过jar包生成dock

    2024年02月11日
    浏览(57)
  • ELK日志监控系统搭建详细步骤(针对docker容器启动的镜像、微服务版)

         ELK Stack 是 Elasticsearch 、Logstash、Kiban a 三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于 Elastic.co 公司名下,故有此简称 。 百度介绍:       Elasticsearch是强大的数据搜索引擎,是分布式、通过restful方式进行交互的近实时搜索

    2024年02月05日
    浏览(50)
  • 项目打包docker镜像 | 上传nexus | jenkins一键构建

      Docker部署项目是指使用Docker容器化技术将应用程序及其依赖项打包成一个独立的、可移植的运行环境,并在各种操作系统和平台上进行部署和运行。   使用Docker的主要原因是解决了应用程序在不同环境中部署和运行的问题。传统上,应用程序在部署时需要考虑操作系统

    2024年02月09日
    浏览(48)
  • docker 打包镜像或容器

    因为某台服务器需要部署Tomcat,但是该服务武器不能连接外网,所以需要先pull拉一下镜像包,如果已经有了现有的镜像就不需要拉取了,直接从第二部开始就行。 具体操作步骤如下: 使用到的命令: docker commit :从容器创建一个新的镜像 OPTIONS说明: -a :提交的镜像作者; -c

    2024年02月02日
    浏览(47)
  • docker:容器打包成镜像

    简介 :docker的优势在于,安装部署完成后,将已经运行成功的容器重新打包出新的镜像,即可实现一次构建,处处使用。这需要依赖于docker commit命令 和 docker load来配合完成。 历史攻略: Docker:简介和常用命令分类 sanic:通过dockerfile部署 操作步骤 :以sanic:通过dockerfile部

    2024年02月11日
    浏览(46)
  • Docker 将容器打包成镜像&推送镜像到仓库

    示例: 1.登录仓库进行身份验证 2.将本地镜像重命名与仓库格式相匹配 3.推送镜像到仓库

    2024年02月09日
    浏览(45)
  • docker 镜像/容器的打包、导出、导入

    目录 一、将变动过的容器打包生成新的镜像 二、对镜像进行导出导入 1、将镜像导出为一个镜像img文件 2、将img镜像文件导入,复制出一个完全一样镜像 三、对容器进行导入导出 1、将容器导出为一个镜像tar文件 2、将镜像tar文件导入,生成一个新镜像 四、2种导入导出差异简

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包