Docker容器镜像生成的三种方法详解

 更新时间:2026年04月21日 09:51:08   作者:爱码少年 00fly.online  
本文介绍了三种生成Docker镜像的方法:1)使用Dockerfile配合docker build命令;2)通过docker-compose.yml文件构建;3)借助docker-maven-plugin插件,以h2数据库为例,详细说明了Dockerfile编写要点和各方法的实现步骤,需要的朋友可以参考下

一、简要概述

容器化部署, 生成docker镜像是基础。如何生成docker镜像,其法有三。

二、生成镜像的三种方式

1,准备Dockerfile

下面我们以h2-1.4.200.jar生成镜像为例来说明。
首先,定义Dockerfile 文件

#基础镜像
FROM adoptopenjdk/openjdk8-openj9:alpine-slim

#设置时区与时间
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

#项目jar包引入
COPY *.jar  /app.jar

#指定交互端口
EXPOSE 8082
EXPOSE 9092

CMD ["-web", "-webAllowOthers", "-tcp", "-tcpAllowOthers", "-ifNotExists"]

#启动脚本
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Xshareclasses", "-Xquickstart", "-cp", "/app.jar", "org.h2.tools.Server"]

Dockerfile 是一个用来构建镜像的文本文件, 简单来说就是通过此文件定义了打包镜像的过程。

常见命令如下

2,借助docker build

Dockerfile 同级创建img-build.sh,内容如下

#!/bin/bash
curl -k -O https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar
docker build --no-cache -t registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200 .

3,借助docker compose build

Dockerfile 同级创建docker-compose.yml文件,内容为:

services:
  h2-server:
    image: registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200
    build:
      context: .
      dockerfile: Dockerfile
    container_name: h2-server
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 64M
        reservations:
          cpus: '2.0'
          memory: 64M
    ports:
    - 8082:8082
    restart: on-failure
    logging:
      driver: json-file
      options:
        max-size: 5m
        max-file: '1'

重点是这几行,分别定义了镜像名,路径,dockerfile文件名等生成镜像需要的参数。

image: registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200
build:
  context: .
  dockerfile: Dockerfile

新建img-build.sh

#!/bin/bash
curl -k -O https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar
docker compose build --no-cache

4,借助docker-maven-plugin

插件有3种,分别是

  • com.spotify.docker-maven-plugin 已停更,官方建议dockerfile-maven-plugin
  • com.spotify.dockerfile-maven-plugin 近两年无更新,不支持操作容器
  • io.fabric8.docker-maven-plugin 支持直接操作容器,且仍在持续更新,推荐使用

需要说明的是,本文中连接远程docker服务器未启用TLS,具有安全风险。

5,推送镜像

docker-maven-plugin已经支持自动推送镜像到公开或私有仓库。下面说明手动推送过程

首先,在docker服务器登录阿里云docker镜像仓库,输入密码登录。

docker login --username=<用户名>  registry.cn-shanghai.aliyuncs.com

其次,执行命令推送镜像。例如:

docker push registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200

三、使用比较

方式运行环境优劣说明
docker build服务器docker环境环境依赖最少
docker compose build服务器docker-compose环境依赖docker/docker-compose,编排文件职责不单一
docker-maven-plugin本地连接远程docker环境灵活,java工程编译时绑定

到此这篇关于Docker容器镜像生成的三种方法详解的文章就介绍到这了,更多相关Docker容器镜像生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 3分钟用Docker搭建一个Minecraft服务器

    3分钟用Docker搭建一个Minecraft服务器

    这篇文章主要介绍了3分钟用Docker搭建一个Minecraft服务器的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • docker学习笔记之把容器commit成镜像的方法

    docker学习笔记之把容器commit成镜像的方法

    本篇文章主要介绍了docker学习笔记之把容器commit成镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Docker搭建Minio容器的流程步骤(完整详细版)

    Docker搭建Minio容器的流程步骤(完整详细版)

    Minio 是一个基于Apache License v2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能,它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,本文将给大家介绍Docker搭建Minio容器的流程步骤,需要的朋友可以参考下
    2024-08-08
  • 在Ubuntu上使用Grafana监控Docker的方法

    在Ubuntu上使用Grafana监控Docker的方法

    如今越来越多的公司开始使用Docker,一谈起Docker总是会跟着让人联想到轻量这个词,甚至会有一种通过Docker启动一个服务会节省很多资源的错觉。然而Docker的「轻」也只是相对于传统虚拟机而已。Docker如何监控呢?本文就给大家介绍在Ubuntu上如何使用Grafana监控Docker。
    2016-12-12
  • linux下使用Docker Compose部署Spug实现公网远程访问的过程

    linux下使用Docker Compose部署Spug实现公网远程访问的过程

    这篇文章主要介绍了linux下使用Docker Compose部署Spug实现公网远程访问,本例演示搭建使用docker compose 方式安装Spug,并结合cpolar,需要的朋友可以参考下
    2023-11-11
  • 解决Mac Docker x509证书的问题

    解决Mac Docker x509证书的问题

    这篇文章主要介绍了解决Mac Docker x509证书的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker prune命令定时清理不常用数据的操作方法

    docker prune命令定时清理不常用数据的操作方法

    使用docker引擎服务时间久了,会发现磁盘空间越来越大,现在要删除关于docker相关不用的数据来释放磁盘空间,这篇文章主要介绍了docker prune命令 可定时清理不常用数据,需要的朋友可以参考下
    2022-10-10
  • IDEA集成Docker实现一键部署的详细过程

    IDEA集成Docker实现一键部署的详细过程

    这篇文章主要介绍了IDEA集成Docker实现一键部署,Docker基于Windows集成IDEA,本文分步骤通过图文实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • docker gitea drone实现超轻量级CI CD实战详解

    docker gitea drone实现超轻量级CI CD实战详解

    这篇文章主要为大家介绍了docker gitea drone实现超轻量级CI CD实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Docker部署kafka遇到的问题及解决

    Docker部署kafka遇到的问题及解决

    在启动容器后,状态显示为“Exited”,日志显示连接ZooKeeper超时,原因是端口不通,通过配置安全组相关端口后重新启动容器,查看日志显示“started”,说明容器启动成功
    2024-09-09

最新评论