www.91084.com

GVKun编程网logo

IDEA 推送 docker 镜像到私服 / 利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程的 docker 服务器、远程仓库

26

如果您对IDEA推送docker镜像到私服/利用dockerfile-maven-plugin插件在springboot中上传镜像到远程的docker服务器、远程仓库感兴趣,那么本文将是一篇不错的选择

如果您对IDEA 推送 docker 镜像到私服 / 利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程的 docker 服务器、远程仓库感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于IDEA 推送 docker 镜像到私服 / 利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程的 docker 服务器、远程仓库的详细内容,并且为您提供关于docker - dockerfile构建一个简单的springboot应用镜像、Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像、docker 上传镜像到harbor仓库、Docker 将镜像推送到远程仓库的有价值信息。

本文目录一览:

IDEA 推送 docker 镜像到私服 / 利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程的 docker 服务器、远程仓库

IDEA 推送 docker 镜像到私服 / 利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程的 docker 服务器、远程仓库

 

      利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程仓库
      这篇文章讲解在开发工具中把打包好的 jar 编译成 docker 镜像,上传到远程的 docker 服务器,以及根据镜像创建测试 docker 容器,验证 springboot 程序,以及 Dockerfile 配置
      如何生成证书以及 docker 服务器开启远程端口,参考这篇文章:https://www.cnblogs.com/morgan363/p/12029783.html

1、Windows 下配置环境变量

      增加三个系统环境变量,在环境变量 -> 系统变量 -> 新建

      DOCKER_HOST=tcp://192.168.74.82:2376
      DOCKER_CERT_PATH = 证书路径
      DOCKER_TLS_VERIFY=1

备注:
      1)证书路径目录下面有三个证书文件 ca.pemcert.pemkey.pem
      2)DOCKER_HOST中的ipdocker服务器的ip

 

      

      

 

2、springboot 项目使用 dockerfile-maven-plugin 插件

      pom.xml 文件

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.3</version>
                <!--<executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>-->
                <configuration>
                    <repository>121.42.162.203/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                        <JAR_EXPOSE>8082</JAR_EXPOSE>
                    </buildArgs>
                </configuration>
</plugin>

      注:repository 属性里的 ip 要修改成自己的 docker 服务器 ip

      springboot 项目的根目录新建 Dockerfile 文件,复制下面的代码

      

 

FROM openjdk:8-jre
ARG JAR_EXPOSE=8082
EXPOSE $JAR_EXPOSE
ARG JAR_FILE
ADD $JAR_FILE /app.jar
ENTRYPOINT ["java", "-jar", "-Duser.timezone=GMT+08", "/app.jar"]

 

3、执行 maven 命令上传镜像

      mvn clean package dockerfile:build -Dmaven.test.skip=true

      

      

 

4、maven 命令成功执行后可以在 docker 服务器看到镜像 docker images

      

 

5、docker run 这个 springboot 编译的 docker 镜像

docker run --name countgame -d -p 8082:8082 6f0d

      注:后面的 6f0d 是 image_id,在 docker images 的后面可以看到

 

6、docker ps 可以看到容器已经启动

 

7、查看容器启动日志,日志正常

docker logs --tail 300 -f countgame

 

8、用 curl 测试程序是否正常,可以看到有内容返回,返回的网页正常

curl http://127.0.0.1:8082/countgame/user/toGame

 

注:
    1. 修改了系统变量需要重启开发工具才能生效,一开始提示上传镜像失败,看了错误是上传的 ip 还是默认的 127.0.0.1,重启 IDEA 或者 eclipse 就可以了

 

摘自:https://blog.csdn.net/qq_21187515/article/details/90302026

 

 

docker - dockerfile构建一个简单的springboot应用镜像

docker - dockerfile构建一个简单的springboot应用镜像

      在前面的 《docker - 构建一个简单的docker镜像》中,介绍了两种构建镜像的方法,其中,通过dockerfile文件构建镜像是在实际生产中常用的;除此之外,还通过 docker - Dockerfile常用指令 和  docker - 常用命令 两篇文章介绍了dockerfile的指令和docker的常用命令,接下来,我们将会使用所学的知识构建一个简单的springboot应用。

    该springboot应用对外暴露了一个api,对外暴露8080端口,日志文件写在应用当前目录,部分代码以及配置文件如下:

@Slf4j
@SpringBootApplication
@RestController
public class SpringbootDockerApplication {

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

    @RequestMapping("/docker")
    public String docker() {
        log.info("access docker home at " + LocalTime.now());
        return "Hello Docker!";
    }
}

application.properties

spring.application.name=springboot-docker
server.port=8080
logging.file=app.log

把jar和dockerfile文件上传到一个springboot-docker目录中

[root@localhost springboot-docker]# ls
Dockerfile  springboot-docker-1.0.jar

Dockerfile:

FROM openjdk:8u181-jdk-alpine
ARG workdir=/app
VOLUME ${workdir}
WORKDIR ${workdir}
ADD springboot-docker-1.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
  • FROM openjdk:8u181-jdk-alpine : 从docker仓库中获取基础镜像
  • ARG workdir=/app : 添加变量,该变量只在当前的dockerfile中有效,如果换成ENV,则在容器中生效。这里需要注意的是,ARG和ENV对哪些指令是起效的,可以参考  docker - Dockerfile常用指令 
  • VOLUME ${workdir} : 把宿主机的目录(该目录可以通过docker inspect dockerName查看)挂载到容器中的/app这个目录,这样可以在宿主机中查看该目录的内容。还有一个很重要的原因,就是数据持久化,如果不挂载,当容器关闭删除后,数据将会跟着被删除。这里因为/app是应用所在的目录,该目录会产生日志等其它内容。
  • WORKDIR ${workdir} :指定工作目录,下面的指令操作将在这个指定目录中执行。还有一点是,当通过交互模式的exec命令进入到该容器时,默认当前路径是/app
  • ADD springboot-docker-1.0.jar app.jar : 添加文件到WORKDIR
  • EXPOSE 8080 : 暴露8080端口,需要通过容器IP和端口访问应用。如果想通过宿主机的IP和端口访问应用,需要在RUN容器的时候绑定。可以参考docker - Dockerfile常用指令 的run命令
  • ENTRYPOINT: 运行容器后执行的第一条命令,这里通过java -jar命令运行应用。

接下通过BUILD命令构建镜像

[root@localhost springboot-docker]# docker build -t springboot-docker:1.0 .

Sending build context to Docker daemon  17.85MB
Step 1/7 : FROM openjdk:8u181-jdk-alpine
 ---> 97bc1352afde
Step 2/7 : ARG workdir=/app
 ---> Using cache
 ---> a3818e8696c2
Step 3/7 : VOLUME ${workdir}
 ---> Using cache
 ---> e2faefe34aa6
Step 4/7 : WORKDIR ${workdir}
 ---> Using cache
 ---> 144b537c1b57
Step 5/7 : ADD springboot-docker-1.0.jar app.jar
 ---> Using cache
 ---> daca849e1012
Step 6/7 : EXPOSE 8080
 ---> Using cache
 ---> 123da0847dd3
Step 7/7 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
 ---> Using cache
 ---> de46a3f96d91
Successfully built de46a3f96d91
Successfully tagged springboot-docker:1.0

查看当前本地仓库的镜像,已经构建springboot-docker:1.0镜像

[root@localhost springboot-docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
springboot-docker   1.0                 de46a3f96d91        38 minutes ago      121MB
openjdk             8u181-jdk-alpine    97bc1352afde        5 weeks ago         103MB

运行镜像

docker run -p 8080:8080 -d --name springboot-docker springboot-docker:1.0

通过-p参数,把容器中的8080端口映射到宿主机中的8080端口。--name,给容器起一个名字

可以查看springboot应用的启动情况

docker logs -f springboot-docker 

查看容器的运行情况

docker inspect springboot-docker

只看一些关键的信息

"Mounts": [
            {
                "Type": "volume",
                "Name": "90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3",
                "Source": "/var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data",
                "Destination": "/app",
                "Driver": "local",
            }
        ],
"Networks": {
	"bridge": {
		"Gateway": "172.17.0.1",
		"IPAddress": "172.17.0.2",
	}
}

    宿主机中的 /var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data 目录挂载到 容器的 /app目录

    容器的IP地址 172.17.0.2

    运行成功后,在宿主机中通过命令访问服务

curl 172.17.0.2:8080/docker

    也可以通过宿主机的IP或者localhost访问,因为已经绑定

curl 127.0.0.1:8080/docker

 

 

Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像

Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像

创建Dockerfile文件

 

此处的参数说明:

FROM openjdk:8-jdk-alpine  基与jdk1.8
VOLUME /tmp   挂载容器的位置, 容易找到
ADD kitty-generator-1.0.0.jar app.jar   宿主机器的jar文件 移动到 容器的jar文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]  容器执行的命令

EXPOSE 9000 简易爆漏的端口 下面docker run -p 还是要的, 因为容器是桥接模式
EXPOSE 9092 写多个就会暴露多个端口

若要执行调优内存:加参数如下

 

 

2:POM.xml配置 加入docker:build插件

 <artifactId>kitty-generator</artifactId>  此处和下面${project.artifactId} 对应
<version>${project.version}</version>
<packaging>jar</packaging> 此处改为jar包方式
<properties>
*****
<docker.image.prefix>kitty</docker.image.prefix> 此处和下面${docker.image.prefix} 对应
</properties>

#下面为jar方式.
    <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins>

 

在父模块打包

mvn clean install package -Dmaven.test.skip

 

在子模块执行生成镜像

mvn docker:build -Dmaven.test.skip

 

启动镜像

docker run -itd -p 9000:9000 -v /data/generator/:/data kitty/kitty-generator

 -it  可以交互进入容器

-d   后台运行

-p 端口映射,若项目有多个端口,  -p 9000:9000 -p 9092:9092 写多个即可

-v 挂载文件 宿主/data/generator/ 不存在会自动创建   容器/data会自动创建

 

挂载文件配置 

   * 注意下方/data/ 红色字体

-v /data/generator/:/data  这的/data 表示容器的日志 将会在宿主机器生成/data/generator/kitty-generator.log文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出 -->
    <appender name="baselog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/data/kitty-generator.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/base.%d.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>
                [%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
            </pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
    </appender>
    <!-- 日志级别 -->
    <root>
        <!-- 定义了ERROR和INFO级别的日志;分别在FILE文件和控制台输出 -->
        <level value="INFO" />
        <appender-ref ref="baselog" />
        <appender-ref ref="console" />
    </root>
    <logger name="com.louis.kitty.generator" level="INFO">
        <appender-ref ref="baselog" />
    </logger>
</configuration>

 

docker 上传镜像到harbor仓库

docker 上传镜像到harbor仓库

先登录到仓库

 

查看镜像ID 、tag

 

 

 

打tag 然后上传

 

 

 

命令解析

docker tag centos:7 192.168.31.128/test/centos7

 

docker命令

tag 打tag

centos:7 镜像名字和Tag版本

192.168.31.128 harbor仓库位置

test 仓库的项目名字

centos7 为存储在仓库中的名字

 

docker push 192.168.31.128/test/centos7

Docker 将镜像推送到远程仓库

Docker 将镜像推送到远程仓库

注册登录:https://registry.hub.docker.com/

# 登录
docker login -u wu
Password:******

# 给镜像打标签
docker tag image_id wu/mydocker:1.0

# 推送到远程仓库
docker push wu/mydocker:1.0

我们今天的关于IDEA 推送 docker 镜像到私服 / 利用 dockerfile-maven-plugin 插件在 springboot 中上传镜像到远程的 docker 服务器、远程仓库的分享已经告一段落,感谢您的关注,如果您想了解更多关于docker - dockerfile构建一个简单的springboot应用镜像、Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像、docker 上传镜像到harbor仓库、Docker 将镜像推送到远程仓库的相关信息,请在本站查询。

本文标签: