1.版本信息

通过 docker version 命令可以获取当前docker版本信息

Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7f2769b/1.13.1
 Built:           Sun Sep 15 14:06:47 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7f2769b/1.13.1
 Built:           Sun Sep 15 14:06:47 2019
 OS/Arch:         linux/amd64
 Experimental:    false

2.创建一个简单的SpringBoot web应用

2.1maven配置文件如下

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>wang.sunce</groupId>
    <artifactId>docker</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>
    <name>docker</name>
    <description>demo for web</description>

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

  
</project>

2.2 新建项目启动类

创建启动类

@RestController
@SpringBootApplication
public class DockerApplication {

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

    
    @RequestMapping("/test")
    public String test(){
        return "hello world";
    }
}

启动项目并验证 浏览器访问:http://127.0.0.1:8080/test ,返回如下结果

hello world

3.进行对项目进行docker配置

3.1 创建Dockerfile文件

文件目录结果如下

项目结构.png

Dockerfile文件内容

FROM java:8
ADD ./docker-0.0.1.jar  ./app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "./app.jar"]
  • FROM 表示依赖镜像

  • ADD 表示添加内容到镜像

  • EXPOSE 表示声明容器内监听端口

  • ENTRYPOINT 表示指定镜像的默认入口命令

3.2 升级pom文件配置

添加docker registry相关变量到 properties

<image.name>${project.artifactId}:${project.version}</image.name>
  • image.name 镜像名称

在pom文件中添加plugins

<build>
  <plugins>
     <plugin>
         <groupId>com.spotify</groupId>
         <artifactId>docker-maven-plugin</artifactId>
         <version>0.4.13</version>
         <configuration>
          <imageName>${image.name}</imageName>
          <dockerDirectory>./</dockerDirectory>
          <resources>
           <rescource>
            <targetPath>/</targetPath>
            <directory>${project.build.directory}</directory>
            <include>${project.build.finalName}.jar</include>
            </rescource>
           </resources>
          </configuration>
          <executions>
             <execution>
              <phase>install</phase>
              <goals>
                <goal>build</goal>
               </goals>
             </execution>
             <execution>
               <id>tag-image</id>
               <phase>install</phase>
               <goals>
                 <goal>tag</goal>
               </goals>
               <configuration>
                <image>${image.name}</image>
<newName>${registry.url}/${image.name}</newName>
                </configuration>
             </execution>
	     <execution>
               <id>push-image</id>
               <phase>install</phase>
               <goals>
                <goal>push</goal>
               </goals>
               <configuration><imageName>${registry.url}/${project.build.finalName}</imageName>
               </configuration>
             </execution>
          </executions>
     </plugin>
  </plugins>
</build>
  • imageName 表示镜像名称
  • resources 表示需要的资源
  • executions 表示执行的命令集合
  • phase 例如:install 表示执行maven install时
  • goals 表示:对应的目标指令
  • <goal>build</goal> 相当于 docker build 命令
  • <goal>tag</goal> 相当于 docker tag 命令
  • <goal>push</goal> 相当于 docker push 命令

创建镜像

创建镜像.png

4.运行镜像

docker run -p 8080:8080 -d --name docker-demo \
-v /etc/localtime:/etc/localtime docker:0.0.1

5.不依赖Dockerfile 方式

以上操作的方式是需要我们创建Dockerfile文件,并在pom文件中指定文件的位置,我们也可以不依赖Dockerfile文件,来创建应用镜像;需要我们在pom配置plugin时,加上相关配置即可

添加相关变量
添加docker registry相关变量到 properties

<registry.url>registry地址</reqistry.url>
  • registry.url registry地址,例如registry.sunce.xin
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
        <imageName>${project.build.finalName}</imageName>
        <dockerDirectory>./</dockerDirectory>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
        <resources>
            <rescource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </rescource>
        </resources>
    </configuration>
    <executions>
        <execution>
            <phase>install</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
        <execution>
            <id>tag-image</id>
            <phase>install</phase>
            <goals>
                <goal>tag</goal>
            </goals>
            <configuration>
                <image>${project.build.finalName}</image>
                <newName>${registry.url}/${project.build.finalName}</newName>
            </configuration>
        </execution>
        <execution>
            <id>push-image</id>
            <phase>install</phase>
            <goals>
                <goal>push</goal>
            </goals>
            <configuration>
                <imageName>${registry.url}/${project.build.finalName}</imageName>
            </configuration>
        </execution>
    </executions>
</plugin>

5.扩展阅读

5.1 Dockerfile 文件指令集

分类指令说明
配置指令ARG定义创建镜像过程中使用的变量
配置指令FROM指定所创建镜像的基础镜像
配置指令LABEL为生成的镜像添加元数据标签
配置指令EXPOSE声明镜像内服务监听的端口
配置指令ENV指定环境变量
配置指令ENTRYPOINT指定镜像默认入口命令
配置指令VOLUME创建一个数据挂载点
配置指令USER指定运行容器是的用户名
配置指令WORKDIR配置工作目录
配置指令ONBUILD创建子镜像时指定自动执行的操作命令
配置指令STOPSIGNAL指定退出的信号值
配置指令HEALTHCHECK指定如何进行健康检查
操作指令RUN运行指定命令
操作指令CMD启动容器是指定默认执行命令
操作指令ADD添加内容到镜像
操作指令COPY复制内容到镜像

作者是一个技术肥宅,还在不断的学习进步中,十分欢迎各位 杠精 读者指出文中不足之处,欢迎您来留言提问;也欢迎转载,烦请注明出处。