DockerFile

简介: DockerFile

DockerFile

指令介绍

| 指令名称 | 指令作用 |
| -------------------- | ------------------------------------------------------------ |
| FROM | 基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,有效的Dockerfile必须以FROM指令开始 |
| MAINTAINER(已弃用) | 设置镜像的作者,新版本建议采用LABEL指令 |
| RUN | 容器构建时需要运行的指令,包含两种语法:(1)RUN 相当于在终端执行shell命令 (2)RUN ["可执行命令","参数1","参数2"] 说明:RUN命令是在docker build时运行 |
| EXPOSE | 当前容器对外暴露出的端口 |
| WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,作为落脚点 |
| USER | 指定该镜像以什么样的用户去执行,如果不指定,默认为root |
| ENV | 用来在构建镜像过程中设置环境变量,语法:ENV 变量名 变量值,这个环境变量可以在后续的任何RUN指令中使用,也可以在其他指令中直接使用这些环境变量,例如:WORKDIR $JAVA_HOME |
| VOLUME | 配置容器数据卷,用于数据保存和持久化工作 |
| ADD | 将宿主机目录下的文件或将远程URL资源文件拷贝进镜像,并且会自动解压tar压缩包(远程资源不解压) |
| COPY | 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>,语法: COPY src dest | COPY ["src","dest"] src:源文件或源目录 dest:容器内的指定路径,该路径自动创建 |
| CMD | 指定容器启动后要干的事情,语法1:CMD <命令> 语法2:CMD ["命令","参数1","参数2" ...] 注意事项:Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换 与RUN命令的区别:CMD命令是在docker 启动时运行 RUN是在docker构建时执行 |
| ENTRYPOINT | 也是用来指定一个容器启动时要运行的命令,类似于CMD命令,但是ENTRYPONIT不会被docker run后面的命令覆盖,而是作为命令行参数传递刚给ENTRYPOINT指令指令的程序,如果和CMD一起使用,则CMD相当于为ENTRYPOINT传参 |

构建Docker镜像

docker build -t 新镜像名称:tag .
案例
为ubuntu安装vim,新建一个a.txt文件并添加内容
FROM ubuntu:latest  #根镜像
MAINTAINER g11n   #设置作者
ENV HOME_PATH /root  #设置环境变量
RUN apt-get update -y  #
RUN apt-get install vim -y
RUN touch $HOME_PATH/a.txt
RUN echo 'test' >> $HOME_PATH/a.txt
WORKDIR $HOME_PATH
EXPOSE 8080 #暴露端口
CMD /bin/bash #设置启动命令
为ubuntu安装jdk8
FROM ubuntu:latest

MAINTAINER g11n

USER root

ENV JAVA_HOME /usr/local/java/jdk1.8.0_77
ENV JRE_HOME /usr/local/java/jdk1.8.0_77/jre
ENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

# send package to docker image and unpack
ADD jdk-8u77-linux-x64.tar.gz  /usr/local/java

RUN apt-get update

CMD ["/bin/bash"]
发布微服务到docker
FROM java:8
MAINTAINER fmc
VOLUME /tmp:/docker_app/docker_service
WORKDIR /root/
ADD docker_service-0.0.1-SNAPSHOT.jar docker_service.jar
EXPOSE 6001
CMD  java -jar docker_service.jar
什么是虚悬镜像?
  • 编写Dockerfile
FROM ubuntu
CMD echo "success"
  • 构建

    docker build .
    REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
    <none>         <none>    7f3463a6bea3   7 seconds ago   72.8MB

仓库和tag都是none的镜像称为虚悬镜像,一般为构建失败的镜像,删除即可

相关文章
|
Linux 网络安全 开发工具
如何在 Linux CentOS 8 中搭建 GitLab 私有仓库并结合 Cpolar 内网穿透工具实现公网访问私有仓库【无公网IP内网穿透】
如何在 Linux CentOS 8 中搭建 GitLab 私有仓库并结合 Cpolar 内网穿透工具实现公网访问私有仓库【无公网IP内网穿透】
|
移动开发 自然语言处理 小程序
分享88个企业政府PHP源码,总有一款适合你
分享88个企业政府PHP源码,总有一款适合你
386 2
|
7月前
|
存储 人工智能 Java
使用Spring AI调用AI模型
Spring AI是Spring框架的模块,支持人工智能和机器学习,提供简单易用的API集成主流AI服务(如OpenAI、Azure、百度千帆等)。其主要功能包括统一API接口、提示词工程、向量存储、文本嵌入与生成。核心概念涵盖AI Client、Prompt Template和Vector Store。通过添加依赖和配置API密钥,可快速对接Chat Model并使用Advisors API增强交互体验。此外,Spring AI Alibaba项目为阿里云通义模型提供了高层次API抽象,助力开发者构建AI应用。
999 2
|
6月前
|
人工智能 Java 决策智能
Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现
此次官方发布的 Spring AI Alibaba OpenManus 实现,包含完整的多智能体任务规划、思考与执行流程,可以让开发者体验 Java 版本的多智能体效果。它能够根据用户的问题进行分析,操作浏览器,执行代码等来完成复杂任务等。
1358 57
|
存储 缓存 机器人
哈弗架构和冯诺伊曼架构
在计算机体系结构中,有两种主要的模型:冯诺伊曼架构(Von Neumann Architecture)和哈弗架构(Harvard Architecture)。冯诺伊曼架构是传统的计算机设计模型,采用统一的存储器空间存储程序指令和数据。哈弗架构则采用分离的存储器空间,分别存储程序指令和数据,以提高系统性能。这两种架构各有优缺点,并在不同的应用场景中得到广泛应用。
363 1
|
数据挖掘 Linux Perl
Linux命令join:高效处理文本数据的利器
`join`是Linux文本处理的强兵,用于基于共同字段合并两个已排序文件。它按字典序比较字段,支持自定义分隔符,且能处理未匹配行。`-a`显示未匹配行,`-e`指定空字段替换值,`-j`设置共同字段,`-o`定制输出格式,`-t`定义字段分隔符。在数据分析时,务必先排序文件,并根据需求调整参数。可与`sort`、`cut`等命令配合使用。
|
缓存 运维 Java
解决Spring Boot中的内存泄漏问题
解决Spring Boot中的内存泄漏问题
|
Prometheus Kubernetes 监控
在K8S中,如何排查与解决Pod频繁重启的问题?
在K8S中,如何排查与解决Pod频繁重启的问题?
|
网络协议 Linux 网络安全
Linux SSHD服务安装与维护详解(二)——SSHD调优和fail2ban联动
Linux SSHD服务安装与维护详解(二)——SSHD调优和fail2ban联动
207 0
|
网络协议 安全 Linux
深入解析HTTP请求:了解请求特征与报文格式的关键秘密
这篇文章将带您深入了解HTTP请求的特征和报文格式。HTTP作为一种简单、灵活且易于扩展的协议,适用于各种操作系统和设备。我们还将探讨持久性连接如何提高请求的效率。了解HTTP报文的构成,包括起始行、头部字段和消息正文,将帮助您更好地理解HTTP的工作原理。无论您是初学者还是已经有一定了解的读者,本文都将为您提供全面的HTTP知识。
486 1
深入解析HTTP请求:了解请求特征与报文格式的关键秘密