前言

Docker作为一个容器无论在生产环境还是开发环境,真的是让小编爱不释手,使用以前电脑放在家里用来做自己的私人服务器使用docker技术安装各种不同的服务真的是爽歪歪。本文通过介绍在docker中运行eureka服务注册中心项目来跟大家介绍一下docker运行spring cloud工程。

一、编写一个eureka服务注册中心并测试运行

1、编辑pom文件

在idea中创建一天eureka注册中心的项目,编辑pom文件。

首先,加入eureka注册中心依赖

<dependencies>
    <!--eureka服务端依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

如果在idea中运行eureka注册中心只添加上面依赖就可以了,如果要把项目使用docker容器中运行就需要将项目打成jar包,在编辑dockerfile文件构建成docker镜像文件,所以需要加入spring-boot-maven-plugin项目,用maven工具将maven打包成jar包,否则打包成jar包后找不到main函数。

<build>
     <plugins>
         <!--添加maven-plugin项目.使用maven将项目打包成jar包-->
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
     </plugins>
</build>

2、编辑eureka注册中心项目

编辑完pom注册中心之后,就可以正常编辑eureka注册中心的业务逻辑,这里不是本文重点,本文就不再赘述了。

3、打包eureka注册中心项目并运行

编辑完项目后可以使用maven工具的package命令,或者使用idea中的maven插件将项目打包,并使用java -jar命令测试运行。

二、构建docker镜像运行项目

1、使用docker命令构建运行eureka注册中心项目

1)编辑docker file文件

编辑docker file文件可以分为以下几个步骤:

  • 指定基础镜像

  • 添加镜像作者

  • 将可执行jar包添加到基础镜像的跟目录下

  • 暴露项目网络端口

  • 在基础镜像上中运行,即在基础镜像中执行的命令

    这里需要注意的是,第三个参数需要和ADD命令中的第二个参数相同,因为在ADD命令中已讲可执行jar包添加到名称为第二个参数的容器镜像中,所以二者需要相同,否则构建是还报找不到可执行jar包的错误。

# 指定基础镜像
FROM java:8
# 作者
MAINTAINER Strive to Positive Energy
# 把可执行jar包复制到基础镜像的跟目录下
ADD eureka3200-1.0-SNAPSHOT.jar /eureka3200.jar
# 镜像要暴露端口,如果需要使用端口,在执行run命令时使用-p命令映射
EXPOSE 3200
# 在镜像运行,为容器后期执行的命令
ENTRYPOINT ["java","-jar","/eureka3200.jar"]

2)构建docker镜像

DockerFile文件和可执行jar包导入Linux系统,DockerFile文件中ADD命令可中执行jar没有写文件路径,默认与DockerFile在同一路径下,如果不在同一路径下需要在jar文件名前添加文件所在路径。

使用docker build命令构建docker镜像:

docker build -t s2pe/eureka:v1.0 .

参数介绍:

  • -t 为指定镜像名字和TAG

  • . 为当前目录,这里实际上是一个剩下文路径

构建结果:

Sending build context to Docker daemon 45.18 MB
Step 1/5 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/5 : MAINTAINER Strive to Positive Energy
 ---> Using cache
 ---> f5df4502e2b6
Step 3/5 : ADD eureka3200-1.0-SNAPSHOT.jar /eureka3200.jar
 ---> 20674a1a56c2
Removing intermediate container 55cf687bec5b
Step 4/5 : EXPOSE 3200
 ---> Running in 57e304e6fa6f
 ---> d0b85c07eddb
Removing intermediate container 57e304e6fa6f
Step 5/5 : ENTRYPOINT java -jar /eureka3200.jar
 ---> Running in 3c876154a91f
 ---> 828a05073472
Removing intermediate container 3c876154a91f
Successfully built 828a05073472

3)运行构建的docker镜像

运行构建的docker镜像,访问docker容器:

docker run -d --name eureka -p 3200:3200 s2pe/eureka:v1.0

访问结果:
访问结果

2、使用Intellij IDEA中Docker插件构建运行eureka注册中心项目

1)准备工作

使用Intellij IDEA中的Docker插件也可以构建运行,首先需要在docker主机中配置远程访问docker,在idea中安装Docker插件,并连接docker宿主机。

2)配置运行环境

从Run->Edit Configrations进入配置页面,需要配饰信息和注意点如下:

  • Name

    运行环境名称,在idea中运行环境的名称,这里可以任意取名

  • Server

    选择已经配置好的docker宿主机。

  • DockerFile

    docker file文件

  • Context folder

    上下文配置文件夹,这里指的是docker file文件上下文路径,上文的Docker文件中没有指定jar包的文件路径,所以这里的上下文配置文件夹需要配置成可执行jar包生成的文件夹。利用maven插件默认将jar生成在工程目录下的target文件夹下,所以Context folder应该写到target文件夹。

  • Image tag

    docker镜像名称和TAG,对应docker build命令中的-t属性

  • Run build image

    勾选这个属性,构建镜像时先构建可执行jar包

  • Container name

    容器名称。

  • Publish expose ports to the host interfaces

    选的暴露端口形式,因为该进程值暴露一个端口,所以选择Specifiy,在Bind ports中现在暴露的端口。

  • Bind ports

    暴露端口,相当于docker run命令中的-p命令

  • Command preview

    可以查看构建和运行命令。

  • Active tool windows

    勾选工具栏窗口,可以看到构建运行中的日志。
    配置

3)运行配置查看结果

运行日志:

Deploying 'eureka Dockerfile: eureka3200/src/main/Dockerfile'...
Building image...
Preparing build context archive...
[==================================================>]10/10 files
Done

Sending build context to Docker daemon...
[==================================================>] 40.13MB
Done

Step 1/6 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/6 : MAINTAINER Strive to Positive Energy
 ---> Running in 061f13264587
 ---> c9354e37b10d
Removing intermediate container 061f13264587
Step 3/6 : VOLUME /tmp
 ---> Running in 5967c64716b3
 ---> e917c8ebde82
Removing intermediate container 5967c64716b3
Step 4/6 : COPY /eureka3200-1.0-SNAPSHOT.jar /eureka3200.jar
 ---> 6a4c4cfd3d1f
Removing intermediate container 742e61aa7fbc
Step 5/6 : EXPOSE 3200
 ---> Running in 6c3ed881c55e
 ---> 4bbe1580bd8f
Removing intermediate container 6c3ed881c55e
Step 6/6 : ENTRYPOINT java -jar /eureka3200.jar
 ---> Running in 63a7dd42d0d9
 ---> f6a87bcd6d6d
Removing intermediate container 63a7dd42d0d9
Successfully built f6a87bcd6d6d
Creating container...
Container Id: 8677558291e0b4426dc7344a021e5438591555127374d34ecd5d0f1676c61962
Container name: 'eureka'
Attaching to container 'eureka'...
Starting container 'eureka'
'eureka Dockerfile: eureka3200/src/main/Dockerfile' has been deployed successfully.

在日志中可以看到构建运行的每个步骤,如果有错误可以在此查找。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐