docker - [11] 数据卷之DockerFile
通过DockerFile可以生成一个镜像
一、DockerFile的介绍
狂神:
dockerfile
是用来构建docker
镜像的文件命令参数脚本。狂神:
dockerfile
是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile
文件狂神:
Docker
镜像逐渐成为企业交付的标准,必须要掌握!
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品。
DockerContainer:容器就是镜像运行起来提供服务的。
二、DockerFile的指令
指令 | 说明 |
FROM | 设置镜像使用的基础镜像 |
MAINTAINER | 设置镜像的作者 |
RUN | 编译镜像时运行的脚本 |
CMD | 设置容器的启动命令 |
LABEL | 设置镜像的标签 |
EXPOSE | 设置镜像暴露的端口 |
ENV | 设置容器的环境变量 |
ADD | 编译镜像时复制文件到镜像中 |
COPY | 编译镜像时复制文件到镜像中 |
ENTRYPOINT | 设置容器的入口程序 |
VOLUME | 设置容器的挂载卷 |
USER | 设置运行RUN CMD ENTRYPOINT的用户名 |
WORKDIR | 设置RUN CMD ENTRYPOINT COPY ADD指令的工作目录 |
ARG | 设置编译镜像时加入的参数 |
ONBUILD | 设置镜像的ONBUILD指令 |
STOPSIGNAL | 设置容器的退出信号量 |
2.1、CMD和ENTRYPOINT的区别
CMD:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
(1)编写dockerfile并构建镜像,之后启动镜像;
(2)直接运行镜像,会执行CMD处配置的命令。如果执行docker run 2b06f9641629 -l
会报错。
(3)追加参数会报错:docker run 2b06f9641629 -l
ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令
(1)编写dockerfile:dockerfile-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
(2)构建镜像:docker build -f dockerfile-entrypoint-test -t entrypointtest .
(3)启动镜像:docker images | grep entrypoint
(4)追加参数:docker run a58b53c50da3 -l
三、DockerFile构建过程
3.1、docker file语法规范
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、
#
表示注释4、每一个指令都会创建一个新的镜像层,并提交
示例:centos的dockerfile
FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c7-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-03-04"
# Volumes for systemd
# VOLUME ["/run", "/tmp"]
# Environment for systemd
# ENV container=docker
# For systemd usage this changes to /usr/sbin/init
# Keeping it as /bin/bash for compatability with previous
CMD ["/bin/bash"]
3.2、docker file构建步骤
(1)编写一个dockerfile文件
(2)docker build构建成为一个镜像
(3)docker run运行镜像
(4)docker push发布镜像(DockerHub、阿里云镜像仓库)
(1)编写dockerfile文件:dockerfile1
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
(2)docker build构建成为一个镜像:harleycentos:1.0
docker build -f dockerfile1 -t harleycentos:1.0 .
mydockerfile-centos:dockerfile文件路径
mycentos:0.1镜像名
(3)docker run运行镜像:docker run -it harleycentos:1.0 bash
(4)可以使用docker inspect
看到demo中的挂载属于匿名挂载
(5)docker push发布镜像
3.3、制作一个centos镜像
(1)编写dockerfile文件:mydockerfile
# 以哪个镜像作为基础
FROM centos
MAINTAINER harley<hhl686666@163.com>
# 设置环境变量MYPATH
ENV MYPATH /usr/local
# 设置工作目录(docker run -it运行镜像之后所在的目录)
WORKDIR $MYPATH
# 安装vim、net-tools
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露80端口
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash
(2)构建镜像:docker build -f mydockerfile -t mycentos:0.1 .
— 要养成终身学习的习惯 —
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南