首页 > 其他分享 >自动化构建Docker镜像的标准方法(一篇带你了解)

自动化构建Docker镜像的标准方法(一篇带你了解)

时间:2024-03-21 19:01:50浏览次数:30  
标签:构建 CMD 指令 ENTRYPOINT 自动化 镜像 Docker Dockerfile

Dockerfile 是一个文本文件,开发者使用它来定义如何构建一个Docker镜像。它是自动化构建Docker镜像的标准方法,包含了用于构建镜像的一系列指令,这些指令会被Docker引擎按顺序逐行解析并执行。

构建镜像时,通过在命令行中运行 docker build 并指定Dockerfile所在的路径来创建镜像:

docker build -t 镜像名

2.准备

2.1准备一个java类

import java.util.Timer;
import java.util.TimerTask;
public class App {

    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("running");
            }
        },5000,5*1000);
        
    }

}

 2.2标准dockerfile文件格式

# 基础镜像
FROM openjdk:8
# 作者
LABEL maintainer="heimi"
# 工作目录
WORKDIR /opt
# 复制文件
COPY . /opt/
# 编译java类
RUN javac App.java
# 运行java类
#CMD ["java", "App"]
ENTRYPOINT [ "java", "App" ]

这个示例Dockerfile的功能是构建一个基于OpenJDK 8镜像的Docker镜像。它的构建过程包括以下步骤:

1. 使用 FROM 指令指定基础镜像,这里使用的是OpenJDK 8镜像。

2. 使用 WORKDIR 指令设置工作目录为 /opt ,后续的操作都在这个目录下进行。

3. 使用 COPY 指令将当前目录下的所有文件复制到容器的 /opt 目录下。

4. 使用 RUN 指令在容器中执行命令,这里是使用javac编译App.java文件。

5. 使用 CMD 指令在容器启动时执行命令,这里是执行Java应用程序。

通过以上步骤,我们可以使用该Dockerfile构建一个包含Java应用程序的镜像,并在容器启动时执行Java应用程序。

2.3构建镜像

当你有了上述的Dockerfile文件后,你可以使用 docker build 命令来构建Docker镜像。以下是使用 docker build 命令的示例:

1. 首先,打开终端并进入包含Dockerfile的目录。

2. 运行以下命令来构建镜像:

 docker build -t myapp:v1 .
//后面的.容易忽略

解释:

-t myapp:v1 :指定构建的镜像名称为 myapp:v1 ,你可以自定义镜像名称。

. :表示Dockerfile所在的当前目录。

3. Docker引擎将会根据Dockerfile的指令和参数开始构建镜像。它会执行每个指令,并在构建过程中显示相应的输出信息。 

运行镜像

docker run -t demo:v1 /bin/bash

4.CMD 与 ENTRYPOINT 区别

在Dockerfile中, CMD 和 ENTRYPOINT 都是用于定义容器启动时要执行的命令或脚本。它们之间有一些区别:

CMD 指令:

- CMD 指令用于设置容器启动时要执行的默认命令。它可以有多种形式:

- CMD ["executable","param1","param2"] :使用JSON数组格式,推荐使用这种形式。

- CMD command param1 param2 :使用命令格式,不推荐使用这种形式。

- 如果在运行镜像时指定了要运行的命令,那么 CMD 指令将被覆盖。 docker run app206:v1 /bin/bash

- CMD 指令可以被Dockerfile中的多个 CMD 指令覆盖,但只有最后一个 CMD 指令会生效。

ENTRYPOINT 指令:

- ENTRYPOINT 指令类似于 CMD ,用于设置容器启动时要执行的命令。它也可以有多种形式:

- ENTRYPOINT ["executable","param1","param2"] :使用JSON数组格式,推荐使用这种形式。

- ENTRYPOINT command param1 param2 :使用命令格式,不推荐使用这种形式。

- 与 CMD 不同的是, ENTRYPOINT 指令的参数不会被覆盖。如果在构建镜像时指定了要运行的命令,它将作为参数传递给 ENTRYPOINT 指令。

综上所述, CMD 指令用于设置默认的容器启动命令,而 ENTRYPOINT 指令用于设置始终执行的命令。 ENTRYPOINT 指令更适合用于定义容器的主要执行逻辑,而 CMD 指令则更适合用于提供默认参数或允许在运行容器时动态修改命令。

标签:构建,CMD,指令,ENTRYPOINT,自动化,镜像,Docker,Dockerfile
From: https://blog.csdn.net/m0_64107427/article/details/136903175

相关文章

  • Docker指令
    systemctlstartdocker启动dockersystemctlstopdocker关闭dockersystemctlstatusdocker查看运行状态systemctlrestartdocker重启dockersystemctlpull镜像名拉去镜像dockerrun镜像名运行镜像dockerrmi-f镜像名/镜像Iddockerrmi-f$(dockerimage-......
  • docker部署 Jira
    环境介绍使用docker-compose安装Jira项目管理系统。操作系统CentOSLinuxrelease7.9.2009(Core)资源配置CPU:2MEM:4gDISK:100gdocker版本docker版本不做统一限制,只要能够运行容器即可。root@localhost(192.168.199.152)~>dockerversionClient:D......
  • 【EI会议征稿通知】第十届机械工程、材料和自动化技术国际会议(MMEAT 2024)
    2024年第十届机械工程、材料和自动化技术国际会议(MMEAT2024)202410th InternationalConferenceonMechanicalEngineering,MaterialsandAutomationTechnology 2024年第十届机械工程、材料和自动化技术国际会议(MMEAT2024)将于2024年06月21-23日在中国武汉举行。......
  • Python安全脚本之自动化子域名收集
    声明:本工具仅用于日常学习使用,禁止用于非法域名收集,否则后果由使用者承担!!!在信息收集中少不了一些脚本的辅助,本文将讲解如何编写一个自动化子域名收集脚本代码及注释如下:fromconcurrent.futuresimport*importrequestsbanner='''_________......
  • 在 Vagrant 中安装镜像(ISO文件)
    1.添加box文件使用vagrantboxadd命令添加一个基础的box文件,如果本地没有可以从远端下载。vagrantboxaddhashicorp/precise642.初始化项目目录选择一个目录作为Vagrant项目目录,并使用vagrantinit初始化。mkdirmyprojectcdmyprojectvagrantinithashicor......
  • openwrt的docker编译环境
    version:'3'services:ubuntu-lxde-novnc:image:docker-ubuntu-lxde-novnc:latestcontainer_name:ubuntu-lxde-novncrestart:alwaysprivileged:trueenvironment:-TZ=Asia/Shanghai-HTTP_PASSWORD=password......
  • docker 数据卷之间的继承
     1.宿主vs容器之间映射添加容器卷 2. 读书规则映射添加说明: 3. 卷的继承和共享:命令:dockerrun[-it]--privileged=true--volumes-fromu1--name=u2ubuntuu1是父容器,u2是取得子容器别名  即使容器1挂了,容器2和宿主机依然可以双向互通。......
  • 如何在Docker容器启动时自动运行脚本
    本文分享自华为云社区《如何在Docker容器启动时自动运行脚本》,作者:皮牙子抓饭。如何在Docker容器启动时自动运行脚本在使用Docker构建应用程序时,有时我们希望在启动Docker容器时自动执行一些脚本,以初始化应用程序或执行一些必要的操作。本文将介绍如何在Docker容器启动时自......
  • 从零开始写 Docker(八)---实现 mydocker run -d 支持后台运行容器
    本文为从零开始写Docker系列第八篇,实现类似dockerrun-d的功能,使得容器能够后台运行。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大致认识:核心原理:深入理解Docker核心原理:Namespace、Cgroups和Rootfs基于......
  • Linux离线安装Docker-Oracle_11g
    拉取oracle11g镜像dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g创建11g容器dockerrun-d-p1521:1521--nameoracle11gregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g查看容器是否创建成功dockerps-a导出oracle容器,查看正在运......