【Docker基础篇】从0到1写Dockerfile:FROM/COPY/CMD/ENTRYPOINT指令详解+Hello World实战
予枫个人主页 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》 Debug 这个世界Return 更好的自己引言作为Docker容器化的核心Dockerfile是构建自定义镜像的“说明书”新手入门常被FROM、COPY等指令搞晕尤其分不清CMD和ENTRYPOINT的区别。本文从零开始拆解4个最常用的Dockerfile指令搭配极简Hello World实战手把手教你写出第一个可运行的Dockerfile新手也能快速上手收藏起来慢慢练文章目录一、DOCKERFILE 核心认知二、常用指令详解必学4个2.1 FROM指定基础镜像必备第一条2.2 COPY复制文件到镜像中2.3 WORKDIR指定工作目录2.4 CMD vs ENTRYPOINT容器启动命令重点区分2.4.1 CMD容器启动默认命令2.4.2 ENTRYPOINT容器启动入口命令2.4.3 核心区别总结新手必记三、实战写一个最简单的Hello World服务的Dockerfile3.1 实战准备3.2 编写文件内容3.2.1 编写app.sh脚本3.2.2 编写Dockerfile3.3 构建镜像启动容器实战操作3.3.1 构建镜像3.3.2 启动容器四、结尾总结一、DOCKERFILE 核心认知Dockerfile是一个纯文本文件包含了一系列有序的指令每一条指令对应镜像构建的一个步骤。通过docker build命令Docker会自动读取Dockerfile中的指令一步步构建出我们需要的镜像最终基于镜像启动容器。核心优势可复用一份Dockerfile可在任意支持Docker的环境中构建镜像解决“环境不一致”难题可版本控制Dockerfile可纳入Git管理便于追溯镜像构建逻辑的变更自动化结合CI/CD可实现镜像自动构建、部署提升开发效率小贴士新手写Dockerfile记住一个原则——“每一条指令只做一件事”既能保证镜像精简也能减少构建错误。记得点赞收藏后续实战不迷路二、常用指令详解必学4个这4个指令是Dockerfile入门的核心覆盖了“基础镜像选择、文件复制、工作目录设置、容器启动命令”四大核心场景吃透它们就能应对80%的入门场景。2.1 FROM指定基础镜像必备第一条作用指定构建当前镜像所依赖的基础镜像相当于“搭建地基”所有后续指令都基于这个基础镜像执行。语法FROM 镜像名称:标签说明标签可选默认是latest最新版本但生产环境建议指定具体标签如ubuntu:22.04避免版本变更导致异常基础镜像可以是官方镜像如ubuntu、alpine也可以是自定义镜像每一个Dockerfile必须以FROM指令开头注释除外示例# 基于ubuntu 22.04官方镜像作为基础镜像 FROM ubuntu:22.042.2 COPY复制文件到镜像中作用将宿主机本地的文件或目录复制到构建中的镜像指定路径下。语法COPY 宿主机路径 镜像内路径说明宿主机路径是相对于Dockerfile所在目录的相对路径不能使用绝对路径除非使用COPY . /xxx复制当前目录所有文件如果镜像内路径不存在Docker会自动创建该路径可复制单个文件、多个文件或整个目录示例# 将宿主机当前目录下的app.py文件复制到镜像的/usr/src/app目录下 COPY app.py /usr/src/app/ # 将宿主机当前目录下的所有文件复制到镜像的/usr/src/app目录下 COPY . /usr/src/app/2.3 WORKDIR指定工作目录作用设置后续指令如COPY、CMD、ENTRYPOINT的工作目录相当于“进入镜像中的某个文件夹”后续指令都在该目录下执行。语法WORKDIR 镜像内目录路径说明如果指定的目录不存在Docker会自动创建该目录可多次使用WORKDIR每次使用都会切换到新的目录类似cd命令推荐使用WORKDIR避免在COPY、CMD中使用复杂的路径提升可读性示例# 设置工作目录为/usr/src/app后续指令都在此目录下执行 WORKDIR /usr/src/app # 此时COPY指令相当于将宿主机app.py复制到/usr/src/app/app.py COPY app.py .2.4 CMD vs ENTRYPOINT容器启动命令重点区分这两个指令都用于指定容器启动时执行的命令新手最容易混淆核心区别CMD可被覆盖ENTRYPOINT不可被覆盖具体拆解如下2.4.1 CMD容器启动默认命令作用指定容器启动时默认执行的命令若启动容器时手动指定了命令会覆盖CMD的默认命令。语法常用两种Exec格式推荐CMD [可执行文件, 参数1, 参数2]注意用双引号逗号分隔Shell格式CMD 命令 参数1 参数2示例# Exec格式容器启动时执行echo Hello Docker CMD [echo, Hello Docker] # 启动容器时手动指定命令会覆盖CMD # docker run -it 镜像名称 echo Hello World → 输出Hello World而非默认内容2.4.2 ENTRYPOINT容器启动入口命令作用指定容器启动时必须执行的命令无法被启动容器时的手动命令覆盖只能通过--entrypoint参数修改。语法常用Exec格式ENTRYPOINT [可执行文件, 参数1, 参数2]说明常与CMD配合使用ENTRYPOINT指定固定命令CMD指定默认参数启动容器时可修改CMD的参数适合用于构建“专用容器”如固定执行某个服务确保容器启动必执行指定命令示例配合使用# ENTRYPOINT指定固定命令echoCMD指定默认参数Hello Docker ENTRYPOINT [echo] CMD [Hello Docker] # 启动容器时可修改CMD的参数不改变ENTRYPOINT # docker run -it 镜像名称 Hello Entrypoint → 输出Hello Entrypoint2.4.3 核心区别总结新手必记指令是否可被覆盖核心用途CMD是启动容器时手动命令覆盖指定容器默认启动命令可修改ENTRYPOINT否仅–entrypoint可修改指定容器固定启动入口不可改小贴士新手入门建议优先使用CMD熟悉后再根据需求搭配ENTRYPOINT避免一开始混淆用法 觉得有用的话麻烦点赞支持一下后续更新更多Docker实战技巧三、实战写一个最简单的Hello World服务的Dockerfile学会上面4个指令我们直接上手实战编写一个极简的Hello World Dockerfile构建镜像后启动容器就能看到输出结果全程不到10行代码新手可直接复制操作。3.1 实战准备本地安装Docker已安装可跳过未安装的同学自行搜索对应系统安装教程新建一个空目录如dockerfile-demo在目录中创建两个文件Dockerfile无后缀和app.sh脚本文件用于输出Hello World3.2 编写文件内容3.2.1 编写app.sh脚本#!/bin/bash# 输出Hello World同时打印当前时间echoHello World! 当前时间$(date)3.2.2 编写Dockerfile# 1. 指定基础镜像选择轻量的alpine镜像体积更小 FROM alpine:3.18 # 2. 设置工作目录 WORKDIR /usr/src/demo # 3. 复制宿主机的app.sh脚本到镜像中 COPY app.sh . # 4. 给app.sh添加执行权限alpine镜像默认无执行权限 RUN chmod x app.sh # 5. 指定容器启动命令执行app.sh脚本 CMD [./app.sh]说明新增了RUN指令简单提一句用于在构建镜像时执行命令如给文件加权限后续进阶教程会详细拆解新手先了解即可。3.3 构建镜像启动容器实战操作在Dockerfile所在目录执行以下命令复制即可执行3.3.1 构建镜像# docker build -t 镜像名称:标签 . 末尾的.表示当前目录的Dockerfiledockerbuild -t hello-docker:v1.执行成功后用docker images命令可看到构建好的hello-docker:v1镜像3.3.2 启动容器# docker run 镜像名称:标签dockerrun hello-docker:v1执行后会看到输出Hello World! 当前时间xxx时间为容器内的当前时间说明Dockerfile编写成功、镜像构建正常、容器启动成功实战总结这个极简案例完美用到了FROM、COPY、WORKDIR、CMD四个核心指令新手可反复练习修改app.sh的内容重新构建镜像、启动容器感受Dockerfile的作用四、结尾总结本文从零开始拆解了Dockerfile入门必备的4个核心指令FROM、COPY、WORKDIR、CMD vs ENTRYPOINT重点区分了新手易混淆的CMD和ENTRYPOINT最后通过一个极简的Hello World实战让大家亲手体验Dockerfile的编写、镜像构建和容器启动全过程。Dockerfile是Docker容器化的基础后续复杂的镜像构建都是基于这些核心指令的延伸建议新手先吃透本文内容多动手实战避免死记硬背慢慢就能熟练编写Dockerfile。我是予枫专注分享Docker、Python、后端开发相关干货关注我后续更新更多Docker进阶技巧多阶段构建、镜像优化等带你从新手成长为容器高手欢迎在评论区留言说说你写Dockerfile时踩过的坑一起交流学习

相关新闻

基于深度学习YOLOv12的玉米幼苗杂草识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

基于深度学习YOLOv12的玉米幼苗杂草识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文设计并实现了一种基于深度学习YOLOv12的玉米幼苗与杂草检测系统,针对农业场景中的精准除草需求,实现了高效的目标检测与分类。系统以YOLOv12为核心算法,构建了包含2类目标("weed"杂草和"cron&qu…

2026/5/17 4:23:48 阅读更多 →
基于深度学习YOLOv12的PCB电路板缺陷检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

基于深度学习YOLOv12的PCB电路板缺陷检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文设计并实现了一种基于深度学习YOLOv12算法的PCB电路板缺陷检测系统,旨在自动化识别六类常见缺陷,包括漏孔(missing_hole)、鼠咬(mouse_bite)、开路(open_circuit)…

2026/5/17 4:23:46 阅读更多 →
Why Does RL Generalize Better Than SFT A Data-Centric Perspective on VLM Post-Training

Why Does RL Generalize Better Than SFT A Data-Centric Perspective on VLM Post-Training

Why Does RL Generalize Better Than SFT? A Data-Centric Perspective on VLM Post-Training Authors: Aojun Lu, Tao Feng, Hangjie Yuan, Wei Li, Yanan Sun Deep-Dive Summary: 这是一篇关于视觉语言模型(VLM)后训练阶段泛化能力的学术论文摘要与…

2026/7/3 15:27:30 阅读更多 →

最新新闻

WAIC 2026 揭示算力新趋势:从单卡比拼到系统级竞争,多维度降本增效!

WAIC 2026 揭示算力新趋势:从单卡比拼到系统级竞争,多维度降本增效!

当算力竞赛步入新阶段当算力竞赛步入“系统级主权竞争”新阶段,衡量标准从单芯片峰值转变为整套系统的算力利用率。2026 年,产业重心从训练转向推理,推理算力规模超越训练,算力成为全行业通用基建和日常运营成本。行业关注焦点变为…

2026/7/5 8:32:22 阅读更多 →
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【引子】

AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【引子】

引子——一个面试回答引发的思考 本文是系列开篇,通过一个真实的面试对话,拆解AI对话长场景下的核心痛点,并勾勒出从“初级”到“P7架构师”的五层进阶路线图。 01. 一个让全场安静的面试回答 在某次的前端面试现场,面试官抛出了…

2026/7/5 8:30:22 阅读更多 →
静态文件服务器XSS攻击:文件上传场景下的安全盲区与防御实践

静态文件服务器XSS攻击:文件上传场景下的安全盲区与防御实践

1. 项目概述:一个被忽视的“安全盲区”“静态文件服务器”和“XSS攻击”,这两个词放在一起,很多开发者第一反应可能是:“这俩有关系吗?” 在很多人的认知里,静态文件服务器,比如Nginx、Apache直…

2026/7/5 8:30:22 阅读更多 →
JMeter环境配置全攻略:从Java安装到性能测试实战

JMeter环境配置全攻略:从Java安装到性能测试实战

1. 项目概述 如果你刚接触性能测试或者接口自动化,听到“JMeter”这个名字,大概率会有点懵。这玩意儿到底是干嘛的?简单来说,它就像是一个“压力模拟器”和“接口调试器”的结合体。想象一下,你要测试一个网站或者一个…

2026/7/5 8:28:20 阅读更多 →
宜春口腔机构甄选与避坑实测指南

宜春口腔机构甄选与避坑实测指南

随着口腔行业不断发展,宜春本地口腔门诊数量逐年增加,市民看牙的选择变多,但踩坑概率也随之提升。很多人分不清正规诊疗与套路营销,常常遇到低价引流、方案夸大、医生不稳定、售后缺失等问题。结合本地就诊现状,本文从…

2026/7/5 8:28:20 阅读更多 →
PostgreSQL与MySQL比较

PostgreSQL与MySQL比较

PostgreSQL与MySQL比较 摘要 在当今数据驱动的时代,关系型数据库仍然是绝大多数应用系统的核心基础设施。开源数据库领域,PostgreSQL与MySQL长期占据主导地位,两者在发展哲学、架构设计、功能特性和许可模式上存在深刻差异。PostgreSQL以对…

2026/7/5 8:26:20 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻