Dockerfile成长之路

这篇具有很好参考价值的文章主要介绍了Dockerfile成长之路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

随着业务架构的整改,针对非容器化业务全部进行容器化改造,这就设计到了java写的业务代码构建业务镜像,并通过k8s发版,因此,就得学习如何使用dockerfile构建后端业务镜像,可能不止构建后端代码镜像,例如前端写的代码也有可能构建为镜像。还有可能就是要在原有镜像基础上进行二次封装,例如:在原有的业务镜像中封装skywalking链路追踪监控、jvm监控等等,后续就有示例。


一、Dockerfile是什么?

Dockerfile 是一个用来构建镜像的文本文件, Dockerfile内容中包含了一条条构建镜像所需的指令和说明。最终采用docker build 命令通过dockerfile中指令构建镜像

二、基本指令

Dockerfile成长之路,docker与kubernetes,运维,dockerfile

1.dockerfile指令参数详解

1.1 FROM 指定基础镜像,必须为第一个命令

格式:
	FROM <image>
	FROM <image>:<tag>
示例:
	FROM mysql:5.7
注意:
	tag是可选的,如果不使用tag时,会使用latest版本的基础镜像

1.2 MAINTAINER 镜像维护者的信息

一般可以不用这个参数,使得镜像尽量小而轻
格式:
	MAINTAINER <name>
示例:
	MAINTAINER Yongxin Li
    MAINTAINER inspur_lyx@hotmail.com
    MAINTAINER Yongxin Li <inspur_lyx@hotmail.com>

1.3 COPY|ADD 添加本地文件到镜像中

格式:
	COPY <src>... <dest>
示例:
    ADD hom* /mydir/          # 添加所有以"hom"开头的文件
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/

1.4 WORKDIR 工作目录

格式:
	WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (这时工作目录为/a)
注意:
	通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行

1.5 RUN 构建镜像过程中执行命令

格式:
	RUN <command>
示例:
    RUN yum install nginx
    RUN pip install django
    RUN mkdir test && rm -rf /var/lib/unusedfiles
注意:
	RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache

1.6 CMD 构建容器后调用,也就是在容器启动时才进行调用

格式:
    CMD ["executable","param1","param2"] (执行可执行文件,优先)
    CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
    CMD command param1 param2 (执行shell内部命令)
示例:
    CMD ["/usr/bin/wc","--help"]
    CMD ping www.baidu.com
注意:
	CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

1.7 ENTRYPOINT 设置容器初始化命令,使其可执行化

格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
示例:
    ENTRYPOINT ["/usr/bin/wc","--help"]
    ENTRYPOINT ["sh","-c","sh bin/launch.sh start && tail -f start.log"]
注意:
	ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令

ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令

1.8 ENV 设置环境变量

格式:
    ENV <key> <value>
    ENV <key>=<value>
示例:
    ENV myName John
    ENV myCat=fluffy

1.9 EXPOSE 暴露容器端口

格式:
    EXPOSE <port> [<port>...]
示例:
    EXPOSE 80 443
    EXPOSE 8080
    EXPOSE 11211/tcp 11211/udp
注意:
    EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

1.10 volume 挂载文件

VOLUME <path>
 
示例:
# 在容器内创建一个挂载点 /data,用于存储数据。
VOLUME /data
 
# 在容器内创建两个挂载点 /data1 和 /data2。
VOLUME /data1 /data2
 
# 在容器内创建三个挂载点,其中前两个是匿名卷,最后一个是命名卷。命名卷允许通过名称进行引用,使其可以在多个容器之间共享和重用。
VOLUME ["/data1", "/data2", "named_volume:/data3"]

1.11 user 设置容器运行时的用户

USER <user>[:<group>]
 
# 在容器中以 myuser 用户身份运行。
USER myuser
 
# 在容器中以 myuser 用户身份,且属于 mygroup 用户组运行。
USER myuser:mygroup
 

2.Dockerfile示例及构建指令

该dockerfile就是在原有的业务镜像基础上进行的二次封装,封装了skywalking监控、jmx_exporter监控组件
因为后端是java写的,所以用jdk8镜像为底层镜像

FROM xx.xx.xx.xx/xx/openjdk:8
COPY $jarPath/*.jar /usr/local/src/app.jar
COPY ./jmx_prometheus_javaagent-0.16.1.jar /export/server/skywalking/jmx/
COPY ./config.yaml  /export/server/skywalking/jmx/
WORKDIR /usr/local/src/
ENTRYPOINT exec java -Xmx1024m -Xms1024m -Duser.timezone=Asia/Shanghai -javaagent:/export/server/skywalking/agent/skywalking-agent.jar -javaagent:/export/server/skywalking/agent/jmx_prometheus_javaagent-0.16.1.jar=19000:/export/server/skywalking/agent/config.yaml -jar app.jar

该dockerfile就是一个将前端也构建为镜像,进行启动管理.

FROM node:12.19.0
WORKDIR /output
COPY ./output /output
EXPOSE 3001
ENV NODE_ENV=production
CMD nohup npm run start >out.log 2>&1 && tail -f out.log

构建指令文章来源地址https://www.toymoban.com/news/detail-820682.html

	docker build -t 镜像名称:标签 . (.点代表在Dockerfile目录层级下执行)
	docker build -f /path/to/Dockerfile -t image_name:tag . (未在dockerfile目录层级下执行)

3.Dockerfile构建不同 CPU 架构和操作系统的镜像

	方法一、--platform=参数
	docker build  --platform=linux/arm64,linux/amd64 -t 镜像名称:标签 .  构建arm64和amd64操作系统的镜像
	方法二、 Docker CLI 插件管理器buildx
		1、安装buildx
			docker buildx install
		2、创建一个新的构建器实例
			docker buildx create --name mybuilder
		3、启用构建器实例
			docker buildx use mybuilder
		4、构建镜像
			docker buildx build --platform <platform> -t image_name:tag .

4.Dockerfile编写原则

	- 不必要的内容不要放在镜像中
	- 减少不必要的层文件
	- 减少网络传输操作
	- 可以适当的包含一些调试命令

到了这里,关于Dockerfile成长之路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(15)
  • 13.Kubernetes应用部署完整流程:从Dockerfile到Ingress发布完整流程

    本文以一个简单的Go应用Demo来演示Kubernetes应用部署的完整流程 Dockerfile多阶段构建 结合 12.Harbor构建私有镜像仓库 ,构建镜像并推送的私有仓库

    2024年02月02日
    浏览(29)
  • 《Docker极简教程》--Dockerfile--Dockerfile的基本语法

    Dockerfile是一种文本文件,用于定义Docker镜像的内容和构建步骤。它包含一系列指令,每个指令代表一个构建步骤,从基础镜像开始,逐步构建出最终的镜像。通过Dockerfile,用户可以精确地描述应用程序运行环境的配置、依赖项安装、文件复制等操作。这使得应用程序的部署

    2024年02月20日
    浏览(18)
  • 【零基础入门Docker】Dockerfile中的USER指令以及dockerfile命令详解

    ✍ 面向读者:所有人 ✍ 所属专栏:Docker零基础入门专栏 目录 第 1 步:创建 Dockerfile 第 2 步:构建 Docker 镜像 第 3 步:运行 Docker 容器 第 4 步:验证输出 dockerfile命令详解 最佳实践 默认情况下,Docker 容器以 Root 用户身份运行。如果您在 Docker 容器内大规模部署应用程序,这

    2024年02月05日
    浏览(15)
  • 【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

    Docker 是一种轻量级的容器化技术,使得应用程序和它们的依赖可以被打包到一个容器中,方便在不同环境中运行。Dockerfile 是用于定义 Docker 镜像的文本文件,其中包含了一系列的指令,这些指令描述了镜像中应该包含哪些内容和如何配置。 在开始编写 Dockerfile 之前,确保你

    2024年01月24日
    浏览(19)
  • docker/Dockerfile/docker compose

    https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/ 在x86环境下,由容器统一管理开发及运行环境。 Docker https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/ sudo dockerd 手动启动docker sudo service docker start 后台启动docker sudo dockerd 显示启动docker,看日志中的docker /var/log/docker.log sudo apt-key adv --keyserver key

    2024年02月08日
    浏览(14)
  • 【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】

      Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令(Instruction)和操作命令;每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建(也就是你要执行的操作命令)。  dockerfile是纯文本文件;  dockerfile是用来

    2024年01月18日
    浏览(19)
  • docker高级(DockerFile解析)

    1、构建三步骤 ·编写Dockerfile文件 ·docker build命令构建镜像 ·docker run依镜像运行容器实例 2、DockerFile构建过程解析 ·Dockerfile内容基础知识 ·1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 ·2:指令按照从上到下,顺序执行 ·3:#表示注释 ·4:每条指令都会创

    2024年02月10日
    浏览(13)
  • Docker容器 - DockerFile详解

    目录 DockerFile 一、是什么 二、构建步骤 DockerFile构建过程 一、DockerFile基础 二、Docker执行DockerFile的流程 三、总结 DockerFile常用保留字 零、参考Tomcat的DockerFile 一、FROM 二、MAINTAINER 三、RUN 1.shell 2.exec 四、EXPOSE 五、WORKDIR 六、USER 七、ENV 八、ADD 九、COPY 十、VOLUME 十一、CMD 1.举个

    2024年02月15日
    浏览(17)
  • 【Docker】 08-Dockerfile

    Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的教程,主要作用是用来构建docker镜像的构建文件。 保留字 作用 FROM 当前镜像是基于哪个镜像的 第一个指令必须是FROM MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 构建镜像时需要运行的指令 EXPOSE 当前容器对

    2024年02月10日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包