GVKun编程网logo

docker环境安装及springboot+docker在idea上实现一键部署远程服务器(idea远程docker部署启动)

27

如果您想了解docker环境安装及springboot+docker在idea上实现一键部署远程服务器和idea远程docker部署启动的知识,那么本篇文章将是您的不二之选。我们将深入剖析docker

如果您想了解docker环境安装及springboot+docker在idea上实现一键部署远程服务器idea远程docker部署启动的知识,那么本篇文章将是您的不二之选。我们将深入剖析docker环境安装及springboot+docker在idea上实现一键部署远程服务器的各个方面,并为您解答idea远程docker部署启动的疑在这篇文章中,我们将为您介绍docker环境安装及springboot+docker在idea上实现一键部署远程服务器的相关知识,同时也会详细的解释idea远程docker部署启动的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

docker环境安装及springboot+docker在idea上实现一键部署远程服务器(idea远程docker部署启动)

docker环境安装及springboot+docker在idea上实现一键部署远程服务器(idea远程docker部署启动)

以下均是在虚拟机上操作的环境

一、docker安装

1、检查内核版本,必须是3.10及以上(docker要求centos系统的内核版本高于3.10

uname r

#如果系统版本较低,则使用yum update更新内核

2、安装docker

yum install docker

3、输入y确认安装

4、启动docker

[root@localhost ~]# systemctl start docker

[root@localhost ~]# docker v

Docker version 1.12.6, build 3e8e77d/1.12.6

5、开机启动docker

[root@localhost ~]# systemctl enable docker

Created symlink from /etc/systemd/system/multiuser.target.wants/docker.service to

/usr/lib/systemd/system/docker.service.

6、停止docker

systemctl stop docker

 

二、Docker 配置

1、修改镜像文件拉取地址为ustc

vi /etc/docker/daemon.json

{

"storage-driver":"devicemapper",

 "registry-mirrors": ["http://hub-mirror.c.163.com"],

 "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"]

}

2、编辑/lib/systemd/system/docker.service文件

Vim /lib/systemd/system/docker.service文件

原文件部分内容:

ExecStart=/usr/bin/dockerd-current \

          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \

          --default-runtime=docker-runc \

          --exec-opt native.cgroupdriver=systemd \

          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \

          --init-path=/usr/libexec/docker/docker-init-current \

          --seccomp-profile=/etc/docker/seccomp.json \

          $OPTIONS \

          $DOCKER_STORAGE_OPTIONS \

          $DOCKER_NETWORK_OPTIONS \

          $ADD_REGISTRY \

          $BLOCK_REGISTRY \

          $INSECURE_REGISTRY \

  $REGISTRIES

这上述部分全部删掉:

并重新写成如下部分内容:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654

其他参数不变,重启docker

systemctl daemon-reload

systemctl restart docker.service

完成后,查看是否启动正常,并且可以看到版本信息

[root@docker system]# docker version

 

三、springboot+docker实现一键部署

1、idea中安装dockerfile插件

打开Idea,从File->Settings->Plugins->Install JetBrains plugin进入插件安装界面,在搜索框中输入docker,可以看到Docker integration,点击右边的Install按钮进行安装。安装后重启Idea。

当提示successful时表示成功

2、在springboot项目中的pom中添加打包docker的插件

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <!--将插件绑定在某个phase执行-->
    <executions>
        <execution>
            <id>build-image</id>
            <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!--指定生成的镜像名-->
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
        <!--指定标签-->
        <imageTags>
            <imageTag>latest</imageTag>
        </imageTags>
        <!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下-->
        <dockerDirectory>${project.basedir}</dockerDirectory>
        <!--<dockerDirectory>src/main</dockerDirectory>-->
        <imageName>${project.artifactId}</imageName>
        <!--指定远程 docker api地址-->
        <dockerHost>http://172.20.10.7:2375</dockerHost>
        <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <!--jar 包所在的路径 此处配置的 即对应 target 目录-->
                <directory>${project.build.directory}</directory>

                <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <!-- 以下两行是为了docker push到DockerHub使用的。 -->
        <serverId>docker-hub</serverId>
        <registryUrl>https://index.docker.io/v1</registryUrl>
    </configuration>
</plugin>

3、配置Dockerfile文件

#指定基础镜像,在其上进行定制
FROM java:8

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

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

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

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

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

4、创建docker镜像

idea中执行package进行打包

 

 

切换到docker控制台,即可看到对应的demo镜像

 

 

选中镜像,点击右键,创建镜像容器

 

 

配置好镜像id和端口映射,点击run操作即可一键部署到linux服务器,且自动启动

 

 

然后在浏览器上就可以直接访问应用了

centos下docker安装及springboot远程发布docker的方法

centos下docker安装及springboot远程发布docker的方法

1.CentOS7.0下JDK1.8的安装

(1)到Oracle官网下载好 jdk-8u291-linux-i586.tar.gz备用
(2)卸载系统自带的java

java -version
rpm -qa | grep java
yum -y remove  [上面查出来的内容,多个用空格分隔]

(3)安装jdk

mkdir /usr/java
cd /usr/java
tar -zxvf jdk-8u291-linux-i586.tar.gz

(4)配置环境变量

vim /etc/profile

添加下面内容

export JAVA_HOME=/usr/java/jdk1.8.0_291
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

使环境变量生效

source  /etc/profile

测试

java -version

2.Docker的安装

(1) 查看内核版本(Docker需要64位版本,同时内核版本在3.10以上,如果版本低于3.10,需要升级内核)

uname -r

在这里插入图片描述

(2) 更新yum包:

yum update -y

(3) 添加阿里云yum仓库:

cd /etc/yum.repos.d/
wget "http://mirrors.aliyun.com/repo/Centos-7.repo"
mv CentOS-Base.repo CentOS-Base.repo.bak
mv Centos-7.repo CentOS-Base.repo

执行yum源的更新命令

yum clean all
yum makecache
yum update

(4) 安装Docker

yum install -y docker-ce

(5) 启动Docker
启动,查看信息

systemctl start docker
docker info

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5LW4OhZ-1619537409080)(imgclip_1.png "imgclip_1.png")]

后续可以设置开机启动项

systemctl enable docker

(6)配置docker远程访问
执行命令编辑文件

vim /usr/lib/systemd/system/docker.service

找到这一行

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

追加

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

重启服务

service docker restart

如果提示文件需要reload就执行

systemctl daemon-reload

在这里插入图片描述

远程访问测试

http://192.168.2.200:2375/version

在这里插入图片描述

3.Docker使用Maven插件构建并上传镜像

(1)新建Dockerfile文件

在项目的/src/main下新增文件夹docker,并在文件夹下创建Dockerfile文件,文件内容如下

# 基于哪个镜像
FROM java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,swaggertest-0.0.1-SNAPSHOT.jar这里是maven打包后的名字
ADD swaggertest-0.0.1-SNAPSHOT.jar swaggertest.jar
RUN bash -c ''touch /swaggertest.jar''
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/swaggertest.jar"]

EXPOSE 8080

(2)修改pom.xml文件增加如下plugin
imageName:镜像名称
dockerDirectory:Dockerfile文件所在目录
dockerHost:docker所在宿主机ip
2375为docker开启的远程访问端口

<plugin>
                <!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>1.2.2</version>
                <configuration>
                    <imageName>swaggertest-service</imageName>
                    <dockerDirectory>src/main/resources/docker</dockerDirectory>
                    <dockerHost>http://192.168.2.200:2375</dockerHost>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

每一个微服务项目都要进行配置。

(3)构建镜像并上传至docker
使用maven运行如下命令

mvn clean package docker:build -DskipTests

上传成功后,在服务器输入

docker images

可以看到新建的的docker镜像啦。

在这里插入图片描述

启动当前镜像

docker run -p 8080:8080 swaggertest-service:latest

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5AeaDxYA-1619537409091)(imgclip_6.png "imgclip_6.png")]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBM9nq3f-1619537409091)(imgclip_7.png "imgclip_7.png")]

到此这篇关于centos下docker安装及springboot远程发布docker的方法的文章就介绍到这了,更多相关centos下docker安装内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • CentOS 8.4安装Docker的详细教程
  • CentOS 8安装docker最详细方法
  • 关于CentOS 8.4离线安装Docker包的问题
  • CentOS 7.5下 安装Docker 教程 详解
  • CentOS 8安装Docker的详细教程

Docker-Docker 部署 SpringBoot 项目

Docker-Docker 部署 SpringBoot 项目

1. 手工方式

1.1. 准备 Springboot jar 项目

在这里插入图片描述
将项目打包成 jar

1.2. 编写 Dockerfile

FROM java:8VOLUME /tmpADD elk-web-1.0-SNAPSHOT.jar elk.jarEXPOSE 8080ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/elk.jar"]

FROM:表示基础镜像,即运行环境
VOLUME /tmp 创建 /tmp 目录并持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用 /tmp 作为工作目录
ADD:拷贝文件并且重命名 (ADD elk-web-1.0-SNAPSHOT.jar elk.jar 将应用 jar 包复制到 /elk.jar)
EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立 image 的人员之间的交流,即建立 image 的人员告诉容器布署人员容器应该映射哪个端口给外界
ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入 java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为 ENTRYPOINT

1.3. 构建容器

[root@VM_0_15_centos elk]# docker build -t elk .Sending build context to Docker daemon 14.43 MBStep 1/5 : FROM java:8Trying to pull repository docker.io/library/java ... 8: Pulling from docker.io/library/java5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9dStatus: Downloaded newer image for docker.io/java:8 ---> d23bdf5b1b1bStep 2/5 : VOLUME /tmp ---> Running in 0aec2dc2f98c ---> a52e844f25d4Removing intermediate container 0aec2dc2f98cStep 3/5 : ADD elk-web-1.0-SNAPSHOT.jar elk.jar ---> 3ba2f4fddddaRemoving intermediate container 860a0f748a23Step 4/5 : EXPOSE 8080 ---> Running in 1d3331cc2be6 ---> e9ac33d26ce0Removing intermediate container 1d3331cc2be6Step 5/5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /elk.jar ---> Running in d354f8ee2af5 ---> 8937e1ade6c7Removing intermediate container d354f8ee2af5Successfully built 8937e1ade6c7

1.4. 运行容器

docker run -di --name 容器名称 -p 8080:8080 镜像名称

其中 - d 表示后台运行容器,这也就自然地解决的 Spring Boot 不支持后台运行应用程序的问题。
-p 8080:8080 表示将容器内部的 8080 端口映射到宿主机器的 8080 端口,这样就可以通过宿主机器直接访问应
用。
--name 给容器取一个容易记住的名字方便日后管理。

[root@VM_0_15_centos elk]# docker run -di --name myspringboot -p 8080:8080 8937e1ade6c704d6b2c347950a10c95a039c94a3e51d717e516dd8c3c742e3197687dfcf5523[root@VM_0_15_centos elk]# docker ps -aCONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES04d6b2c34795  8937e1ade6c7  "java -Djava.secur..." 8 seconds ago  Up 7 seconds  0.0.0.0:8080->8080/tcp myspringboot[root@VM_0_15_centos elk]# 

1.5. 查看运行日志

docker logs -f --tail=100 容器名称

[root@VM_0_15_centos elk]# docker logs -f --tail=100 04d6b2c34795 . ____   _   __ _ _ /\\ / ___''_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | ''_ | ''_| | ''_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) '' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::  (v1.5.4.RELEASE)2019-12-29 07:42:58.982 INFO 1 --- [   main] c.b.ElkExampleSpringBootApplication  : Starting ElkExampleSpringBootApplication v1.0-SNAPSHOT on 04d6b2c34795 with PID 1 (/elk.jar started by root in /)2019-12-29 07:42:58.999 INFO 1 --- [   main] c.b.ElkExampleSpringBootApplication  : No active profile set, falling back to default profiles: default2019-12-29 07:42:59.243 INFO 1 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5a2e4553: startup date [Sun Dec 29 07:42:59 UTC 2019]; root of context hierarchy2019-12-29 07:43:03.652 INFO 1 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)2019-12-29 07:43:03.699 INFO 1 --- [   main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2019-12-29 07:43:03.714 INFO 1 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.152019-12-29 07:43:04.012 INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext2019-12-29 07:43:04.012 INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 4772 ms2019-12-29 07:43:04.449 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: ''dispatcherServlet'' to [/]2019-12-29 07:43:04.470 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: ''characterEncodingFilter'' to: [/*]2019-12-29 07:43:04.470 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: ''hiddenHttpMethodFilter'' to: [/*]2019-12-29 07:43:04.471 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: ''httpPutFormContentFilter'' to: [/*]2019-12-29 07:43:04.471 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: ''requestContextFilter'' to: [/*]2019-12-29 07:43:05.534 INFO 1 --- [   main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5a2e4553: startup date [Sun Dec 29 07:42:59 UTC 2019]; root of context hierarchy2019-12-29 07:43:05.765 INFO 1 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/exception]}" onto public java.lang.String com.bruceliu.controller.ELKController.exception()2019-12-29 07:43:05.766 INFO 1 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/elkdemo]}" onto public java.lang.String com.bruceliu.controller.ELKController.helloWorld()2019-12-29 07:43:05.772 INFO 1 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)2019-12-29 07:43:05.780 INFO 1 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)2019-12-29 07:43:05.869 INFO 1 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.........

Docker-Docker部署SpringBoot项目

Docker-Docker部署SpringBoot项目

1.1.准备Springboot jar项目#

在这里插入图片描述​将项目打包成jar

1.2.编写Dockerfile#

FROM java:8
VOLUME /tmp
ADD elk-web-1.0-SNAPSHOT.jar elk.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/elk.jar"] 

FROM:表示基础镜像,即运行环境 VOLUME /tmp创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录 ADD:拷贝文件并且重命名(ADD elk-web-1.0-SNAPSHOT.jar elk.jar 将应用jar包复制到/elk.jar) EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员告诉容器布署人员容器应该映射哪个端口给外界 ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

1.3.构建容器#

[root@VM_0_15_centos elk]# docker build -t elk .
Sending build context to Docker daemon 14.43 MB
Step 1/5 : FROM java:8
Trying to pull repository docker.io/library/java ... 
8: Pulling from docker.io/library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for docker.io/java:8
 ---> d23bdf5b1b1b
Step 2/5 : VOLUME /tmp
 ---> Running in 0aec2dc2f98c
 ---> a52e844f25d4
Removing intermediate container 0aec2dc2f98c
Step 3/5 : ADD elk-web-1.0-SNAPSHOT.jar elk.jar
 ---> 3ba2f4fdddda
Removing intermediate container 860a0f748a23
Step 4/5 : EXPOSE 8080
 ---> Running in 1d3331cc2be6
 ---> e9ac33d26ce0
Removing intermediate container 1d3331cc2be6
Step 5/5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /elk.jar
 ---> Running in d354f8ee2af5
 ---> 8937e1ade6c7
Removing intermediate container d354f8ee2af5
Successfully built 8937e1ade6c7 

1.4.运行容器#

docker run -di --name 容器名称 -p 8080:8080 镜像名称 

其中-d表示后台运行容器,这也就自然地解决的Spring Boot不支持后台运行应用程序的问题。 -p 8080:8080表示将容器内部的8080端口映射到宿主机器的8080端口,这样就可以通过宿主机器直接访问应 用。 --name 给容器取一个容易记住的名字方便日后管理。
[root@VM_0_15_centos elk]# docker run -di --name myspringboot -p 8080:8080 8937e1ade6c7
04d6b2c347950a10c95a039c94a3e51d717e516dd8c3c742e3197687dfcf5523
[root@VM_0_15_centos elk]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
04d6b2c34795        8937e1ade6c7        "java -Djava.secur..."   8 seconds ago       Up 7 seconds        0.0.0.0:8080->8080/tcp   myspringboot
[root@VM_0_15_centos elk]# 

1.5.查看运行日志#

docker logs -f --tail=100 容器名称
[root@VM_0_15_centos elk]# docker logs -f --tail=100 04d6b2c34795
  .   ____          _            __ _ _
 / / ___''_ __ _ _(_)_ __  __ _    
( ( )___ | ''_ | ''_| | ''_ / _` |    
 /  ___)| |_)| | | | | || (_| |  ) ) ) )
  ''  |____| .__|_| |_|_| |___, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.4.RELEASE)
2019-12-29 07:42:58.982  INFO 1 --- [           main] c.b.ElkExampleSpringBootApplication      : Starting ElkExampleSpringBootApplication v1.0-SNAPSHOT on 04d6b2c34795 with PID 1 (/elk.jar started by root in /)
2019-12-29 07:42:58.999  INFO 1 --- [           main] c.b.ElkExampleSpringBootApplication      : No active profile set, falling back to default profiles: default
2019-12-29 07:42:59.243  INFO 1 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5a2e4553: startup date [Sun Dec 29 07:42:59 UTC 2019]; root of context hierarchy
2019-12-29 07:43:03.652  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2019-12-29 07:43:03.699  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-12-29 07:43:03.714  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.15
2019-12-29 07:43:04.012  INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-12-29 07:43:04.012  INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4772 ms
2019-12-29 07:43:04.449  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: ''dispatcherServlet'' to [/]
2019-12-29 07:43:04.470  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ''characterEncodingFilter'' to: [/*]
2019-12-29 07:43:04.470  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ''hiddenHttpMethodFilter'' to: [/*]
2019-12-29 07:43:04.471  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ''httpPutFormContentFilter'' to: [/*]
2019-12-29 07:43:04.471  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ''requestContextFilter'' to: [/*]
2019-12-29 07:43:05.534  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5a2e4553: startup date [Sun Dec 29 07:42:59 UTC 2019]; root of context hierarchy
2019-12-29 07:43:05.765  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/exception]}" onto public java.lang.String com.bruceliu.controller.ELKController.exception()
2019-12-29 07:43:05.766  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/elkdemo]}" onto public java.lang.String com.bruceliu.controller.ELKController.helloWorld()
2019-12-29 07:43:05.772  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2019-12-29 07:43:05.780  INFO 1 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2019-12-29 07:43:05.869  INFO 1 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-12-29 07:43:05.869  INFO 1 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-12-29 07:43:05.984  INFO 1 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-12-29 07:43:06.387  INFO 1 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2019-12-29 07:43:06.537  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2019-12-29 07:43:06.562  INFO 1 --- [           main] c.b.ElkExampleSpringBootApplication      : Started ElkExampleSpringBootApplication in 8.771 seconds (JVM running for 9.832) 

1.6.访问测试#

在这里插入图片描述

2.Docker远程连接并且使用idea一键部署#

2.1.配置docker远程连接端口#

首先编辑我们服务器上的docker文件

vim /usr/lib/systemd/system/docker.service 

修改以ExecStart开头的行(centos 7):添加

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock  

在这里插入图片描述​修改后保存文件,然后重启docker

systemctl daemon-reload
service docker restart 

重启之后测试远程连接是否正常,这里的2375是之前配置的端口

curl http://localhost:2375/version 

看到返回信息基本上就没有问题了

[root@VM_0_15_centos elk]# curl http://localhost:2375/version
{"Version":"1.13.1","ApiVersion":"1.26","MinAPIVersion":"1.12","GitCommit":"7f2769b/1.13.1","GoVersion":"go1.10.3","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-957.21.3.el7.x86_64","BuildTime":"2019-09-15T14:06:47.565778468+00:00","PkgVersion":"docker-1.13.1-103.git7f2769b.el7.centos.x86_64"} 

然后开启端口,或者关闭防火墙,二者选其一即可

firewall-cmd --zone=public --add-port=2375/tcp --permanent 

chkconfig iptables off 

然后打开浏览器测试将之前的localhost修改为你的ip在这里插入图片描述

2.2.使用idea连接到docker#

首先下载docker插件,idea2019自带了docker插件。如果没有插件可以选择安装docker插件在这里插入图片描述​然后配置docker地址,在你的File | Settings | Build, Execution, Deployment | Docker在这里插入图片描述​配置完成链接之后,出现了框中的内容即可.在这里插入图片描述​链接成功之后会列出容器和镜像!

配置阿里云镜像加速器:在这里插入图片描述

2.3.docker-maven-plugin 介绍#

在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。

pom.xml:

<build>

        <finalName>${project.artifactId}</finalName>

        <plugins>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
            <!-- 跳过单元测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

            <!--使用docker-maven-plugin插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>bruceliu/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--指定基础镜像jdk1.8-->
                    <baseImage>java</baseImage>
                    <!--镜像制作人本人信息-->
                    <maintainer>bruceliu@email.com</maintainer>
                    <!--切换到ROOT目录-->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://122.51.50.249:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

        </plugins>
    </build> 

执行Maven打包命令:在这里插入图片描述

G:softDevelopmentJDK8binjava -Dmaven.multiModuleProjectDirectory=E:workspace2017elk-web -Dmaven.home=E:Maven20190910apache-maven-3.6.1 -Dclassworlds.conf=E:Maven20190910apache-maven-3.6.1binm2.conf "-javaagent:G:idea2017IntelliJ IDEA 2017.3.1libidea_rt.jar=49260:G:idea2017IntelliJ IDEA 2017.3.1bin" -Dfile.encoding=UTF-8 -classpath E:Maven20190910apache-maven-3.6.1bootplexus-classworlds-2.6.0.jar org.codehaus.classworlds.Launcher -Didea.version=2017.3.7 -s E:Maven20190910apache-maven-3.6.1confsettings.xml -Dmaven.repo.local=E:Maven20190910repository package
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.bruceliu.elk.demo:elk-web:jar:1.0-SNAPSHOT
[WARNING] ''build.plugins.plugin.(groupId:artifactId)'' must be unique but found duplicate declaration of plugin org.springframework.boot:spring-boot-maven-plugin @ line 36, column 21
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] 
[INFO] -------------------< com.bruceliu.elk.demo:elk-web >--------------------
[INFO] Building elk-web 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ elk-web ---
[INFO] Using ''UTF-8'' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ elk-web ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:workspace2017elk-webtargetclasses
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ elk-web ---
[INFO] Using ''UTF-8'' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:workspace2017elk-websrctestresources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ elk-web ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ elk-web ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ elk-web ---
[INFO] Building jar: E:workspace2017elk-webtargetelk-web.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.5.4.RELEASE:repackage (default) @ elk-web ---
[INFO] 
[INFO] --- docker-maven-plugin:1.0.0:build (build-image) @ elk-web ---
[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying E:workspace2017elk-webtargetelk-web.jar -> E:workspace2017elk-webtargetdockerelk-web.jar
[INFO] Building image bruceliu/elk-web
Step 1/6 : FROM java
 ---> d23bdf5b1b1b
Step 2/6 : MAINTAINER bruceliu@email.com
 ---> Running in 787e4786fbd4
 ---> 4d4519f52fda
Removing intermediate container 787e4786fbd4
Step 3/6 : WORKDIR /ROOT
 ---> f40dcbc9a9eb
Removing intermediate container 7fa6bbc9d1df
Step 4/6 : ADD /elk-web.jar //
 ---> c7f1107ae3d4
Removing intermediate container f370558f1a38
Step 5/6 : ENTRYPOINT java -jar /elk-web.jar
 ---> Running in e4480ced0829
 ---> b634ca5fa5ad
Removing intermediate container e4480ced0829
Step 6/6 : CMD java -version
 ---> Running in cc6a064ef921
 ---> cf9a5d50326b
Removing intermediate container cc6a064ef921
Successfully built cf9a5d50326b
[INFO] Built bruceliu/elk-web
[INFO] Tagging bruceliu/elk-web with latest
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.329 s
[INFO] Finished at: 2019-12-29T22:44:06+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

Docker一键部署SpringBoot应用的方法,贼快贼好用!

Docker一键部署SpringBoot应用的方法,贼快贼好用!

在《Gradle真能干掉Maven?今天体验了一把,贼爽!》一文中我们讲到了使用Gradle来构建SpringBoot应用,这两天又发现个Gradle插件,支持一键打包、推送Docker镜像。今天我们来讲讲这个插件,希望对大家有所帮助!

SpringBoot实战电商项目mall(40k+star)地址:https://github.com/macrozheng/mall

Gradle Docker Plugin 简介

一款可以通过远程API管理Docker镜像和容器的插件,专为Java应用打造,原生支持SpringBoot。

使用该插件具有如下特性:

  • 与构建工具Gradle及其DSL无缝集成。
  • 在幕后处理Docker客户端和守护程序之间的复杂通信逻辑。
  • 简化了复杂工作流程的定义。
  • 最大程度地减少构建脚本的编写逻辑。

该插件由以下三个插件组成:

  • com.bmuschko.docker-remote-api:提供自定义任务,可以通过远程API与Docker进行交互。
  • com.bmuschko.docker-java-application:为Java应用创建并推送Docker镜像。
  • com.bmuschko.docker-spring-boot-application:为SpringBoot应用创建并推送Docker镜像。

操作镜像

还是以我的脚手架项目mall-tiny为例,让我们来看看使用该插件打包推送Docker镜像是不是够快够简单!

构建镜像

  • 要使用该插件,我们需要在build.gradle中进行如下配置,这里选择使用远程API插件和SpringBoot插件;
plugins {
    id ''com.bmuschko.docker-remote-api'' version ''6.7.0''
    id ''com.bmuschko.docker-spring-boot-application'' version ''6.7.0''
}
  • 然后在ext节点下面定义一个常量,这里定义好了镜像仓库地址,方便我们之后引用;
ext{
    registryUrl=''192.168.5.78:5000''
}
  • 接下来就是非常重要的插件配置了,配置好Docker远程API的访问路径,还有SpringBoot应用镜像相关配置;
docker {
    url = ''tcp://192.168.5.78:2375''
    springBootApplication {
        baseImage = ''java:8''
        maintainer = ''macrozheng''
        ports = [8080]
        images = ["${registryUrl}/mall-tiny/${rootProject.name}:${version}"]
        jvmArgs = [''-Dspring.profiles.active=prod'']
    }
}
  • 接下来我们来解读下这些配置到底有什么作用;
属性类型作用
urlStringDocker远程API访问路径
baseImageStringSpringBoot应用使用的基础镜像
maintainerString项目维护者
portsList<Integer>镜像暴露的端口
imagesSet<String>打包推送的镜像名称
jvmArgsList<String>Java应用运行时的JVM参数
  • 接下来我们直接在IDEA中使用dockerBuildImage命令,即可将应用镜像打包到远程服务器上去;

  • 让我们看下控制台输出的日志,其实就是给我们默认创建了一个Dockerfile(连Dockerfile都省的写了),然后用它来打包Docker镜像;
> Task :dockerBuildImage
Building image using context ''I:\developer\gitee\mall-tiny-gradle\build\docker''.
Using images ''192.168.5.78:5000/mall-tiny/mall-tiny:1.0.0-SNAPSHOT''.
Step 1/8 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/8 : LABEL maintainer=macrozheng
 ---> Running in 9a63f56a03ae
Removing intermediate container 9a63f56a03ae
 ---> ed45af8fff90
Step 3/8 : WORKDIR /app
 ---> Running in 8bd4b513eb23
Removing intermediate container 8bd4b513eb23
 ---> d27759d1d7df
Step 4/8 : COPY libs libs/
 ---> 84c3a983972a
Step 5/8 : COPY resources resources/
 ---> c8a27f3475fc
Step 6/8 : COPY classes classes/
 ---> 3a76a8efc02b
Step 7/8 : ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-cp", "/app/resources:/app/classes:/app/libs/*", "com.macro.mall.tiny.MallTinyApplication"]
 ---> Running in e56ae56fd6eb
Removing intermediate container e56ae56fd6eb
 ---> 22d73f95e756
Step 8/8 : EXPOSE 8080
 ---> Running in b21d898456cb
Removing intermediate container b21d898456cb
 ---> 73684cf8c643
Successfully built 73684cf8c643
Successfully tagged 192.168.5.78:5000/mall-tiny/mall-tiny:1.0.0-SNAPSHOT
Created image with ID ''73684cf8c643''.

BUILD SUCCESSFUL in 34s
5 actionable tasks: 5 executed
10:56:15: Task execution finished ''dockerBuildImage''.
  • 在项目的build\docker文件夹下可以发现这个Dockerfile,具体内容如下:
FROM java:8
LABEL maintainer=macrozheng
WORKDIR /app
COPY libs libs/
COPY resources resources/
COPY classes classes/
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-cp", "/app/resources:/app/classes:/app/libs/*", "com.macro.mall.tiny.MallTinyApplication"]
EXPOSE 8080
  • 打包完镜像之后,直接使用如下命令即可运行项目,注意安装好MySQL和Redis。
docker run -p 8080:8080 --name mall-tiny \
--link mysql:db \
--link redis:redis \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny/logs:/var/logs \
-d 192.168.5.78:mall-tiny/mall-tiny:1.0.0-SNAPSHOT

推送镜像

  • 接下来我们试试推送镜像功能,不过首先需要安装一个镜像仓库,安装可视化镜像仓库可以参考《还在手动部署SpringBoot应用?试试这个自动化插件!》;
  • 推送镜像也是非常简单的,直接在IDEA中使用dockerPushImage命令即可;

  • 推送完成后,在我们的可视化镜像仓库中就可以看到该镜像了。

对比Maven

我们通过把项目clean以后再打包成Docker镜像,对比下使用Gradle和Maven的速度。
  • 使用Gradle进行clean并构建Docker镜像,耗时30s

  • 使用Maven进行clean并构建Docker镜像,耗时58s,果然Gradle还是能比Maven快一倍的!

总结

今天我们体验了一把Gradle和Docker结合使用,发现真是够快够简单。对比Maven速度快了一倍,内置了Dockerfile,大大降低了配置难度。

参考资料

官方文档:https://bmuschko.github.io/gr...

项目源码地址

https://github.com/macrozheng...

本文 GitHub https://github.com/macrozheng/mall-learning 已经收录,欢迎大家Star!

我们今天的关于docker环境安装及springboot+docker在idea上实现一键部署远程服务器idea远程docker部署启动的分享已经告一段落,感谢您的关注,如果您想了解更多关于centos下docker安装及springboot远程发布docker的方法、Docker-Docker 部署 SpringBoot 项目、Docker-Docker部署SpringBoot项目、Docker一键部署SpringBoot应用的方法,贼快贼好用!的相关信息,请在本站查询。

本文标签: