暑假运维学习打卡第二十五天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文件构建镜像

相关推荐
键盘飞行员2 小时前
Flutter App 全套实战学习计划:从零搭建到 APK 部署
学习·flutter
会编程的吕洞宾3 小时前
DeepAgents In Action学习(Second)
android·java·学习
我爱cope4 小时前
【计算机网络 | 数据链路层7:VLAN:一台交换机如何划分多个逻辑局域网?】
网络·学习·计算机网络
babe小鑫4 小时前
2026信管专业学习数据分析的价值
学习·数据挖掘·数据分析
编程圈子5 小时前
电机驱动开发学习25. 弱磁控制与全速域增益调度
驱动开发·学习
Be for thing5 小时前
【嵌入式成长3】STC89C51外部中断|中断原理、寄存器、中断服务函数
单片机·嵌入式硬件·学习
优化Henry6 小时前
学习笔记之爱立信站点指向证书执行
运维·服务器·网络·笔记·学习·信息与通信
IT古董8 小时前
【WMS学习笔记系列】03-功能模块设计
笔记·学习·系统架构
zyf1044169 小时前
暑期实践日志 Day31:推进修改任务,完成第五章字幕添加
学习·计算机网络·剪辑·暑期实践·课题任务·课程视频