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

相关推荐
泡泡鱼(敲代码中)7 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm
Yanjun2i8 小时前
Agent学习记录三:完成 Agent Loop
python·学习·agent
一条破秋裤10 小时前
STM32 单片机两层学习规划
stm32·单片机·学习
老猿讲编程11 小时前
【Eclipse OpenSOVD学习之六】 数据访问层(DataProvider)
学习·eclipse·嵌入式软件·车载·sovd
浔溺12 小时前
al+大数据每日学习笔记36
大数据·笔记·学习
传奇开心果编程12 小时前
【Xilem基础语法学与练】第8课:条件渲染(one_of)
学习·rust·前端框架
小雪崩12 小时前
嵌入式学习 day44:51单片机入门
嵌入式硬件·学习·51单片机
浔溺12 小时前
al+大数据每日学习笔记35
大数据·笔记·学习
kyrie_sakura13 小时前
MySQL学习笔记4 -- select的7大子句,子查询
笔记·学习·mysql
UIU11413 小时前
补码运算与整数溢出(上
学习·c#·补码·补码运算