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容器镜像生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker打包前端项目的实现示例

    docker打包前端项目的实现示例

    本文介绍了如何将前端项目打包到Docker容器中,包括编写Dockerfile文件、创建镜像和容器以及解决部署过程中遇到的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • docker分布式部署jumpserver实践

    docker分布式部署jumpserver实践

    文章介绍了如何部署分布式JumpServer,包括定义网络和数据持久化、部署数据库、配置Redis密码、生成随机加密秘钥并启动JumpServer容器,作者建议在启动前检查SECRET_KEY是否一致,以确保数据库加密字段的解密
    2026-03-03
  • 如何恢复docker容器数据

    如何恢复docker容器数据

    项目测试环境数据库数据丢失, 我们可以利用数据卷可以进行恢复数据,下面我来记录一下,希望此文章对各位有所帮助
    2021-05-05
  • Docker 退出container后保持继续运行的操作

    Docker 退出container后保持继续运行的操作

    这篇文章主要介绍了Docker 退出container后保持继续运行的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker overlay 网络搭建的方法

    Docker overlay 网络搭建的方法

    Overlay网络是指通过在现有网络上叠加一个软件定义的逻辑网络,这篇文章主要介绍了Docker overlay 网络搭建的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • docker安装kong网关的方法示例

    docker安装kong网关的方法示例

    这篇文章主要介绍了docker安装kong网关的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Windows Server 2016 安装 Docker的过程及遇到问题

    Windows Server 2016 安装 Docker的过程及遇到问题

    若要在 Windows Server 上安装 Docker,可以使用由 Microsoft 发布的 OneGet 提供程序 PowerShell 模块,接下来通过本文给大家介绍Windows Server 2016 安装 Docker的过程及遇到问题,一起看看吧
    2021-09-09
  • Dockerfile中CMD和ENTRYPOINT命令详解

    Dockerfile中CMD和ENTRYPOINT命令详解

    Dockerfile中的ENTRYPOINT指令和CMD指令都可以设置容器启动时要执行的命令,但用途是有略微不同的。下面这篇文章主要给大家介绍了关于Dockerfile中CMD和ENTRYPOINT命令的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • Linux下docker 容器退出bash的两种实现方法

    Linux下docker 容器退出bash的两种实现方法

    这篇文章主要介绍了Linux下docker 容器退出bash的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 使用Dockerfile脚本定制镜像的方法

    使用Dockerfile脚本定制镜像的方法

    Dockerfile 是⼀个⽂本⽂件,其内包含了⼀条条的指令(Instruction),每⼀条指令构建⼀层,因此每⼀条指令的内容,就是描述该层应当如何构建,这篇文章主要介绍了使用Dockerfile脚本定制镜像,需要的朋友可以参考下
    2022-07-07

最新评论