Docker(二) Dockerfile 使用介绍

本文主要介绍了Dockerfile相关知识。阐述了Docker镜像特点,指出其定制存在的问题。而Dockerfile是一个文本文件,包含一条条指令,每条指令构建一层,可解决镜像定制的重复、透明性和体积问题。还提及了Dockerfile文件格式及构建镜像相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

图解Docker 镜像、容器和 Dockerfile 的关系:

1567403-20190117144702955-2091621482.png

一、Dockerfile的概念

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦。

二、Dockerfile的文件格式

##  Dockerfile文件格式

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
 
# 1、第一行必须指定 基础镜像信息
FROM ubuntu
 
# 2、维护者信息
MAINTAINER docker_user docker_user@email.com
 
# 3、镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
 
# 4、容器启动执行指令
CMD /usr/sbin/nginx

三、构建镜像

转载于:https://www.cnblogs.com/colman/p/10282176.html

### 使用 Docker 编译 Dockerfile 通过 `docker build` 命令可以从一个 Dockerfile 构建一个新的 Docker 镜像。此过程会按照 Dockerfile 中指定的指令逐步执行,最终生成所需的镜像。 构建命令的基本语法如下: ```bash docker build [OPTIONS] PATH | URL | - ``` 具体到问题中的场景,如果要基于当前目录下的 Dockerfile 来构建镜像,则可以使用以下命令[^1]: ```bash docker build -t <image_name>:<tag> . ``` 这里的 `-t` 参数用于给新创建的镜像打上标签 `<image_name>:<tag>`,而最后的`.`表示 Dockerfile 所在的上下文路径为当前目录。 #### Dockerfile 的作用与优势 Dockerfile 提供了一种声明式的配置方法来定义如何构建镜像[^2]。相比于手动逐条输入命令,它具有更好的可维护性和一致性。开发者可以通过阅读已有的高质量 Dockerfile 并查阅官方文档进一步理解各指令的具体含义及其最佳实践[^3]。 #### 示例:多阶段构建以分离编译和运行环境 为了减少最终生产镜像大小并提高安全性,通常采用多阶段构建技术。例如,在第一个阶段设置完整的开发工具链来进行软件包的编译;第个阶段仅保留必要的运行时组件[^4]: ```dockerfile # 第一阶段: 编译环境 (Builder Stage) FROM ubuntu:22.04 AS builder RUN apt-get update && \ apt-get install -y gcc make ... COPY . /src/ WORKDIR /src/ RUN make all # 第阶段: 运行环境 FROM alpine:latest COPY --from=builder /src/output /app/ CMD ["./app"] ``` 上述例子展示了如何利用 `AS` 关键字区分不同阶段以及通过 `--from=<stage-name>` 跨越多个阶段间的数据传递。 #### 文件复制注意事项 当需要将宿主机上的某些特定文件或整个目录加入到正在构建的新镜像内部时,应确保这些资源位于 Docker 上下文中,并正确运用 COPY 或 ADD 指令[^5]: ```dockerfile COPY ./local_file_or_dir /container/path/ ``` 这里强调的是源路径需相对于 Dockerfile 自身位置设定,且目标路径则代表未来容器内的绝对或者相对工作区定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值