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

相关推荐
tiankongdeyige11 小时前
游戏战斗系统学习第2篇:有限状态机 (FSM)
学习·游戏·typescript
an123212114 小时前
ARM嵌入式学习笔记:SPI通信协议详解
arm开发·笔记·学习
by2099914 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
乌暮15 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
小雪崩15 小时前
嵌入式学习 day60:ARM汇编——触摸屏与SPI
汇编·arm开发·学习
问天_观心16 小时前
大模型训练与推理优化(二)
人工智能·深度学习·学习·大模型·transformer
海海不掉头发18 小时前
软件项目管理学习笔记-从软件危机到敏捷与DevOps
笔记·学习·devops
传奇开心果编程18 小时前
【SwiftUI入门练中学】第7课 动画与手势:让界面更灵动
学习·macos·ui·ios·swiftui·swift
幼儿园蛋小黄19 小时前
SPI 多点触摸屏学习嵌入式总结
学习
dadaobusi19 小时前
学习:顶点着色器输出后,三角形为什么是四个分量
学习