Docker镜像打包、共享和运行

1 Docker简介

Docker是一个用于开发、交付和运行应用程序的开放平台。它支持Linux、Windows和macOS平台,其架构如下:


Docker架构
  • Client:代表Docker客户端,一个命令行工具,使用REST API与Docker服务端通信。
  • Docker daemon:代表Docker服务端守护程序,用于监听Docker客户端命令,并管理Docker对象(image、container、文件系统和网络等)。
  • Registry:Docker镜像仓库,Docker Hub为Docker官方Docker镜像仓库。考虑到网速等原因,本文使用阿里云的Docker镜像仓库。
  • Image:Docker镜像,是一个带创建Docker容器说明的应用程序及其依赖的集合。
  • Container:Docker容器,是镜像的可运行实例。Docker容器经常与虚拟机概念进行比较,以下借助官方图片对两者进行说明:


    Docker容器

    虚拟机

    Docker容器通过Docker进行管理,Docker容器只包含应用程序及其依赖程序。虚拟机通过Hypervisor进行管理,虚拟机包含了冗余的访客操作系统,在访客操作系统上运行应用程序及其依赖程序。因此Docker容器相比虚拟机更加轻量化。

2 安装Docker

我使用的电脑是Windows 7,因此需要使用Docker Toolbox安装Docker(Windows 10使用Docker Desktop)。

2.1 检查CPU是否支持并启用虚拟化

Docker服务端依赖Linux内核的功能,不能直接在Windows中运行,因此需要借助Docker Machine。Docker Machine用于在Windows中创建Linux(Alpine Linux)虚拟机,该虚拟机用于托管Docker服务端。既然要创建虚拟机,必然要保证CPU支持并启用虚拟化,否则无法进行后续步骤。检查CPU是否支持并启用虚拟化的方法有很多种,我这里使用的是Speccy工具,下载地址:https://www.ccleaner.com/speccy

Speccy检查结果

如果不支持虚拟化,则无法进行后续步骤;如果支持但未启用,则启用虚拟化(具体启用方式根据电脑不同有所差异,请自行寻找方法)。

2.2 安装Docker Toolbox

Docker Toolbox的安装过程很简单,不再赘述。Docker Toolbox下载地址:https://github.com/docker/toolbox/releases
安装完成后运行Docker Quickstart Terminal,Docker Quickstart Terminal会自动初始化,初始化成功如下图所示:

Docker Quickstart Terminal

按照国际惯例,先从Hello World开始。执行以下命令会从Docker Hub拉取并运行hello-world应用程序:

docker run hello-world

执行成功如下图所示:


hello-world

3 打包和共享Docker镜像

以IntelliJ IDEA为例,创建一个Spring Boot应用程序,并使用jib-maven-plugin插件对应用进行打包。使用jib-maven-plugin插件可避免在项目中创建Dockerfile文件。
pom.xml:




    4.0.0

    com.lujiatao
    spring-boot-for-docker
    1.0-SNAPSHOT

    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.2.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.google.cloud.tools
            jib-maven-plugin
            1.8.0
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
                com.google.cloud.tools
                jib-maven-plugin
                1.8.0
                
                    
                    true
                    
                        
                        openjdk:13-jdk-alpine
                    
                    
                        
                        registry.cn-chengdu.aliyuncs.com/lujiatao/spring-boot-for-docker:${project.version}
                        
                        
                        
                            your-username
                            your-password
                        
                    
                    
                        
                        USE_CURRENT_TIMESTAMP
                    
                
                
                    
                        compile
                        
                            
                            build
                        
                    
                
            
        
    


SpringBootForDocker.java:

package com.lujiatao.springbootfordocker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class SpringBootForDocker {

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

    @GetMapping
    public String index() {
        return "Hello Spring Boot For Docker!";
    }

}

在IntelliJ IDEA中执行以下命令打包并共享镜像到阿里云:

mvn clean compile

推送镜像耗时比较久,完成后可以在阿里云上看到该镜像:


共享Docker镜像到阿里云

4 运行Docker镜像

在Docker Quickstart Terminal中执行以下命令拉取镜像到本地仓库:

docker pull registry.cn-chengdu.aliyuncs.com/lujiatao/spring-boot-for-docker:1.0-SNAPSHOT

在Docker Quickstart Terminal中执行以下命令运行该应用程序:

docker run -p 8000:8080 -d --name sb4d registry.cn-chengdu.aliyuncs.com/lujiatao/spring-boot-for-docker:1.0-SNAPSHOT

访问http://192.168.99.100:8000/,如下图所示访问成功:


访问成功

5 参考文献

Docker Get Started:https://docs.docker.com/get-started/
Install Docker Toolbox on Windows:https://docs.docker.com/toolbox/toolbox_install_windows/
Spring Boot with Docker:https://spring.io/guides/gs/spring-boot-docker/

你可能感兴趣的:(Docker镜像打包、共享和运行)