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
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8080
ENTRYPOINT ["java", "-jar","-Duser.timezone=GMT+08", "./app.jar"]
  • FROM 表示依赖镜像

  • ADD 表示添加内容到镜像

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

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

  • “-Duser.timezone=GMT+08” 解决时区问题

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone

解决docker时区问题

3.2 升级pom文件配置

添加docker registry相关变量到 properties

<image.name>${project.artifactId}:${project.version}</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 复制内容到镜像

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