DockerFile介绍与使用

embedded/2024/9/23 8:56:15/

一、DockerFile介绍

        大家好,今天给大家分享一下关于 DockerFile 的介绍与使用,DockerFile 是一个用于定义如何构建 Docker 镜像的文本文件,具体来说,具有以下重要作用:

  • 标准化构建:提供了一种统一、可重复的方式来构建镜像,确保不同环境下构建出的镜像具有一致性。
  • 定制化:可以精确地指定所需的软件、配置、文件等,满足特定应用的需求。
  • 版本控制:可以与代码一起进行版本管理,方便跟踪和回滚到特定的镜像版本。
  • 自动化构建流程:使构建过程自动化,减少人为错误和繁琐的操作。
  • 可共享和复用:可以方便地在团队或社区中共享,其他人可以基于此构建相同功能的镜像。
  • 分层构建:指令的执行会形成镜像的不同层,提高了存储和传输效率,并且只在层发生变化时重新构建相应部分。
  • 环境隔离:确保应用在不同环境中具有相同的运行基础,实现更好的可移植性。
  • 快速部署:构建好的镜像可以快速部署到多个服务器或节点上,加速应用的上线过程。

        例如,通过 Dockerfile 可以指定基础镜像、安装软件包、设置环境变量、创建特定目录、复制文件等操作,最终构建出符合要求的定制化 Docker 镜像。

关于Dcoker安装与常用命令,可以参考:

Docker在Windows与CentOS上的安装

Docker常用命令

二、DockerFile内容

        Dockerfile 是一个用来构建 Docker 镜像的文本文件,开发者可以根据具体需求在 Dockerfile 中编写一系列指令,然后通过 Docker 引擎根据该 Dockerfile 来构建定制化的 Docker 镜像,这些镜像可以方便地进行部署、分发和运行,以下是关于 DockerFile 中一些常见的指令。

FROM 指令

指定基础镜像。
示例:

FROM ubuntu:latest

RUN 指令

用于执行命令,在镜像中安装软件等。
示例:

RUN apt-get update && apt-get install -y nginx

COPY 指令

将本地文件或目录复制到镜像中。
示例:

COPY ./index.html /usr/share/nginx/html

ADD 指令

类似 COPY,但还可以处理 URL 等更复杂情况。
示例:

ADD somefile.tar.gz /app

ENV 指令

设置环境变量。
示例:

ENV MY_VAR value

EXPOSE 指令

声明容器运行时要开放的端口。
示例:

EXPOSE 8080

WORKDIR 指令

设置工作目录。
示例:

WORKDIR /app

CMD 指令

指定容器启动后的默认执行命令。
示例:

CMD ["nginx", "-g", "daemon off;"]

ENTRYPOINT 指令

类似 CMD,但更倾向于定义容器的主程序。
示例:

ENTRYPOINT ["python", "app.py"]

VOLUME 指令

创建数据卷。
示例:

VOLUME ["/data"]

三、DcoerkFile示例

以下是一个完整的 DcokerFile 示例,大家可以根据自己的需求,创建需要的 DockerFile 即可。

FROM debian:buster  // 指定基础镜像为 Debian 的 buster 版本
LABEL maintainer="Example"  // 添加标签,说明维护者信息ENV APP_HOME=/myapp  // 设置环境变量 APP_HOME 为/myapp
RUN apt-get update &&  // 执行命令,更新软件包列表apt-get install -y curl nginx  // 安装 curl 和 nginxCOPY src/ /myapp/src/  // 将本地的 src 目录复制到镜像中的/myapp/src 目录
ADD extra-files.tar /myapp/extra/  // 添加一个压缩文件到/myapp/extra 目录
VOLUME ["/data"]  // 创建一个名为/data 的数据卷EXPOSE 80 443  // 声明容器要暴露的 80 和 443 端口WORKDIR $APP_HOME  // 设置工作目录为 APP_HOME 所指定的路径
CMD ["nginx", "-g", "daemon off;"]  // 指定容器启动后的默认命令(启动 nginx)
ENTRYPOINT ["/bin/bash"]  // 指定容器的入口点为/bin/bash

http://www.ppmy.cn/embedded/41659.html

相关文章

workerman 实现推送实时数据到前端

首先要说明一下,实时推送是有两个socket服务端和两个socket的客户端 我们分别起名叫做 外层服务端 (开启服务主进程 创建一个 websoket 连接)ws:// 内层服务端 (在开户主进程的时候,内部又创建的一个 socket)text:// 外层客户端 (这是由前端的用户端 使用js 创建的一个 w…

DBeaver配置离线驱动

因为部署的服务器为无网环境,所以在服务器上使用DBeaver需要配置离线驱动 我们在有网的环境下,安装DBeaver。把驱动下载下来,然后再拷贝到没网的设备上 一、下载驱动 1.在有网的设备上,打开DBeaver 2.找到窗口,选择…

1-k8s常见注意事项

问题一:让master参与服务调度,不做control-plane,不设置可以吗 提问: 以下是让master参与服务调度,不做control-plane kubectl taint node k8s-01-master node-role.kubernetes.io/control-plane- kubectl label node…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测,2024.4.24,华为机试 🏩题目一描述:输入格式输出格式样例1样例2样例3数据范围解题思路一:dfs解题思路二:直接二分查找哇!解题思路三&am…

蓝桥杯备战15.完全二叉树的权值

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; #define endl \n #define int long long const int N 2e510; int a[N]; signed main() {std::ios::sync_with_stdio(0),cin.ti…

TypeScript与DOM操作:深入理解相关类型及实战示例

TypeScript与DOM操作&#xff1a;深入理解相关类型及实战示例 基础类型介绍 Document 代表整个文档的根节点。它是所有DOM操作的起点。 示例&#xff1a; const docTitle document.documentElement.title; // 获取文档标题 document.title "新标题"; // 设置文…

Java相关知识点的考点

什么是jvm&#xff0c;就是java自己架构的一个平台&#xff0c;让java代码在这个平台上执行&#xff0c;屏蔽了开发者与操作系统的接触&#xff0c;而这个Java自身架构出的平台则被称为JVM。 虚拟机两种架构模型——栈式、寄存器式 栈式&#xff1a;与内存交互要经过出栈和入栈…

Java | 增强for底层工作机制

✍&#x1f3fc;作者&#xff1a;周棋洛&#xff0c;bilidown开发者。 ♉星座&#xff1a;金牛座 &#x1f3e0;主页&#xff1a;我的个人网站 &#x1f310;关键&#xff1a;Java 增强for 工作机制 目录 引言增强for循环语法增强for工作机制探究简单总结1.对于实现了Iterable接…