暑假运维学习打卡第二十五天8.16

Dockerfile编写详解

Dockerfile是编写Docker镜像的脚本文件,它包含了构建镜像的所有指令

Dockerfile概述

什么是Dockerfile

Dockerfile是一个文本文件,它包含了所有构建镜像的指令。这些指令按照顺序执行,最后构建出一个完整的镜像。其特点有:自动化构建;可以版本控制;构建结果可重现;构建流程标准化。

Dockerfile的基本结构

先进入工作目录 cd /xxx

再创建Dockerfile:touch Dockerfile

开始编辑:vim Dockerfile

基础镜像

使用FROM指令,例如:FROM ubuntus:20.04

维护者信息

使用MAINTAINER指令,例如:FROM SIMON <simon@gmail.com>

环境变量

使用ENV指令设置环境变量,核心语法:ENV <key> <value>

使用WORKDIR指令设置工作目录,后续命令都在其中执行

使用USER指令设置用户

使用VOLUME指令创建卷

使用ARG指令创建参数,在创建容器时可传入。例如,定义ARG VERSION = 20.04;FROM ubuntus:${VERSION}。 在创建时可通过,docker build --bulid-arg VERSION=21.00 -t myapp . 这样形式的命令来修改参数的值。

使用LABEL指令添加元数据,相当于给容器添加一些标签进行标注,如 LABEL vesion = "1.0.0"

安装依赖

使用RUN指令,语法为 RUN <command>,为shell形式,直接使用shell的命令,如RUN apt-get update && apt-get install -y nginx

或 RUN "executable","param1","param2",为EXEC形式,Docker会直接读取第一个参数(某个可执行文件的完整路径或者是在环境变量PATH中能找到的命令,如curl),然后再按照顺序执行。

准备应用程序运行所需的环境与文件,只在构建时执行一次。

复制文件

使用COPY命令,例如COPY index.html /var/www/html/ 前面是要复制的源文件的路径,后面是复制到的镜像目的地,即复制到容器文件系统的哪个路径。

或者使用ADD指令,其用法与COPY命令一致,但其多了一个自动解压tar文件,和从URL下载的功能,如果不需要这些功能,使用COPY即可。例:ADD https://example.com/file.tar.gz /app/ ADD file.tar.gz /app/

暴露端口

使用EXPOSE指令暴露端口,核心语法:EXPOSE 80 暴露端口相当于这个容器内部的应用程序会监听这些端口,请将宿主机端口映射到这些端口才能访问。

流程:外部访问 → 宿主机IP:8080 → 端口映射 → 容器内部:80 → 应用程序

相当于将宿主的某个端口通过映射与容器内部的某个端口连接起来,这样外部用户就能够通过宿主机的指定端口访问到容器内部的应用了。

启动命令

1、使用ENTRYPOINT命令,设置容器入口。例如 ENTRYPOINT "nginx",则在该容器启动时,自动会启动nginx服务,且后续

2、使用CMD命令,形式类似于RUN命令。

定义容器运行后运行什么程序,每次容器启动时都执行一次。

这两个命令组合在一起决定了容器启动后执行什么命令,如 docker run mycontainer,这种情况下无额外输入,则执行效果相当于 nginx $CMD;再比如 docker run mycontainer -t,则执行效果相当于 nginx -t,后输入的内容覆盖了CMD的内容。

Dockerfile的构建过程

读取Dockerfile 文件 -> 解析其中的命令 -> 按顺序执行其中命令 -> 生成Docker镜像

构建命令:1、docker bulid -t myapp . #构建镜像,自动寻找当前目录下名为Dockerfile的文件

2、docker build -t -f Dockerfile.custom . #以指定的Dockerfile.custom文件构建镜像

相关推荐
Swilderrr3 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
kkkkkkkkkk_Z3 小时前
新手自学嵌入式 | 学习日记:LCD显示原理、PWM控制、电容触摸屏(GT9147)驱动开发与项目实战
驱动开发·学习
LXT7124 小时前
每日英语一读|为什么夏天的雷雨,总爱在傍晚出现?
深度学习·学习
知识分享小能手4 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
羊羊一洋4 小时前
ROM&RAM
c语言·stm32·学习
优化Henry6 小时前
LTE小区光路降质告警排查与处理实录
运维·网络·学习·5g·tdd
暖馒6 小时前
运动控制框架相关知识
学习
stereohomology6 小时前
我对DeepSeek4.1flash能力变化的感觉和第三方评估相当
人工智能·学习·llm
syagain_zsx7 小时前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf
qq_284274058 小时前
电气控制笔记:常用低压电器符号原理与异步电动机点动、自锁、多地控制电路(含考点)
笔记·学习·自动化·制造