idea使用远程linux打包docker镜像(点两下直接打包启动好)

win下直接打包docker镜像需要安装docker的win版,我本机有虚拟机,安装docker发现有问题,找了找看是啥问题,结果说是要卸载虚拟机,淦,虚拟机比docker重要所以我决定不安装win版docker

远程指云服务器或虚拟机,总之不在同一系统环境下的。

一、首先准备好linux的docker环境

1.执行 yum install -y yum-utils 安装仓库管理工具
在这里插入图片描述

2.执行 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 执行阿里的镜像库
在这里插入图片描述

3.执行yum list docker-ce --showduplicates | sort -r 查看docker的版本有哪些
在这里插入图片描述

4.选择其中一个版本安装
yum install docker-ce-17.12.1.ce -y 这里我选择了相对老一点的版本17.12.1

5.修改docker配置开放远程访问

vim /usr/lib/systemd/system/docker.service
# 然后添加下面配置
-H unix://var/run/docker.sock -H tcp://0.0.0.0:2375

# 重新启动
systemctl daemon-reload
systemctl restart docker

#测试是否能连通 ip换成自己的,如果是云ECS服务器需要开放对应端口2375 
curl http://192.168.0.177:2375/info

在这里插入图片描述

6.docker的几个常用命令

#启动docker
systemctl start docker
#重启docker
systemctl restart docker
#停止docker
systemctl stop docker
#查看docker下的镜像
docker images
#查看docker正在运行的容器
docker ps
#查看docker所有容器
docker ps -a
#删除一个镜像的步骤 1.先查容器然后删除容器 2.再根据IMAGE ID删除镜像
#删除容器
docker rm 对应要删除的容器的CONTAINER ID
#删除镜像
docker rmi 对应要删除的镜像的IMAGE ID

二、Idea插件准备

在这里插入图片描述

1.配置到docker的远程源

在这里插入图片描述

Engine API URL: 这个地方填tcp://对应的docker远程连接地址加端口号

下面出现 Connection successful 就说明是远程连接docker成功了

2.加启动配置

在这里插入图片描述

三、进入打包环节

1.写dockerfile

与pom文件同目录下新建一个dockerfile

#指定基础镜像,springboot项目打包docker一般就是jdk或者jre
FROM adoptopenjdk/openjdk11:jre11u-nightly
VOLUME /tmp
#设置编译镜像时加⼊的参数,JAR_FILE 是设置容器的环境变量(maven⾥⾯配置的)
ARG JAR_FILE
#将本地文件添加到容器中,不会自动解压文件,也不能访问网络资源
COPY target/1024-cloud-user.jar 1024-user.jar
#配置容器,使其可执行化。 我的理解就是拼接启动命令
ENTRYPOINT ["java","-jar","/1024-user.jar"]

#配置时区,不然会发现打包到docker中启动的容器日志里的时间是差8个小时的
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \

&& echo 'Asia/Shanghai' >/etc/timezone
2.maven打好jar包

pom文件中添加下面配置

<build>
    <finalName>1024-cloud-user</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!--需要加这个,不然打包镜像找不到启动文件-->
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.4.10</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

<repository>${docker.image.prefix}/${project.artifactId}</repository>这个地方是两个父工程标签内容的引用,<docker.image.prefix>xdclass-cloud</docker.image.prefix>这个是第一个引用,第二个是建工程的时候就会有的。
然后用maven clean 再 package一下就打好了jar包

3.使用刚配置到的docker启动,打包成docker镜像并启动

如果控制台打包失败且build的log如下:

Error response from daemon: COPY failed: stat /var/lib/docker/tmp/docker-builder618811564/1024-cloud-user.jar: no such file or directory
Failed to deploy '1024-user Dockerfile: xdclass-user-service/dockerfile': Can't retrieve image ID from build stream

说明他找不到刚用maven打好的jar,此时检查dockerfile中指定的jar包路径对不对

在这里插入图片描述

就是这里,需要是对应maven打好jar包的输出目录,改好就可以重新打包了(别忘了到images里面把刚才的废镜像删掉)

在这里插入图片描述

到这里就基本成功了,接下来就是看日志,和对应配置了。

4.简单测下接口看是否正常

在这里插入图片描述
在这里插入图片描述

返回结果和日志都正常显示说明没问题,今天为了找到在win下更简单打包docker镜像方法踩了一些坑,这是整理结果,今后就不用特别烦琐的把文件上传到linux中再打包了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐