网站首页 > 精选教程 正文
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令
我们以nginx镜像为例子来说明
在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。
RUN:用于执行后面跟着的命令行命令。
RUN <命令行命令>
RUN ["可执行文件", "参数1", "参数2"]
在 Dockerfile 文件的存放目录下,执行构建动作。注意命令行最后的点,别丢了。是上下文路径的意思。
docker build -t nginx:v1 .
指令讲解
COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
COPY app.jar /opt/
COPY bootup.sh /opt/
ADD
ADD 指令和 COPY 的使用格类似,源文件为 tar 压缩文件的话,会自动复制并解压到目标路径
CMD
类似于 RUN 指令,CMD 在docker run 时运行,RUN 是在 docker build。需要注意的是, Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
ENV
设置环境变量
ARG
构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
EXPOSE
声明端口
WORKDIR
指定工作目录
USER
执行后续命令的用户和用户组
HEALTHCHECK
监控 docker 容器服务的运行状态
ONBUILD
延迟构建命令的执行
LABEL
给镜像添加一些元数据
最后我们来构建一个python运行环境,执行python程序
hello.py的文件内容:
print("hello docker")
FROM ubuntu:21.04
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y python3.9 python3-pip python3.9-dev
ADD hello.py /
CMD ["python3", "/hello.py"]
执行构建命令
docker image build -t hello:v1.0 .
猜你喜欢
- 2024-10-20 linux日常脚本 linux常用脚本语言
- 2024-10-20 Linux 三剑客 linux三剑客命令详解
- 2024-10-20 OpenResty 动态负载均衡 负载均衡与动态扩容
- 2024-10-20 Dockerfile 命令详解 dockerfile from命令
- 2024-10-20 Docker实战九之Docker Dockerfile
- 2024-10-20 Centos7迁移不同的PHP项目工作笔记
- 2024-10-20 Docker之容器命令 docker容器命令行不存在能否使用宿主命令
- 2024-10-20 Docker容器服务编排实践 docker 容器编排
- 2024-10-20 详解Linux Shell脚本编写技巧,附实例说明
- 2024-10-20 从实例来学习Linux shell脚本,附实例分享
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)